diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2012-08-24 16:45:20 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2012-08-24 17:18:28 +0200 |
commit | 1b40fbe41459a2231870af94a06263d89af554a6 (patch) | |
tree | 509f78e5763f55fa1db8d39d774a978fb96e82a7 /desktop/source/deployment/manager | |
parent | 35d474ff8c36d12e2afafee8a061745e47ef4fb0 (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')
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, |