diff options
author | Mark McLoughlin <mark@skynet.ie> | 2004-07-02 19:55:23 +0000 |
---|---|---|
committer | Mark McLoughlin <markmc@src.gnome.org> | 2004-07-02 19:55:23 +0000 |
commit | edd722576677d73c9fde40afa5c3b8716f57631d (patch) | |
tree | 776b24e44ffc095d78505af1725796be5c6aa1c4 | |
parent | 37a7b62cbaedf40558a7586ea8669be536ac199f (diff) | |
download | gconf-edd722576677d73c9fde40afa5c3b8716f57631d.tar.gz |
Fixup some bugs with the merge files support which was causing unset
2004-07-02 Mark McLoughlin <mark@skynet.ie>
Fixup some bugs with the merge files support which was
causing unset entries not to be completely wiped out.
* backends/markup-tree.c:
(clean_old_local_schemas): rename.
(clean_old_local_schemas_recurse): if we're saving as a subtree,
recurse down the tree.
(delete_useless_subdirs): ignore the some_subdir_needs_sync and
entries_need_save flags on the subdir - they're irrelevant if
there's no entries or subdirs. Also, check whether the subdir
is in a subtree file rather than current dir.
(delete_useless_subdirs_recurse): correctly recurse over subdirs.
(delete_useless_entries_recurse): implement recursively deleting
entries too.
(markup_dir_sync): recusively clean schemas and delete entries
if we're saving as a subtree.
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | backends/markup-tree.c | 96 |
2 files changed, 90 insertions, 25 deletions
@@ -1,5 +1,24 @@ 2004-07-02 Mark McLoughlin <mark@skynet.ie> + Fixup some bugs with the merge files support which was + causing unset entries not to be completely wiped out. + + * backends/markup-tree.c: + (clean_old_local_schemas): rename. + (clean_old_local_schemas_recurse): if we're saving as a subtree, + recurse down the tree. + (delete_useless_subdirs): ignore the some_subdir_needs_sync and + entries_need_save flags on the subdir - they're irrelevant if + there's no entries or subdirs. Also, check whether the subdir + is in a subtree file rather than current dir. + (delete_useless_subdirs_recurse): correctly recurse over subdirs. + (delete_useless_entries_recurse): implement recursively deleting + entries too. + (markup_dir_sync): recusively clean schemas and delete entries + if we're saving as a subtree. + +2004-07-02 Mark McLoughlin <mark@skynet.ie> + * configure.in: post release bump to 2.6.4. ==================== 2.6.3 ==================== diff --git a/backends/markup-tree.c b/backends/markup-tree.c index 4e2088ca..942487c3 100644 --- a/backends/markup-tree.c +++ b/backends/markup-tree.c @@ -696,11 +696,10 @@ markup_dir_set_entries_need_save (MarkupDir *dir) } } +/* Get rid of any local_schema that no longer apply */ static void -markup_entry_clean_old_local_schemas (MarkupEntry *entry) +clean_old_local_schemas (MarkupEntry *entry) { - - /* Get rid of any local_schema that no longer apply */ GSList *tmp; GSList *kept_schemas; @@ -743,6 +742,36 @@ markup_entry_clean_old_local_schemas (MarkupEntry *entry) entry->local_schemas = g_slist_reverse (kept_schemas); } +static void +clean_old_local_schemas_recurse (MarkupDir *dir, + gboolean recurse) +{ + GSList *tmp; + + if (recurse) + { + tmp = dir->subdirs; + while (tmp) + { + MarkupDir *subdir = tmp->data; + + clean_old_local_schemas_recurse (subdir, TRUE); + + tmp = tmp->next; + } + } + + tmp = dir->entries; + while (tmp != NULL) + { + MarkupEntry *entry = tmp->data; + + clean_old_local_schemas (entry); + + tmp = tmp->next; + } +} + static gboolean create_filesystem_dir (const char *name, guint dir_mode) @@ -777,21 +806,16 @@ delete_useless_subdirs (MarkupDir *dir) { MarkupDir *subdir = tmp->data; - if (subdir->entries_loaded && - subdir->subdirs_loaded && - !subdir->some_subdir_needs_sync && - !subdir->entries_need_save && - subdir->entries == NULL && - subdir->subdirs == NULL) + if (subdir->entries_loaded && subdir->entries == NULL && + subdir->subdirs_loaded && subdir->subdirs == NULL) { - - if (!dir->not_in_filesystem) + if (!subdir->not_in_filesystem) { char *fs_dirname; char *fs_filename; fs_dirname = markup_dir_build_path (subdir, FALSE, FALSE); - fs_filename = markup_dir_build_path (subdir, TRUE, dir->save_as_subtree); + fs_filename = markup_dir_build_path (subdir, TRUE, subdir->save_as_subtree); if (unlink (fs_filename) < 0) { @@ -840,7 +864,7 @@ delete_useless_subdirs_recurse (MarkupDir *dir) { MarkupDir *subdir = tmp->data; - if (delete_useless_subdirs (subdir)) + if (delete_useless_subdirs_recurse (subdir)) retval = TRUE; tmp = tmp->next; @@ -892,12 +916,34 @@ delete_useless_entries (MarkupDir *dir) } static gboolean +delete_useless_entries_recurse (MarkupDir *dir) +{ + GSList *tmp; + gboolean retval = FALSE; + + tmp = dir->subdirs; + while (tmp) + { + MarkupDir *subdir = tmp->data; + + if (delete_useless_entries_recurse (subdir)) + retval = TRUE; + + tmp = tmp->next; + } + + if (delete_useless_entries (dir)) + retval = TRUE; + + return retval; +} + +static gboolean markup_dir_sync (MarkupDir *dir) { char *fs_dirname; char *fs_filename; char *fs_subtree; - GSList *tmp; gboolean some_useless_entries; gboolean some_useless_subdirs; @@ -913,15 +959,7 @@ markup_dir_sync (MarkupDir *dir) return TRUE; /* Sanitize the entries */ - tmp = dir->entries; - while (tmp != NULL) - { - MarkupEntry *entry = tmp->data; - - markup_entry_clean_old_local_schemas (entry); - - tmp = tmp->next; - } + clean_old_local_schemas_recurse (dir, dir->save_as_subtree); fs_dirname = markup_dir_build_path (dir, FALSE, FALSE); fs_filename = markup_dir_build_path (dir, TRUE, FALSE); @@ -940,8 +978,16 @@ markup_dir_sync (MarkupDir *dir) g_return_val_if_fail (dir->entries_loaded, FALSE); - if (delete_useless_entries (dir)) - some_useless_entries = TRUE; + if (!dir->save_as_subtree) + { + if (delete_useless_entries (dir)) + some_useless_entries = TRUE; + } + else + { + if (delete_useless_entries_recurse (dir)) + some_useless_entries = TRUE; + } /* Be sure the directory exists */ if (!dir->filesystem_dir_probably_exists) |