[gnome-terminal] server: Run migration



commit 8d0746cd51b31b36f9f2913d81929b0c57511855
Author: Christian Persch <chpe gnome org>
Date:   Sun Dec 9 22:09:09 2012 +0100

    server: Run migration
    
    On startup, check if we need to migrate from gconf, and if so, run the
    migrator.

 src/Makefile.am                       |    6 +---
 src/migration.c                       |   21 +++++++++++++++
 src/org.gnome.Terminal.gschema.xml.in |    4 +++
 src/terminal-app.c                    |   46 ++++++++++++++++++++++++++++++++-
 src/terminal-schemas.h                |    3 ++
 5 files changed, 75 insertions(+), 5 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index e2d8811..6f58eb5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,7 +1,7 @@
 NULL =
 
 bin_PROGRAMS = gnome-terminal
-libexec_PROGRAMS = gnome-terminal-server
+libexec_PROGRAMS = gnome-terminal-server gnome-terminal-migration
 noinst_PROGRAMS = gnome-terminal-client
 
 if WITH_NAUTILUS_EXTENSION
@@ -76,6 +76,7 @@ gnome_terminal_server_CPPFLAGS = \
 	-DTERM_LOCALEDIR="\"$(datadir)/locale\"" \
 	-DTERM_PKGDATADIR="\"$(pkgdatadir)\"" \
 	-DTERM_HELPDIR="\"$(HELP_DIR)\"" \
+	-DTERM_LIBEXECDIR="\"$(libexecdir)\"" \
 	-DSN_API_NOT_YET_FROZEN \
 	-DGDK_MULTIHEAD_SAFE \
 	$(AM_CPPFLAGS)
@@ -241,9 +242,6 @@ libterminal_nautilus_la_LIBADD = \
 
 # Pref migrator
 
-migrationdir = $(libexecdir)/GConf/gsettings
-migration_PROGRAMS = gnome-terminal-migration
-
 gnome_terminal_migration_SOURCES = \
 	migration.c \
 	terminal-schemas.h \
diff --git a/src/migration.c b/src/migration.c
index 3dd1599..075cc38 100644
--- a/src/migration.c
+++ b/src/migration.c
@@ -559,6 +559,19 @@ migrate (GError **error)
          migrate_accels (error);
 }
 
+static void
+update_schema_version (void)
+{
+  GSettings *settings;
+
+  if (verbose)
+    g_printerr ("Updating schema version\n");
+
+  settings = g_settings_new (TERMINAL_SETTING_SCHEMA);
+  g_settings_set_uint (settings, TERMINAL_SETTING_SCHEMA_VERSION, TERMINAL_SCHEMA_VERSION);
+  g_object_unref (settings);
+}
+
 int
 main (int argc,
       char *argv[])
@@ -587,7 +600,15 @@ main (int argc,
     return EXIT_FAILURE;
   }
 
+  update_schema_version ();
+
+  if (verbose)
+    g_printerr ("Syncing gsettings...\n");
+
   g_settings_sync ();
 
+  if (verbose)
+    g_printerr ("Migration successful!\n");
+
   return EXIT_SUCCESS;
 }
diff --git a/src/org.gnome.Terminal.gschema.xml.in b/src/org.gnome.Terminal.gschema.xml.in
index 4aa2c0e..add768f 100644
--- a/src/org.gnome.Terminal.gschema.xml.in
+++ b/src/org.gnome.Terminal.gschema.xml.in
@@ -371,6 +371,10 @@
       <_summary>Whether to show the menubar in new windows</_summary>
     </key>
 
+    <key name="schema-version" type="u">
+      <default>0</default>
+    </key>
+
     <!--
     <child name="profiles:" schema="org.gnome.Terminal.Profiles" >
       <child name="profile0" schema="org.gnome.Terminal.Profile">
