diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2012-08-09 07:06:37 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2012-08-10 20:40:25 +0800 |
commit | 6f7c3dd230edb56ccaf957a58e531585ff03f38d (patch) | |
tree | fad22050271c6b690f6371f4aa7a763f1f4f8204 | |
parent | 05c0d37dcf60f11b74fa7aad3c0d1af7d7f93aa5 (diff) | |
download | gsoc2013-evolution-6f7c3dd230edb56ccaf957a58e531585ff03f38d.tar.gz gsoc2013-evolution-6f7c3dd230edb56ccaf957a58e531585ff03f38d.tar.zst gsoc2013-evolution-6f7c3dd230edb56ccaf957a58e531585ff03f38d.zip |
backup-restore: Add version info to evolution.dirs file.
Store the Evolution version used to create the backup file in the
evolution.dir file which is part of the tarball.
After restoring the backup file we need to reset the last-used-version
key in GSettings to the version listed in the evolution.dir file so the
proper migration routines run when Evolution is restarted.
-rw-r--r-- | modules/backup-restore/evolution-backup-tool.c | 62 |
1 files changed, 54 insertions, 8 deletions
diff --git a/modules/backup-restore/evolution-backup-tool.c b/modules/backup-restore/evolution-backup-tool.c index d09efa3628..974dd293c3 100644 --- a/modules/backup-restore/evolution-backup-tool.c +++ b/modules/backup-restore/evolution-backup-tool.c @@ -62,6 +62,8 @@ #define DCONF_PATH_EDS "/org/gnome/evolution-data-server/" #define DCONF_PATH_EVO "/org/gnome/evolution/" +#define KEY_FILE_GROUP "Evolution Backup" + static gboolean backup_op = FALSE; static gchar *bk_file = NULL; static gboolean restore_op = FALSE; @@ -280,9 +282,10 @@ write_dir_file (void) g_return_if_fail (filename != NULL); content = replace_variables ( - "[dirs]\n" - "data=$STRIPDATADIR\n" - "config=$STRIPCONFIGDIR\n"); + "[" KEY_FILE_GROUP "]\n" + "Version=" VERSION "\n" + "UserDataDir=$STRIPDATADIR\n" + "UserConfigDir=$STRIPCONFIGDIR\n"); g_return_if_fail (content != NULL); g_file_set_contents (filename->str, content->str, content->len, &error); @@ -365,7 +368,8 @@ backup (const gchar *filename, } static void -extract_backup_dirs (const gchar *filename, +extract_backup_data (const gchar *filename, + gchar **restored_version, gchar **data_dir, gchar **config_dir) { @@ -382,7 +386,31 @@ extract_backup_dirs (const gchar *filename, if (error) { g_warning ("Failed to read '%s': %s", filename, error->message); g_error_free (error); - } else { + + /* This is the current format as of Evolution 3.6. */ + } else if (g_key_file_has_group (key_file, KEY_FILE_GROUP)) { + gchar *tmp; + + tmp = g_key_file_get_value ( + key_file, KEY_FILE_GROUP, "Version", NULL); + if (tmp != NULL) + *restored_version = g_strstrip (g_strdup (tmp)); + g_free (tmp); + + tmp = g_key_file_get_value ( + key_file, KEY_FILE_GROUP, "UserDataDir", NULL); + if (tmp != NULL) + *data_dir = g_shell_quote (tmp); + g_free (tmp); + + tmp = g_key_file_get_value ( + key_file, KEY_FILE_GROUP, "UserConfigDir", NULL); + if (tmp != NULL) + *config_dir = g_shell_quote (tmp); + g_free (tmp); + + /* This is the legacy format with no version information. */ + } else if (g_key_file_has_group (key_file, "dirs")) { gchar *tmp; tmp = g_key_file_get_value (key_file, "dirs", "data", NULL); @@ -456,7 +484,9 @@ restore (const gchar *filename, if (is_new_format) { GString *dir_fn; - gchar *data_dir = NULL, *config_dir = NULL; + gchar *data_dir = NULL; + gchar *config_dir = NULL; + gchar *restored_version = NULL; command = g_strdup_printf ( "cd $TMP && tar xzf %s " @@ -470,8 +500,12 @@ restore (const gchar *filename, goto end; } - /* data_dir and config_dir are quoted inside extract_backup_dirs */ - extract_backup_dirs (dir_fn->str, &data_dir, &config_dir); + /* data_dir and config_dir are quoted inside extract_backup_data */ + extract_backup_data ( + dir_fn->str, + &restored_version, + &data_dir, + &config_dir); g_unlink (dir_fn->str); g_string_free (dir_fn, TRUE); @@ -505,8 +539,20 @@ restore (const gchar *filename, run_cmd (command); g_free (command); + /* If the back file had version information, set the last + * used version in GSettings before restarting Evolution. */ + if (restored_version != NULL && *restored_version != '\0') { + GSettings *settings; + + settings = g_settings_new ("org.gnome.evolution"); + g_settings_set_string ( + settings, "version", restored_version); + g_object_unref (settings); + } + g_free (data_dir); g_free (config_dir); + g_free (restored_version); } else { run_cmd ("mv $HOME/.evolution $HOME/.evolution_old"); |