From d30b9aed33f491a430a79b36409655d2d45afa8d Mon Sep 17 00:00:00 2001 From: Xan Lopez Date: Wed, 9 May 2012 23:34:38 +0200 Subject: ephy-profile-migrator: allow to run just one migration step Use --do-step/-d and an index. --- lib/ephy-profile-migrator.c | 60 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 53 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/ephy-profile-migrator.c b/lib/ephy-profile-migrator.c index ab933f0ec..4919896e3 100644 --- a/lib/ephy-profile-migrator.c +++ b/lib/ephy-profile-migrator.c @@ -50,6 +50,8 @@ #include #include +static int do_step_n = -1; + /* * What to do to add new migration steps: * - Bump EPHY_PROFILE_MIGRATION_VERSION in lib/ephy-profile-utils.h @@ -775,23 +777,33 @@ const EphyProfileMigrator migrators[] = { migrate_web_app_links }; -static void +static gboolean ephy_migrator () { int latest, i; + EphyProfileMigrator m; /* Always try to migrate the data from the old profile dir at the * very beginning. */ migrate_profile_gnome2_to_xdg (); + if (do_step_n != -1) { + if (do_step_n >= EPHY_PROFILE_MIGRATION_VERSION) + return FALSE; + + LOG ("Running only migrator: %d", do_step_n); + m = migrators[do_step_n]; + m(); + + return TRUE; + } + latest = ephy_profile_utils_get_migration_version (); LOG ("Running migrators up to version %d, current migration version is %d.", EPHY_PROFILE_MIGRATION_VERSION, latest); for (i = latest; i < EPHY_PROFILE_MIGRATION_VERSION; i++) { - EphyProfileMigrator m; - LOG ("Running migrator: %d of %d", i, EPHY_PROFILE_MIGRATION_VERSION); /* No need to run the password migration twice in a row. It @@ -805,15 +817,51 @@ ephy_migrator () m(); } - if (ephy_profile_utils_set_migration_version (EPHY_PROFILE_MIGRATION_VERSION) != TRUE) + if (ephy_profile_utils_set_migration_version (EPHY_PROFILE_MIGRATION_VERSION) != TRUE) { LOG ("Failed to store the current migration version"); + return FALSE; + } + + return TRUE; } +static const GOptionEntry option_entries[] = +{ + { "do-step", 'd', 0, G_OPTION_ARG_INT, &do_step_n, + N_("Executes only the n-th migration step"), NULL }, + { NULL } +}; + int main (int argc, char *argv[]) { + GOptionContext *option_context; + GOptionGroup *option_group; + GError *error = NULL; + g_type_init (); + option_group = g_option_group_new ("ephy-profile-migrator", + N_("Epiphany profile migrator"), + N_("Epiphany profile migrator options"), + NULL, NULL); + + g_option_group_set_translation_domain (option_group, GETTEXT_PACKAGE); + g_option_group_add_entries (option_group, option_entries); + + option_context = g_option_context_new (""); + g_option_context_set_main_group (option_context, option_group); + + if (!g_option_context_parse (option_context, &argc, &argv, &error)) { + g_print ("Failed to parse arguments: %s\n", error->message); + g_error_free (error); + g_option_context_free (option_context); + + return 1; + } + + g_option_context_free (option_context); + ephy_debug_init (); if (!ephy_file_helpers_init (NULL, EPHY_FILE_HELPERS_NONE, NULL)) { @@ -821,7 +869,5 @@ main (int argc, char *argv[]) return -1; } - ephy_migrator (); - - return 0; + return ephy_migrator () ? 0 : 1; } -- cgit v1.2.3