diff options
author | Ryan Lortie <desrt@desrt.ca> | 2013-12-01 23:28:10 -0500 |
---|---|---|
committer | Ryan Lortie <desrt@desrt.ca> | 2013-12-01 23:38:11 -0500 |
commit | b2d93d4370a68fc65eb6892dfca040ff5569dc26 (patch) | |
tree | 4a07e4703dfcf98111e80aefb611e804305ce109 | |
parent | eef709c154cc907761756ec0d3def06bdff0e692 (diff) | |
download | dconf-b2d93d4370a68fc65eb6892dfca040ff5569dc26.tar.gz |
engine: look for system-db in /var/lib
Move the expected location for system-db to /var/lib/dconf/db instead of
/etc/dconf/db. Add a fallback case to retain compatibility with system
that have the file in the old location, but print a warning.
Update the testcases to use the new location. A testcase will follow to
ensure that the fallback code is working properly.
-rw-r--r-- | engine/dconf-engine-source-system.c | 28 | ||||
-rw-r--r-- | tests/engine.c | 20 |
2 files changed, 37 insertions, 11 deletions
diff --git a/engine/dconf-engine-source-system.c b/engine/dconf-engine-source-system.c index 30e67eb..ea6800a 100644 --- a/engine/dconf-engine-source-system.c +++ b/engine/dconf-engine-source-system.c @@ -49,11 +49,37 @@ dconf_engine_source_system_reopen (DConfEngineSource *source) GvdbTable *table; gchar *filename; - filename = g_build_filename ("/etc/dconf/db", source->name, NULL); + filename = g_build_filename ("/var/lib/dconf/db", source->name, NULL); table = gvdb_table_new (filename, FALSE, &error); if (table == NULL) { + gchar *etc_filename; + + /* This is just a fallback, so we want to keep the original error + * message in case of failure, as not to confuse anyone... + */ + etc_filename = g_build_filename ("/etc/dconf/db", source->name, NULL); + table = gvdb_table_new (etc_filename, FALSE, NULL); + + if (table != NULL) + { + if (!source->did_warn) + { + /* It wasn't in /var/lib, but opening the file in /etc worked... */ + g_warning ("binary dconf database files in /etc/dconf/db are deprecated; please run dconf-update"); + source->did_warn = TRUE; + } + + /* It worked, so clear the error. */ + g_clear_error (&error); + } + + g_free (etc_filename); + } + + if (table == NULL) + { if (!source->did_warn) { g_warning ("unable to open file '%s': %s; expect degraded performance", filename, error->message); diff --git a/tests/engine.c b/tests/engine.c index c523379..4a811ba 100644 --- a/tests/engine.c +++ b/tests/engine.c @@ -504,7 +504,7 @@ test_system_source (void) /* Create the file after the fact and make sure it opens properly */ first_table = dconf_mock_gvdb_table_new (); - dconf_mock_gvdb_install ("/etc/dconf/db/site", first_table); + dconf_mock_gvdb_install ("/var/lib/dconf/db/site", first_table); reopened = dconf_engine_source_refresh (source); g_assert (reopened); @@ -517,7 +517,7 @@ test_system_source (void) g_assert (source != NULL); first_table = dconf_mock_gvdb_table_new (); - dconf_mock_gvdb_install ("/etc/dconf/db/site", first_table); + dconf_mock_gvdb_install ("/var/lib/dconf/db/site", first_table); /* Hang on to a copy for ourselves for below... */ dconf_mock_gvdb_table_ref (first_table); @@ -533,7 +533,7 @@ test_system_source (void) /* Replace the table on "disk" but don't invalidate the old one */ next_table = dconf_mock_gvdb_table_new (); - dconf_mock_gvdb_install ("/etc/dconf/db/site", next_table); + dconf_mock_gvdb_install ("/var/lib/dconf/db/site", next_table); /* Make sure the old table remains open (ie: no IO performed) */ reopened = dconf_engine_source_refresh (source); @@ -548,7 +548,7 @@ test_system_source (void) g_assert (source->values == next_table); /* Remove the file entirely and do the same thing */ - dconf_mock_gvdb_install ("/etc/dconf/db/site", NULL); + dconf_mock_gvdb_install ("/var/lib/dconf/db/site", NULL); reopened = dconf_engine_source_refresh (source); g_assert (!reopened); @@ -625,7 +625,7 @@ setup_state (guint n_sources, state[i] = NULL; } - filename = g_strdup_printf ("/etc/dconf/db/db%d", i); + filename = g_strdup_printf ("/var/lib/dconf/db/db%d", i); } else { @@ -870,7 +870,7 @@ is_expected (const gchar *log_domain, { return g_str_equal (log_domain, "dconf") && log_level == (G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL) && - strstr (message, "unable to open file '/etc/dconf/db"); + strstr (message, "unable to open file '/var/lib/dconf/db"); } static gboolean @@ -1097,7 +1097,7 @@ test_watch_fast (void) table = dconf_mock_gvdb_table_new (); dconf_mock_gvdb_install ("/HOME/.config/dconf/user", table); table = dconf_mock_gvdb_table_new (); - dconf_mock_gvdb_install ("/etc/dconf/db/site", table); + dconf_mock_gvdb_install ("/var/lib/dconf/db/site", table); triv = g_variant_ref_sink (g_variant_new ("()")); @@ -1146,7 +1146,7 @@ test_watch_fast (void) dconf_mock_dbus_assert_no_async (); dconf_mock_gvdb_install ("/HOME/.config/dconf/user", NULL); - dconf_mock_gvdb_install ("/etc/dconf/db/site", NULL); + dconf_mock_gvdb_install ("/var/lib/dconf/db/site", NULL); dconf_engine_unref (engine); g_string_free (change_log, TRUE); change_log = NULL; @@ -1226,7 +1226,7 @@ test_change_fast (void) locks = dconf_mock_gvdb_table_new (); dconf_mock_gvdb_table_insert (locks, "/locked", g_variant_new_boolean (TRUE), NULL); dconf_mock_gvdb_table_insert (table, ".locks", NULL, locks); - dconf_mock_gvdb_install ("/etc/dconf/db/site", table); + dconf_mock_gvdb_install ("/var/lib/dconf/db/site", table); empty = dconf_changeset_new (); good_write = dconf_changeset_new_write ("/value", g_variant_new_string ("value")); @@ -1404,7 +1404,7 @@ test_change_sync (void) locks = dconf_mock_gvdb_table_new (); dconf_mock_gvdb_table_insert (locks, "/locked", g_variant_new_boolean (TRUE), NULL); dconf_mock_gvdb_table_insert (table, ".locks", NULL, locks); - dconf_mock_gvdb_install ("/etc/dconf/db/site", table); + dconf_mock_gvdb_install ("/var/lib/dconf/db/site", table); empty = dconf_changeset_new (); good_write = dconf_changeset_new_write ("/value", g_variant_new_string ("value")); |