diff options
| author | Colin Walters <walters@verbum.org> | 2013-11-21 16:54:03 -0500 |
|---|---|---|
| committer | Matthew Barnes <mbarnes@redhat.com> | 2013-11-21 17:16:16 -0500 |
| commit | 07fa75f059e6bfd452298414ca5e9f7d1a63a340 (patch) | |
| tree | de4708636daf39ddd31990a8b70fcc1826686787 /services | |
| parent | 767b378fe85b68845a6848850034cb23aa48c023 (diff) | |
| download | evolution-data-server-07fa75f059e6bfd452298414ca5e9f7d1a63a340.tar.gz | |
Bug 712829 - Silence unnecessary migration chatter on stdout
Currently we log a message every time the migrater starts, even
if we have nothing to migrate. This clutters the systemd journal.
To fix this cleanly, rework this code so that error handling is
cleaner and more unified, which preserves the migration context.
Diffstat (limited to 'services')
| -rw-r--r-- | services/evolution-source-registry/evolution-source-registry-migrate-sources.c | 227 |
1 files changed, 103 insertions, 124 deletions
diff --git a/services/evolution-source-registry/evolution-source-registry-migrate-sources.c b/services/evolution-source-registry/evolution-source-registry-migrate-sources.c index c207ee79d..d0d9d72e3 100644 --- a/services/evolution-source-registry/evolution-source-registry-migrate-sources.c +++ b/services/evolution-source-registry/evolution-source-registry-migrate-sources.c @@ -3594,49 +3594,107 @@ migrate_remove_gconf_key (const gchar *gconf_key, } } -static void -migrate_handle_error (const GError *error) +static gboolean +migrate_get_file_contents_allow_noent (const gchar *path, + gchar **out_contents, + gsize *out_length, + GError **error) { - g_return_if_fail (error != NULL); + gboolean success; + GError *local_error = NULL; + + success = g_file_get_contents ( + path, out_contents, out_length, &local_error); - if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) - g_printerr (" FAILED: %s\n", error->message); + /* Sanity check. */ + g_return_val_if_fail ( + (success && (local_error == NULL)) || + (!success && (local_error != NULL)), FALSE); + + if (g_error_matches (local_error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) { + g_clear_error (&local_error); + success = TRUE; + } + + if (local_error != NULL) + g_propagate_error (error, local_error); + + return success; } static void migrate_merged_gconf_tree (const gchar *gconf_tree_xml) { - gchar *contents; + const gchar *gconf_key; + gchar *contents = NULL; gsize length; - GError *error = NULL; + GError *local_error = NULL; + + migrate_get_file_contents_allow_noent ( + gconf_tree_xml, &contents, &length, &local_error); + + if (contents != NULL) { + migrate_parse_gconf_tree_xml ( + contents, length, &local_error); + + if (local_error == NULL) { + gconf_key = "/apps/evolution/mail/accounts"; + migrate_remove_gconf_key (gconf_key, NULL); - g_file_get_contents (gconf_tree_xml, &contents, &length, &error); + gconf_key = "/apps/evolution/addressbook/sources"; + migrate_remove_gconf_key (gconf_key, NULL); + + gconf_key = "/apps/evolution/calendar/sources"; + migrate_remove_gconf_key (gconf_key, NULL); + + gconf_key = "/apps/evolution/tasks/sources"; + migrate_remove_gconf_key (gconf_key, NULL); + + gconf_key = "/apps/evolution/memos/sources"; + migrate_remove_gconf_key (gconf_key, NULL); + } - if (error == NULL) { - migrate_parse_gconf_tree_xml (contents, length, &error); g_free (contents); } - if (error == NULL) { - const gchar *gconf_key; + if (local_error != NULL) { + g_printerr ( + "Migration of '%s' failed: %s", + gconf_tree_xml, local_error->message); + g_error_free (local_error); + } +} + +static void +migrate_and_remove_key (const gchar *filename, + const gchar *migrate_type_name, + ParseType parse_type, + const gchar *key_to_remove) +{ + gchar *contents = NULL; + gsize length; + GError *local_error = NULL; - gconf_key = "/apps/evolution/mail/accounts"; - migrate_remove_gconf_key (gconf_key, NULL); + migrate_get_file_contents_allow_noent ( + filename, &contents, &length, &local_error); - gconf_key = "/apps/evolution/addressbook/sources"; - migrate_remove_gconf_key (gconf_key, NULL); + if (contents != NULL) { + g_print ("Migrating %s from GConf...\n", migrate_type_name); - gconf_key = "/apps/evolution/calendar/sources"; - migrate_remove_gconf_key (gconf_key, NULL); + migrate_parse_gconf_xml ( + parse_type, contents, length, &local_error); - gconf_key = "/apps/evolution/tasks/sources"; - migrate_remove_gconf_key (gconf_key, NULL); + if (local_error == NULL) + migrate_remove_gconf_key (key_to_remove, filename); - gconf_key = "/apps/evolution/memos/sources"; - migrate_remove_gconf_key (gconf_key, NULL); - } else { - migrate_handle_error (error); - g_clear_error (&error); + g_free (contents); + } + + if (local_error != NULL) { + g_printerr ( + "Failed to migrate '%s': %s", + filename, local_error->message); + g_error_free (local_error); } } @@ -3644,138 +3702,59 @@ static void migrate_normal_gconf_tree (const gchar *gconf_base_dir) { gchar *base_dir; - gchar *contents; gchar *gconf_xml; - gsize length; - const gchar *gconf_key; - GError *error = NULL; base_dir = g_build_filename ( gconf_base_dir, "apps", "evolution", NULL); /* ------------------------------------------------------------------*/ - g_print ("Migrating mail accounts from GConf...\n"); - gconf_xml = g_build_filename ( base_dir, "mail", "%gconf.xml", NULL); - g_file_get_contents (gconf_xml, &contents, &length, &error); - - if (error == NULL) { - migrate_parse_gconf_xml ( - PARSE_TYPE_MAIL, - contents, length, &error); - g_free (contents); - } - - if (error == NULL) { - gconf_key = "/apps/evolution/mail/accounts"; - migrate_remove_gconf_key (gconf_key, gconf_xml); - } else { - migrate_handle_error (error); - g_clear_error (&error); - } - + migrate_and_remove_key ( + gconf_xml, "mail accounts", + PARSE_TYPE_MAIL, + "/apps/evolution/mail/accounts"); g_free (gconf_xml); /* ------------------------------------------------------------------*/ - g_print ("Migrating addressbook sources from GConf...\n"); - gconf_xml = g_build_filename ( base_dir, "addressbook", "%gconf.xml", NULL); - g_file_get_contents (gconf_xml, &contents, &length, &error); - - if (error == NULL) { - migrate_parse_gconf_xml ( - PARSE_TYPE_ADDRESSBOOK, - contents, length, &error); - g_free (contents); - } - - if (error == NULL) { - gconf_key = "/apps/evolution/addressbook/sources"; - migrate_remove_gconf_key (gconf_key, gconf_xml); - } else { - migrate_handle_error (error); - g_clear_error (&error); - } - + migrate_and_remove_key ( + gconf_xml, "addressbook sources", + PARSE_TYPE_ADDRESSBOOK, + "/apps/evolution/addressbook/sources"); g_free (gconf_xml); /* ------------------------------------------------------------------*/ - g_print ("Migrating calendar sources from GConf...\n"); - gconf_xml = g_build_filename ( base_dir, "calendar", "%gconf.xml", NULL); - g_file_get_contents (gconf_xml, &contents, &length, &error); - - if (error == NULL) { - migrate_parse_gconf_xml ( - PARSE_TYPE_CALENDAR, - contents, length, &error); - g_free (contents); - } - - if (error == NULL) { - gconf_key = "/apps/evolution/calendar/sources"; - migrate_remove_gconf_key (gconf_key, gconf_xml); - } else { - migrate_handle_error (error); - g_clear_error (&error); - } - + migrate_and_remove_key ( + gconf_xml, "calendar sources", + PARSE_TYPE_CALENDAR, + "/apps/evolution/calendar/sources"); g_free (gconf_xml); /* ------------------------------------------------------------------*/ - g_print ("Migrating task list sources from GConf...\n"); - gconf_xml = g_build_filename ( base_dir, "tasks", "%gconf.xml", NULL); - g_file_get_contents (gconf_xml, &contents, &length, &error); - - if (error == NULL) { - migrate_parse_gconf_xml ( - PARSE_TYPE_TASKS, - contents, length, &error); - g_free (contents); - } - - if (error == NULL) { - gconf_key = "/apps/evolution/tasks/sources"; - migrate_remove_gconf_key (gconf_key, gconf_xml); - } else { - migrate_handle_error (error); - g_clear_error (&error); - } - + migrate_and_remove_key ( + gconf_xml, "task list sources", + PARSE_TYPE_TASKS, + "/apps/evolution/tasks/sources"); g_free (gconf_xml); /* ------------------------------------------------------------------*/ - g_print ("Migrating memo list sources from GConf...\n"); - gconf_xml = g_build_filename ( base_dir, "memos", "%gconf.xml", NULL); - g_file_get_contents (gconf_xml, &contents, &length, &error); - - if (error == NULL) { - migrate_parse_gconf_xml ( - PARSE_TYPE_MEMOS, - contents, length, &error); - g_free (contents); - } - - if (error == NULL) { - gconf_key = "/apps/evolution/memos/sources"; - migrate_remove_gconf_key (gconf_key, gconf_xml); - } else { - migrate_handle_error (error); - g_clear_error (&error); - } - + migrate_and_remove_key ( + gconf_xml, "memo list sources", + PARSE_TYPE_MEMOS, + "/apps/evolution/memos/sources"); g_free (gconf_xml); /* ------------------------------------------------------------------*/ |
