diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ChangeLog | 19 | ||||
-rw-r--r-- | shell/e-config-upgrade.c | 104 | ||||
-rw-r--r-- | shell/e-config-upgrade.h | 4 | ||||
-rw-r--r-- | shell/e-shell.c | 14 | ||||
-rw-r--r-- | shell/e-shell.h | 4 | ||||
-rw-r--r-- | shell/main.c | 22 |
6 files changed, 95 insertions, 72 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog index e2b5a04071..b4a964efe5 100644 --- a/shell/ChangeLog +++ b/shell/ChangeLog @@ -1,3 +1,22 @@ +2004-01-13 JP Rosevear <jpr@ximian.com> + + * main.c (attempt_upgrade): detect the version more completely + with the new util routine + (main): don't upgrade the config db here + + * e-shell.h: update proto + + * e-shell.c (e_shell_attempt_upgrade): take the current version as + numerical params + + * e-config-upgrade.h: update prototypes + + * e-config-upgrade.c (e_config_upgrade): remove version detection + and saving code + (e_upgrade_detect_version): routine to do the version detection + + * e-config-upgrade.c: drop my-evolution upgrade code + 2004-01-12 JP Rosevear <jpr@ximian.com> * Makefile.am: use our libs diff --git a/shell/e-config-upgrade.c b/shell/e-config-upgrade.c index cb5a08e89f..34331987ab 100644 --- a/shell/e-config-upgrade.c +++ b/shell/e-config-upgrade.c @@ -1777,48 +1777,12 @@ static int load_accounts_1_0(xmlDocPtr doc) * Return value: -1 on an error. **/ int -e_config_upgrade(const char *edir) +e_config_upgrade(int major, int minor, int revision) { - xmlNodePtr source; xmlDocPtr config_doc = NULL; int i; - char *val, *tmp; GConfClient *gconf; int res = -1; - struct stat st; - - evolution_dir = edir; - - /* 1. determine existing version */ - gconf = gconf_client_get_default(); - val = gconf_client_get_string(gconf, "/apps/evolution/version", NULL); - if (val) { - sscanf(val, "%u.%u.%u", &major, &minor, &revision); - g_free(val); - } else { - char *filename = g_build_filename(evolution_dir, "config.xmldb", NULL); - - if (lstat(filename, &st) == 0 - && S_ISREG(st.st_mode)) - config_doc = xmlParseFile (filename); - g_free(filename); - - tmp = NULL; - if ( config_doc - && (source = lookup_bconf_path(config_doc, "/Shell")) - && (tmp = lookup_bconf_value(source, "upgrade_from_1_0_to_1_2_performed")) - && tmp[0] == '1' ) { - major = 1; - minor = 2; - revision = 0; - } else { - major = 1; - minor = 0; - revision = 0; - } - if (tmp) - xmlFree(tmp); - } /* 2. Now perform any upgrade duties */ @@ -1872,18 +1836,6 @@ e_config_upgrade(const char *edir) } } - /* 3. we're done, update our version info if its changed */ - if (major < CONF_MAJOR - || minor < CONF_MINOR - || revision < CONF_REVISION) { - val = g_strdup_printf("%u.%u.%u", CONF_MAJOR, CONF_MINOR, CONF_REVISION); - gconf_client_set_string(gconf, "/apps/evolution/version", val, NULL); - /* TODO: should this be translatable? */ - g_message("Evolution configuration upgraded to version: %s", val); - g_free(val); - gconf_client_suggest_sync(gconf, NULL); - } - res = 0; error: @@ -1893,3 +1845,57 @@ error: return res; } +gboolean +e_upgrade_detect_version (int *major, int *minor, int *revision) +{ + GConfClient *gconf; + xmlNodePtr source; + xmlDocPtr config_doc = NULL; + char *val; + struct stat st; + char *evolution_dir = g_build_filename(g_get_home_dir (), "evolution", NULL); + char *filename = g_build_filename(evolution_dir, "config.xmldb", NULL); + + + gconf = gconf_client_get_default(); + val = gconf_client_get_string(gconf, "/apps/evolution/version", NULL); + g_object_unref (gconf); + + if (val) { + /* Since 1.4.0 We've been keeping the version key in gconf */ + sscanf(val, "%u.%u.%u", major, minor, revision); + g_free(val); + } else if (lstat(filename, &st) != 0 && S_ISDIR(st.st_mode)) { + /* If ~/evolution does not exit or is not a directory it must be a new installation */ + *major = 0; + *minor = 0; + *revision = 0; + } else { + char *filename = g_build_filename(g_get_home_dir (), "evolution", "config.xmldb", NULL); + char *tmp; + + if (lstat(filename, &st) == 0 + && S_ISREG(st.st_mode)) + config_doc = xmlParseFile (filename); + g_free(filename); + + tmp = NULL; + if ( config_doc + && (source = lookup_bconf_path(config_doc, "/Shell")) + && (tmp = lookup_bconf_value(source, "upgrade_from_1_0_to_1_2_performed")) + && tmp[0] == '1' ) { + *major = 1; + *minor = 2; + *revision = 0; + } else { + *major = 1; + *minor = 0; + *revision = 0; + } + if (tmp) + xmlFree(tmp); + } + + return TRUE; +} + diff --git a/shell/e-config-upgrade.h b/shell/e-config-upgrade.h index c012e30526..f52801ce07 100644 --- a/shell/e-config-upgrade.h +++ b/shell/e-config-upgrade.h @@ -23,6 +23,8 @@ #ifndef _E_CONFIG_UPGRADE_H #define _E_CONFIG_UPGRADE_H -int e_config_upgrade(const char *edir); +gboolean e_upgrade_detect_version (int *major, int *minor, int *revision); + +int e_config_upgrade(int major, int minor, int revision); #endif /* _E_CONFIG_UPGRADE_H */ diff --git a/shell/e-shell.c b/shell/e-shell.c index 22bfb1a9b3..fdc3bc024e 100644 --- a/shell/e-shell.c +++ b/shell/e-shell.c @@ -580,18 +580,14 @@ e_shell_new (EShellStartupLineMode startup_line_mode, * upgrade from @from_version is unsupported). **/ gboolean -e_shell_attempt_upgrade (EShell *shell, - const char *from_version) +e_shell_attempt_upgrade (EShell *shell, int major, int minor, int revision) { GSList *component_infos, *p; - int major, minor, revision; int current_major, current_minor, current_revision; gboolean success; g_return_val_if_fail (E_IS_SHELL (shell), FALSE); - g_return_val_if_fail (from_version != NULL, FALSE); - sscanf (from_version, "%u.%u.%u", &major, &minor, &revision); sscanf (VERSION, "%u.%u.%u", ¤t_major, ¤t_minor, ¤t_revision); if (! (current_major > major @@ -623,16 +619,16 @@ e_shell_attempt_upgrade (EShell *shell, } exception_text = bonobo_exception_get_text (&ev); - g_warning ("Upgrade of component \"%s\" from version %s failed with exception %s", - info->alias, from_version, exception_text); + g_warning ("Upgrade of component \"%s\" from version %d.%d.%d failed with exception %s", + info->alias, major, minor, revision, exception_text); g_free (exception_text); CORBA_exception_free (&ev); success = FALSE; } else { CORBA_exception_free (&ev); if (! component_upgraded) { - g_warning ("Component \"%s\" could not upgrade configuration from version \"%s\"", - info->alias, from_version); + g_warning ("Component \"%s\" could not upgrade configuration from version %d.%d.%d", + info->alias, major, minor, revision); success = FALSE; } } diff --git a/shell/e-shell.h b/shell/e-shell.h index b8922de39d..2dcac9fc6d 100644 --- a/shell/e-shell.h +++ b/shell/e-shell.h @@ -101,7 +101,9 @@ EShell *e_shell_new (EShellStartupLineMode startup_line_m EShellConstructResult *construct_result_return); gboolean e_shell_attempt_upgrade (EShell *shell, - const char *from_version); + int major, + int minor, + int revision); EShellWindow *e_shell_create_window (EShell *shell, const char *component_id, diff --git a/shell/main.c b/shell/main.c index 6f56f6b4e9..5d7cebf635 100644 --- a/shell/main.c +++ b/shell/main.c @@ -338,21 +338,21 @@ new_window_created_callback (EShell *shell, #endif /* DEVELOPMENT_WARNING */ - static void attempt_upgrade (EShell *shell) { - GConfClient *gconf_client = gconf_client_get_default (); - char *previous_version = gconf_client_get_string (gconf_client, "/apps/evolution/version", NULL); + GConfClient *gconf_client; + int major = 0, minor = 0, revision = 0; + + if (!e_upgrade_detect_version (&major, &minor, &revision) + || !e_shell_attempt_upgrade (shell, major, minor, revision)) + e_notice (NULL, GTK_MESSAGE_ERROR, + _("Warning: Evolution could not upgrade all your data from version %d.%d.%d.\n" + "The data hasn't been deleted, but it will not be seen by this version of Evolution.\n"), + major, minor, revision); - if (previous_version != NULL) { - if (! e_shell_attempt_upgrade (shell, previous_version)) - e_notice (NULL, GTK_MESSAGE_ERROR, - _("Warning: Evolution could not upgrade all your data from version %s.\n" - "The data hasn't been deleted, but it will not be seen by this version of Evolution.\n"), - previous_version); - } + gconf_client = gconf_client_get_default (); gconf_client_set_string (gconf_client, "/apps/evolution/version", VERSION, NULL); g_object_unref (gconf_client); } @@ -612,8 +612,6 @@ main (int argc, char **argv) uri_list = g_slist_reverse (uri_list); g_value_unset (&popt_context_value); - e_config_upgrade (evolution_directory); - g_idle_add (idle_cb, uri_list); bonobo_main (); |