diff --git a/src/terminal-app.c b/src/terminal-app.c
index cd3b575..3a85c67 100644
--- a/src/terminal-app.c
+++ b/src/terminal-app.c
@@ -125,6 +125,47 @@ static void terminal_app_dconf_get_profile_list (TerminalApp *app);
 
 /* Helper functions */
 
+static void
+maybe_migrate_settings (TerminalApp *app)
+{
+  const char * const argv[] = { 
+    TERM_LIBEXECDIR "/gnome-terminal-migration",
+#ifdef GNOME_ENABLE_DEBUG
+    "--verbose", 
+#endif
+    NULL 
+  };
+  guint version;
+  int status;
+  GError *error = NULL;
+
+  version = g_settings_get_uint (terminal_app_get_global_settings (app), TERMINAL_SETTING_SCHEMA_VERSION);
+  if (version >= TERMINAL_SCHEMA_VERSION) {
+    g_printerr ("Version %d, already migrated\n", version);
+    return;
+  }
+
+  if (!g_spawn_sync (NULL /* our home directory */,
+                     (char **) argv,
+                     NULL /* envv */,
+                     0,
+                     NULL, NULL,
+                     NULL, NULL,
+                     &status,
+                     &error)) {
+    g_printerr ("Failed to migrate settings: %s\n", error->message);
+    g_error_free (error);
+    return;
+  }
+
+  if (WIFEXITED (status)) {
+    if (WEXITSTATUS (status) != 0)
+      g_printerr ("Profile migrator exited with status %d\n", WEXITSTATUS (status));
+  } else {
+    g_printerr ("Profile migrator exited abnormally.\n");
+  }
+}
+
 #if 0
 static int
 profiles_alphabetic_cmp (gconstpointer pa,
@@ -1141,6 +1182,7 @@ terminal_app_startup (GApplication *application)
     { "about",       app_menu_about_cb,         NULL, NULL, NULL }
   };
 
+  TerminalApp *app = TERMINAL_APP (application);
   GtkBuilder *builder;
   GError *error = NULL;
   gboolean shell_shows_app_menu;
@@ -1150,8 +1192,10 @@ terminal_app_startup (GApplication *application)
   /* Need to set the WM class (bug #685742) */
   gdk_set_program_class("Gnome-terminal");
 
-  /* FIXME: Is this the right place to do prefs migration from gconf->dconf? */
+  /* Check if we need to migrate from gconf to dconf */
+  maybe_migrate_settings (app);
 
+  /* Only install the app menu if it's going to be shown */
   g_object_get (gtk_settings_get_for_screen (gdk_screen_get_default ()), "gtk-shell-shows-app-menu", &shell_shows_app_menu, NULL);
   if (!shell_shows_app_menu)
     return;
diff --git a/src/terminal-schemas.h b/src/terminal-schemas.h
index ea5ddc5..a234237 100644
--- a/src/terminal-schemas.h
+++ b/src/terminal-schemas.h
@@ -24,6 +24,8 @@
 
 G_BEGIN_DECLS
 
+#define TERMINAL_SCHEMA_VERSION         (1u)
+
 #define TERMINAL_PROFILE_SCHEMA         "org.gnome.Terminal.Legacy.Profile"
 #define TERMINAL_SETTING_SCHEMA         "org.gnome.Terminal.Settings"
 
@@ -68,6 +70,7 @@ G_BEGIN_DECLS
 #define TERMINAL_SETTING_ENABLE_MENU_BAR_ACCEL_KEY      "menu-accelerator-enabled"
 #define TERMINAL_SETTING_ENABLE_MNEMONICS_KEY           "mnemonics-enabled"
 #define TERMINAL_SETTING_ENCODINGS_KEY                  "encodings"
+#define TERMINAL_SETTING_SCHEMA_VERSION                 "schema-version"
 
 #define TERMINAL_PROFILES_PATH_PREFIX   "/org/gnome/terminal/legacy/profiles:/"
 #define TERMINAL_DEFAULT_PROFILE_ID     ":profile0"



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]