desktop/source/deployment/manager/dp_extensionmanager.cxx | 7 ++- desktop/source/deployment/manager/dp_extensionmanager.hxx | 1 desktop/source/deployment/manager/dp_manager.cxx | 26 ++++++++------ desktop/source/deployment/manager/dp_manager.h | 2 + desktop/source/deployment/misc/dp_misc.cxx | 2 - offapi/com/sun/star/deployment/XExtensionManager.idl | 8 ++++ offapi/com/sun/star/deployment/XPackageManager.idl | 8 +++- 7 files changed, 39 insertions(+), 15 deletions(-)
New commits: commit 81fd6b084b0f3c0eb5a97c77592f5ceb21d2dfb1 Author: Stephan Bergmann <[email protected]> Date: Thu Aug 2 18:10:03 2012 +0200 fdo#53006 Force reinstall of all bundled extensions on upgrade ...as the per-user data about bundled extensions can otherwise contain stale $BUNDLED_EXTENSIONS_PREREG references if the old installation used share/prereg/bundled/, the new one does not (cf. the fixing for fdo#51252 "LO cannot start (reports runtime error with Visual C++ Runtime Library)"), and a bundled extension did not change version. It is safe to tie this behavior to the existing "force" parameter of dp_misc::syncRepositories, as the only place that calls it with force=true is the call to Desktop::SynchronizeExtensionRepositories(newInst) in Desktop::Main, where newInst=true is the relevant condition for this behavior, too. As stated in XExtensionManager.idl, "this [...] can go again once no exisiting UserInstallation's user/extensions/bundled/ data can contain any $BUNDLED_EXTENSIONS_PREREG references any longer." Change-Id: I630dec8f2d20282ee47c65ac61ed2c9b062448e1 diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx index e5a16b7..290df13 100644 --- a/desktop/source/deployment/manager/dp_extensionmanager.cxx +++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx @@ -1278,7 +1278,7 @@ void ExtensionManager::synchronizeBundledPrereg( Reference<deploy::XPackageManager> xMgr = xPackageManagerFactory->getPackageManager(OUSTR("bundled_prereg")); - xMgr->synchronize(xAbortChannel, xCmdEnv); + xMgr->synchronize(false, xAbortChannel, xCmdEnv); progressBundled.update(OUSTR("\n\n")); uno::Sequence<Reference<deploy::XPackage> > extensions = xMgr->getDeployedPackages( @@ -1317,6 +1317,7 @@ void ExtensionManager::synchronizeBundledPrereg( } sal_Bool ExtensionManager::synchronize( + sal_Bool forceBundled, Reference<task::XAbortChannel> const & xAbortChannel, Reference<ucb::XCommandEnvironment> const & xCmdEnv ) throw (deploy::DeploymentException, @@ -1333,13 +1334,13 @@ sal_Bool ExtensionManager::synchronize( String sSynchronizingShared(StrSyncRepository::get()); sSynchronizingShared.SearchAndReplaceAllAscii( "%NAME", OUSTR("shared")); dp_misc::ProgressLevel progressShared(xCmdEnv, sSynchronizingShared); - bModified = getSharedRepository()->synchronize(xAbortChannel, xCmdEnv); + bModified = getSharedRepository()->synchronize(false, xAbortChannel, xCmdEnv); progressShared.update(OUSTR("\n\n")); String sSynchronizingBundled(StrSyncRepository::get()); sSynchronizingBundled.SearchAndReplaceAllAscii( "%NAME", OUSTR("bundled")); dp_misc::ProgressLevel progressBundled(xCmdEnv, sSynchronizingBundled); - bModified |= getBundledRepository()->synchronize(xAbortChannel, xCmdEnv); + bModified |= getBundledRepository()->synchronize(forceBundled, xAbortChannel, xCmdEnv); progressBundled.update(OUSTR("\n\n")); //Always determine the active extension. This is necessary for the diff --git a/desktop/source/deployment/manager/dp_extensionmanager.hxx b/desktop/source/deployment/manager/dp_extensionmanager.hxx index 800d91f..05fcde8 100644 --- a/desktop/source/deployment/manager/dp_extensionmanager.hxx +++ b/desktop/source/deployment/manager/dp_extensionmanager.hxx @@ -193,6 +193,7 @@ public: css::uno::RuntimeException); virtual sal_Bool SAL_CALL synchronize( + sal_Bool forceBundled, css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel, css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) throw (css::deployment::DeploymentException, diff --git a/desktop/source/deployment/manager/dp_manager.cxx b/desktop/source/deployment/manager/dp_manager.cxx index 2ddee4a..d7c8a2a 100644 --- a/desktop/source/deployment/manager/dp_manager.cxx +++ b/desktop/source/deployment/manager/dp_manager.cxx @@ -1248,6 +1248,7 @@ void PackageManagerImpl::reinstallDeployedPackages( return m_readOnly; } bool PackageManagerImpl::synchronizeRemovedExtensions( + bool force, Reference<task::XAbortChannel> const & xAbortChannel, Reference<css::ucb::XCommandEnvironment> const & xCmdEnv) { @@ -1271,15 +1272,19 @@ bool PackageManagerImpl::synchronizeRemovedExtensions( if (bShared) url = makeURLAppendSysPathSegment( url + OUSTR("_"), i->second.fileName); - bool bRemoved = false; - //Check if the URL to the extension is still the same - ::ucbhelper::Content contentExtension; + bool bRemoved = force; - if (!create_ucb_content( - &contentExtension, url, - Reference<XCommandEnvironment>(), false)) + //Check if the URL to the extension is still the same + if (!bRemoved) { - bRemoved = true; + ::ucbhelper::Content contentExtension; + + if (!create_ucb_content( + &contentExtension, url, + Reference<XCommandEnvironment>(), false)) + { + bRemoved = true; + } } //The folder is in the extension database, but it can still be deleted. @@ -1455,15 +1460,16 @@ bool PackageManagerImpl::synchronizeAddedExtensions( } } } - catch (const uno::Exception &) + catch (const uno::Exception & e) { - OSL_ASSERT(0); + SAL_WARN("desktop.deployment", e.Message); } } return bModified; } sal_Bool PackageManagerImpl::synchronize( + sal_Bool force, Reference<task::XAbortChannel> const & xAbortChannel, Reference<css::ucb::XCommandEnvironment> const & xCmdEnv) throw (css::deployment::DeploymentException, @@ -1476,7 +1482,7 @@ sal_Bool PackageManagerImpl::synchronize( if (m_context.equals(OUSTR("user"))) return bModified; bModified |= - synchronizeRemovedExtensions(xAbortChannel, xCmdEnv); + synchronizeRemovedExtensions(force, xAbortChannel, xCmdEnv); bModified |= synchronizeAddedExtensions(xAbortChannel, xCmdEnv); return bModified; diff --git a/desktop/source/deployment/manager/dp_manager.h b/desktop/source/deployment/manager/dp_manager.h index b88b511..cb3cbe8 100644 --- a/desktop/source/deployment/manager/dp_manager.h +++ b/desktop/source/deployment/manager/dp_manager.h @@ -82,6 +82,7 @@ class PackageManagerImpl : private ::dp_misc::MutexHolder, public t_pm_helper css::uno::Reference<css::deployment::XPackage> const & package); bool synchronizeRemovedExtensions( + bool force, css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel, css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv); @@ -239,6 +240,7 @@ public: throw (::com::sun::star::uno::RuntimeException); virtual ::sal_Bool SAL_CALL synchronize( + sal_Bool force, css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel, css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv ) throw (css::deployment::DeploymentException, diff --git a/desktop/source/deployment/misc/dp_misc.cxx b/desktop/source/deployment/misc/dp_misc.cxx index a262816..6f47e3d 100644 --- a/desktop/source/deployment/misc/dp_misc.cxx +++ b/desktop/source/deployment/misc/dp_misc.cxx @@ -568,7 +568,7 @@ void syncRepositories( if (xExtensionManager.is()) { bModified = xExtensionManager->synchronize( - Reference<task::XAbortChannel>(), xCmdEnv); + force, Reference<task::XAbortChannel>(), xCmdEnv); } } diff --git a/offapi/com/sun/star/deployment/XExtensionManager.idl b/offapi/com/sun/star/deployment/XExtensionManager.idl index 7744ea6..3809d90 100644 --- a/offapi/com/sun/star/deployment/XExtensionManager.idl +++ b/offapi/com/sun/star/deployment/XExtensionManager.idl @@ -285,11 +285,19 @@ interface XExtensionManager The active extensions are determined. That is, shared or bundled extensions are not necessaryly registered (<member>XPackage::registerPackage</member>). + @param forceBundled + whether to reinstall all bundled extensions even if their versions + have not changed (which might be necessary when an upgraded + installation outdates references to any share/prereg/bundled/ + data; this parameter can go again once no exisiting + UserInstallation's user/extensions/bundled/ data can contain any + $BUNDLED_EXTENSIONS_PREREG references any longer) @return If true - then at least one extension was removed or added. Otherwise nothing was changed. */ boolean synchronize( + [in] boolean forceBundled, [in] com::sun::star::task::XAbortChannel xAbortChannel, [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv ) raises (DeploymentException, diff --git a/offapi/com/sun/star/deployment/XPackageManager.idl b/offapi/com/sun/star/deployment/XPackageManager.idl index 65cb24a..842efdf 100644 --- a/offapi/com/sun/star/deployment/XPackageManager.idl +++ b/offapi/com/sun/star/deployment/XPackageManager.idl @@ -259,6 +259,10 @@ interface XPackageManager Added extensions will be added to the database and removed extensions will be removed from the database. + @param force + whether to reinstall all extensions even if their versions have not + changed (see forceBundled parameter of + XExtensionManager.synchronize) @param xAddedExtension new extensions which may need to be registered. @@ -268,7 +272,9 @@ interface XPackageManager If true - then at least one extension was removed or added. Otherwise nothing was changed. */ - boolean synchronize([in] com::sun::star::task::XAbortChannel xAbortChannel, + boolean synchronize( + [in] boolean force, + [in] com::sun::star::task::XAbortChannel xAbortChannel, [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv ) raises (DeploymentException, com::sun::star::ucb::CommandFailedException, _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
