[Libreoffice-commits] .: Branch 'libreoffice-3-5-0' - desktop/source

Michael Meeks michael at kemper.freedesktop.org
Mon Jan 30 04:44:35 PST 2012


 desktop/source/migration/migration.cxx |   62 +++++++++++++++++++++------------
 1 file changed, 40 insertions(+), 22 deletions(-)

New commits:
commit 147450b13db625359c4c34046477f753fe8b4950
Author: Petr Mladek <pmladek at suse.cz>
Date:   Fri Jan 27 18:07:03 2012 +0100

    allow to migrate the shared registrymodifications.xcu
    
    LO-3.3 and older wrote configuration into many files under
    user/registry/data. LO-3.4 spped up startup by moving these
    files into a single /user/registrymodifications.xcu.
    
    officecfg/registry/data/org/openoffice/Setup.xcu defines what registry
    nodes are migrated and what are excluded.
    
    Finally, the old migration code detected the name of the .xcu file
    by the first entry in IncludedNodes. This fix allows to search
    the data in the single registrymodifications.xcu when available.
    
    Signed-off-by: Noel Power <nopower at suse.com>
    Signed-off-by: Stephan Bergmann <sbergman at redhat.com>
    Signed-off-by: Michael Meeks <michael.meeks at suse.com>

diff --git a/desktop/source/migration/migration.cxx b/desktop/source/migration/migration.cxx
index 7520eb8..d7f9765 100644
--- a/desktop/source/migration/migration.cxx
+++ b/desktop/source/migration/migration.cxx
@@ -773,33 +773,51 @@ void MigrationImpl::copyConfig() {
             }
         }
     }
+
+    // check if the shared registrymodifications.xcu file exists
+    bool bRegistryModificationsXcuExists = false;
+    rtl::OUString regFilePath(m_aInfo.userdata);
+    regFilePath += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/user/registrymodifications.xcu"));
+    File regFile(regFilePath);
+    ::osl::FileBase::RC nError = regFile.open(osl_File_OpenFlag_Read);
+    if ( nError == ::osl::FileBase::E_None ) {
+        bRegistryModificationsXcuExists = true;
+        regFile.close();
+    }
+
     for (Components::const_iterator i(comps.begin()); i != comps.end(); ++i) {
         if (!i->second.includedPaths.empty()) {
-            rtl::OUStringBuffer buf(m_aInfo.userdata);
-            buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("/user/registry/data"));
-            sal_Int32 n = 0;
-            do {
-                rtl::OUString seg(i->first.getToken(0, '.', n));
-                rtl::OUString enc(
-                    rtl::Uri::encode(
-                        seg, rtl_UriCharClassPchar, rtl_UriEncodeStrict,
-                        RTL_TEXTENCODING_UTF8));
-                if (enc.getLength() == 0 && seg.getLength() != 0) {
-                    OSL_TRACE(
-                        ("configuration migration component %s ignored (cannot"
-                         " be encoded as file path)"),
-                        rtl::OUStringToOString(
-                            i->first, RTL_TEXTENCODING_UTF8).getStr());
-                    goto next;
-                }
-                buf.append(sal_Unicode('/'));
-                buf.append(enc);
-            } while (n >= 0);
-            buf.appendAscii(RTL_CONSTASCII_STRINGPARAM(".xcu"));
+            if (!bRegistryModificationsXcuExists) {
+                // shared registrymodifications.xcu does not exists
+                // the configuration is split in many registry files
+                // determine the file names from the first element in included paths
+                rtl::OUStringBuffer buf(m_aInfo.userdata);
+                buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("/user/registry/data"));
+                sal_Int32 n = 0;
+                do {
+                    rtl::OUString seg(i->first.getToken(0, '.', n));
+                    rtl::OUString enc(
+                        rtl::Uri::encode(
+                            seg, rtl_UriCharClassPchar, rtl_UriEncodeStrict,
+                            RTL_TEXTENCODING_UTF8));
+                    if (enc.getLength() == 0 && seg.getLength() != 0) {
+                        OSL_TRACE(
+                            ("configuration migration component %s ignored (cannot"
+                            " be encoded as file path)"),
+                            rtl::OUStringToOString(
+                                i->first, RTL_TEXTENCODING_UTF8).getStr());
+                        goto next;
+                    }
+                    buf.append(sal_Unicode('/'));
+                    buf.append(enc);
+                } while (n >= 0);
+                buf.appendAscii(RTL_CONSTASCII_STRINGPARAM(".xcu"));
+                regFilePath = buf.toString();
+            }
             configuration::Update::get(
                 comphelper::getProcessComponentContext())->
                 insertModificationXcuFile(
-                    buf.makeStringAndClear(), setToSeq(i->second.includedPaths),
+                    regFilePath, setToSeq(i->second.includedPaths),
                     setToSeq(i->second.excludedPaths));
         } else {
             OSL_TRACE(


More information about the Libreoffice-commits mailing list