summaryrefslogtreecommitdiff
path: root/desktop/source/deployment/manager
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2012-08-24 16:45:20 +0200
committerStephan Bergmann <sbergman@redhat.com>2012-08-24 17:18:28 +0200
commit1b40fbe41459a2231870af94a06263d89af554a6 (patch)
tree509f78e5763f55fa1db8d39d774a978fb96e82a7 /desktop/source/deployment/manager
parent35d474ff8c36d12e2afafee8a061745e47ef4fb0 (diff)
fdo#53968 etc.: Fix more "doesn't start after upgrade" problems
* fdo#53968 revealed that multiple soffice.bin instances can run removeTree in parallel. Therefore, demoted failures from exceptions to SAL_WARNs. (And keeping fingers crossed.) * a8cdce148c76c93c5d41820610d6e6ac175e03a7 "fdo#53655: Ignore failure to remove directories (as happens on Windows XP)" was due to a forgotten osl::Directory::close before calling osl::Directory::remove after all. * UserInstallations have been seen in the wild where no extensions were installed per-user (any longer), but user/uno_packages/cache/registry/ com.sun.star.comp.deployment.component.PackageRegistryBackend/*.rdb files contained data nevertheless. To reliably clean out any old junk, refreshBundledExtensionsDir has been extended to cleanExtensionsCache which in tandem with an extended Desktop::SynchronizeExtensionRepositories now cleanly re-installs all bundled, shared, and per-user extensions after a LO upgrade. Change-Id: Ic6b5b6c1945d76eb3a65b6cd4512a657b7a835a0
Diffstat (limited to 'desktop/source/deployment/manager')
-rw-r--r--desktop/source/deployment/manager/dp_extensionmanager.cxx10
-rw-r--r--desktop/source/deployment/manager/dp_extensionmanager.hxx2
-rw-r--r--desktop/source/deployment/manager/dp_manager.cxx4
-rw-r--r--desktop/source/deployment/manager/dp_manager.h1
4 files changed, 10 insertions, 7 deletions
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx
index 68403f1af6cb..b3c21b4db52e 100644
--- a/desktop/source/deployment/manager/dp_extensionmanager.cxx
+++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx
@@ -1205,9 +1205,10 @@ uno::Sequence< uno::Sequence<Reference<deploy::XPackage> > >
}
}
-//only to be called from unopkg!!!
+// Only to be called from unopkg or soffice bootstrap (with force=true in the
+// latter case):
void ExtensionManager::reinstallDeployedExtensions(
- OUString const & repository,
+ sal_Bool force, OUString const & repository,
Reference<task::XAbortChannel> const & xAbortChannel,
Reference<ucb::XCommandEnvironment> const & xCmdEnv )
throw (deploy::DeploymentException,
@@ -1220,10 +1221,11 @@ void ExtensionManager::reinstallDeployedExtensions(
xPackageManager = getPackageManager(repository);
::osl::MutexGuard guard(getMutex());
- xPackageManager->reinstallDeployedPackages(xAbortChannel, xCmdEnv);
+ xPackageManager->reinstallDeployedPackages(
+ force, xAbortChannel, xCmdEnv);
//We must sync here, otherwise we will get exceptions when extensions
//are removed.
- dp_misc::syncRepositories(xCmdEnv);
+ dp_misc::syncRepositories(force, xCmdEnv);
const uno::Sequence< Reference<deploy::XPackage> > extensions(
xPackageManager->getDeployedPackages(xAbortChannel, xCmdEnv));
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.hxx b/desktop/source/deployment/manager/dp_extensionmanager.hxx
index 0682aac1a832..c8d8b300da60 100644
--- a/desktop/source/deployment/manager/dp_extensionmanager.hxx
+++ b/desktop/source/deployment/manager/dp_extensionmanager.hxx
@@ -182,7 +182,7 @@ public:
css::uno::RuntimeException);
virtual void SAL_CALL reinstallDeployedExtensions(
- ::rtl::OUString const & repository,
+ sal_Bool force, ::rtl::OUString const & repository,
css::uno::Reference< css::task::XAbortChannel> const & xAbortChannel,
css::uno::Reference< css::ucb::XCommandEnvironment> const & xCmdEnv )
throw (
diff --git a/desktop/source/deployment/manager/dp_manager.cxx b/desktop/source/deployment/manager/dp_manager.cxx
index 7d919ed52385..c07109bbe78d 100644
--- a/desktop/source/deployment/manager/dp_manager.cxx
+++ b/desktop/source/deployment/manager/dp_manager.cxx
@@ -1164,14 +1164,14 @@ PackageManagerImpl::getDeployedPackages(
//ToDo: the function must not call registerPackage, do this in
//XExtensionManager.reinstallDeployedExtensions
void PackageManagerImpl::reinstallDeployedPackages(
- Reference<task::XAbortChannel> const & /*xAbortChannel*/,
+ sal_Bool force, Reference<task::XAbortChannel> const & /*xAbortChannel*/,
Reference<XCommandEnvironment> const & xCmdEnv_ )
throw (deployment::DeploymentException,
CommandFailedException, CommandAbortedException,
lang::IllegalArgumentException, RuntimeException)
{
check();
- if (office_is_running())
+ if (!force && office_is_running())
throw RuntimeException(
OUSTR("You must close any running Office process before "
"reinstalling packages!"), static_cast<OWeakObject *>(this) );
diff --git a/desktop/source/deployment/manager/dp_manager.h b/desktop/source/deployment/manager/dp_manager.h
index b88b51111062..79301d630ab8 100644
--- a/desktop/source/deployment/manager/dp_manager.h
+++ b/desktop/source/deployment/manager/dp_manager.h
@@ -227,6 +227,7 @@ public:
css::uno::RuntimeException);
virtual void SAL_CALL reinstallDeployedPackages(
+ sal_Bool force,
css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
throw (css::deployment::DeploymentException,