summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2011-08-10 11:21:43 +0200
committerRyan Lortie <desrt@desrt.ca>2011-08-15 11:36:15 -0400
commit0a55ec748575c5c071e3b4ebff54dbc045d66124 (patch)
tree59e1b401e4428421cc3e9ba588bc209860b8f3c0
parent07b425f2cd9d52b64207166aa8d02ab2408ed84e (diff)
downloadgconf-0a55ec748575c5c071e3b4ebff54dbc045d66124.tar.gz
GSettings migration: only write database on actual changes
The database was being rewritten in all cases of timestamp changes on the migration scripts directory -- possibly even if a script had been removed since last run (or other reasons). Only rewrite the file if a new migration has actually been run.
-rw-r--r--gsettings/gsettings-data-convert.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gsettings/gsettings-data-convert.c b/gsettings/gsettings-data-convert.c
index b0c8b9c8..eac6fd40 100644
--- a/gsettings/gsettings-data-convert.c
+++ b/gsettings/gsettings-data-convert.c
@@ -420,6 +420,7 @@ main (int argc, char *argv[])
struct stat statbuf;
GError *error;
gchar **converted;
+ gboolean changed;
GDir *dir;
const gchar *name;
gchar *filename;
@@ -448,6 +449,7 @@ main (int argc, char *argv[])
}
load_state (&stored_mtime, &converted);
+ changed = FALSE;
/* If the directory is not newer, exit */
if (stat (convert_dir, &statbuf) == 0)
@@ -497,6 +499,7 @@ main (int argc, char *argv[])
converted = g_realloc (converted, (len + 2) * sizeof (gchar *));
converted[len] = g_strdup (name);
converted[len + 1] = NULL;
+ changed = TRUE;
}
g_free (filename);
@@ -504,7 +507,7 @@ main (int argc, char *argv[])
next: ;
}
- if (!dry_run)
+ if (changed && !dry_run)
{
if (!save_state (converted))
return 1;