[Libreoffice-commits] core.git: configmgr/source

Stephan Bergmann sbergman at redhat.com
Wed Oct 21 05:00:14 PDT 2015


 configmgr/source/components.cxx |   29 ++++++++++++++++++++++++-----
 configmgr/source/dconf.cxx      |   14 ++++++--------
 configmgr/source/dconf.hxx      |    2 +-
 3 files changed, 31 insertions(+), 14 deletions(-)

New commits:
commit c20f48abc6a2662fec12cb7588c69ff8e3a5d7c7
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed Oct 21 13:47:03 2015 +0200

    configmgr/dconf: Simplify Fleet Commander write-back mode
    
    * Get rid of different dconf trees for reading and writing again; the one single
      tree is /org/libreoffice/registry/.
    
    * Trigger the special write-back mode when a file
      $SYSUSERCONFIG/libreoffice/dconfwrite is present; then, ignore the default
      user:!... entry in CONFIGURATION_LAYERS (i.e., don't use the
      UserInstallation's registrymodifications.xcu) and instead write changes back
      to the dconf tree.
    
    Change-Id: I6b4d7251851da3fe7abbc9dcb080d57b278de96b

diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx
index 9034988..c1aec07 100644
--- a/configmgr/source/components.cxx
+++ b/configmgr/source/components.cxx
@@ -537,9 +537,9 @@ Components::Components(
         } else if (type == "dconf") {
             if (url == "!") {
                 modificationTarget_ = ModificationTarget::Dconf;
-                dconf::readLayer(data_, Data::NO_LAYER, false);
+                dconf::readLayer(data_, Data::NO_LAYER);
             } else if (url == "*") {
-                dconf::readLayer(data_, layer, true);
+                dconf::readLayer(data_, layer);
             } else {
                 throw css::uno::RuntimeException(
                     "CONFIGURATION_LAYERS: unknown \"dconf\" kind \"" + url
@@ -579,11 +579,30 @@ Components::Components(
                 throw css::uno::RuntimeException(
                     "CONFIGURATION_LAYERS: empty \"user\" URL");
             }
+            bool ignore = false;
+#if ENABLE_DCONF
             if (write) {
-                modificationTarget_ = ModificationTarget::File;
-                modificationFileUrl_ = url;
+                OUString token(
+                    expand("${SYSUSERCONFIG}/libreoffice/dconfwrite"));
+                osl::DirectoryItem it;
+                osl::FileBase::RC e = osl::DirectoryItem::get(token, it);
+                ignore = e == osl::FileBase::E_None;
+                SAL_INFO(
+                    "configmgr",
+                    "dconf write (<" << token << "> " << +e << "): "
+                        << int(ignore));
+                if (ignore) {
+                    modificationTarget_ = ModificationTarget::Dconf;
+                }
+            }
+#endif
+            if (!ignore) {
+                if (write) {
+                    modificationTarget_ = ModificationTarget::File;
+                    modificationFileUrl_ = url;
+                }
+                parseModificationLayer(write ? Data::NO_LAYER : layer, url);
             }
-            parseModificationLayer(write ? Data::NO_LAYER : layer, url);
             ++layer; //TODO: overflow
         } else {
             throw css::uno::RuntimeException(
diff --git a/configmgr/source/dconf.cxx b/configmgr/source/dconf.cxx
index 192eb8b..cc307e4 100644
--- a/configmgr/source/dconf.cxx
+++ b/configmgr/source/dconf.cxx
@@ -39,8 +39,7 @@ extern "C" {
 //
 // * The node hierarchy (starting at component nodes with names like
 //   "org.openoffice.Setup") maps to dconf paths underneath
-//   "/org/libreoffice/registry/system/" resp.
-//   "/org/libreoffice/registry/user/".
+//   "/org/libreoffice/registry/".
 //
 // * Component, group, set, and localized property nodes map to dconf dirs,
 //   while property and localized value nodes map to dconf keys.
@@ -217,9 +216,8 @@ private:
     DConfChangeset * changeset_;
 };
 
-OString getRoot(bool system) {
-    return "/org/libreoffice/registry/"
-        + (system ? OStringLiteral("system") : OStringLiteral("user"));
+OString getRoot() {
+    return "/org/libreoffice/registry";
 }
 
 bool decode(OUString * string, bool slash) {
@@ -1550,7 +1548,7 @@ bool addModifications(
 
 }
 
-void readLayer(Data & data, int layer, bool system) {
+void readLayer(Data & data, int layer) {
     GObjectHolder<DConfClient> client(dconf_client_new());
     if (client.get() == nullptr) {
         SAL_WARN("configmgr.dconf", "dconf_client_new failed");
@@ -1558,7 +1556,7 @@ void readLayer(Data & data, int layer, bool system) {
     }
     readDir(
         data, layer, rtl::Reference<Node>(), data.getComponents(), client,
-        getRoot(system) + "/");
+        getRoot() + "/");
 }
 
 void writeModifications(Components & components, Data & data) {
@@ -1573,7 +1571,7 @@ void writeModifications(Components & components, Data & data) {
     }
     for (auto const & i: data.modifications.getRoot().children) {
         if (!addModifications(
-                components, cs, getRoot(false), rtl::Reference<Node>(), i.first,
+                components, cs, getRoot(), rtl::Reference<Node>(), i.first,
                 data.getComponents().findNode(Data::NO_LAYER, i.first),
                 i.second))
         {
diff --git a/configmgr/source/dconf.hxx b/configmgr/source/dconf.hxx
index 1086c77..f7f5970 100644
--- a/configmgr/source/dconf.hxx
+++ b/configmgr/source/dconf.hxx
@@ -19,7 +19,7 @@ namespace configmgr {
 
 namespace configmgr { namespace dconf {
 
-void readLayer(Data & data, int layer, bool system);
+void readLayer(Data & data, int layer);
 
 void writeModifications(Components & components, Data & data);
 


More information about the Libreoffice-commits mailing list