[gnome-terminal] server: Run migration
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-terminal] server: Run migration
- Date: Sun, 9 Dec 2012 21:11:55 +0000 (UTC)
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]