repo: Fix nested tree code

This commit is contained in:
Colin Walters 2011-10-15 03:02:51 -04:00
parent 7cffd09f6d
commit 88c9851795
1 changed files with 17 additions and 13 deletions

View File

@ -999,33 +999,35 @@ add_one_directory_to_tree_and_import (HacktreeRepo *self,
const char *basename, const char *basename,
const char *abspath, const char *abspath,
ParsedTreeData *tree, ParsedTreeData *tree,
ParsedDirectoryData *dir, ParsedDirectoryData **dir, /*inout*/
GError **error) GError **error)
{ {
gboolean ret = FALSE; gboolean ret = FALSE;
GVariant *dirmeta = NULL; GVariant *dirmeta = NULL;
GChecksum *dir_meta_checksum = NULL; GChecksum *dir_meta_checksum = NULL;
ParsedDirectoryData *dir_value = *dir;
g_assert (tree != NULL); g_assert (tree != NULL);
if (!import_directory_meta (self, abspath, &dirmeta, &dir_meta_checksum, error)) if (!import_directory_meta (self, abspath, &dirmeta, &dir_meta_checksum, error))
goto out; goto out;
if (dir) if (dir_value)
{ {
g_variant_unref (dir->meta_data); g_variant_unref (dir_value->meta_data);
dir->meta_data = dirmeta; dir_value->meta_data = dirmeta;
} }
else else
{ {
dir = g_new0 (ParsedDirectoryData, 1); dir_value = g_new0 (ParsedDirectoryData, 1);
dir->tree_data = parsed_tree_data_new (); dir_value->tree_data = parsed_tree_data_new ();
dir->metadata_sha256 = g_strdup (g_checksum_get_string (dir_meta_checksum)); dir_value->metadata_sha256 = g_strdup (g_checksum_get_string (dir_meta_checksum));
dir->meta_data = dirmeta; dir_value->meta_data = dirmeta;
g_hash_table_insert (tree->directories, g_strdup (basename), dir); g_hash_table_insert (tree->directories, g_strdup (basename), dir_value);
} }
ret = TRUE; ret = TRUE;
*dir = dir_value;
out: out:
if (dir_meta_checksum) if (dir_meta_checksum)
g_checksum_free (dir_meta_checksum); g_checksum_free (dir_meta_checksum);
@ -1116,9 +1118,11 @@ add_one_path_to_tree_and_import (HacktreeRepo *self,
} }
/* Implicitly add intermediate directories */ /* Implicitly add intermediate directories */
if (!add_one_directory_to_tree_and_import (self, component, if (!add_one_directory_to_tree_and_import (self, component,
component_abspath, current_tree, dir, component_abspath, current_tree, &dir,
error)) error))
goto out; goto out;
g_assert (dir != NULL);
current_tree = dir->tree_data;
} }
else if (is_directory) else if (is_directory)
{ {
@ -1130,7 +1134,7 @@ add_one_path_to_tree_and_import (HacktreeRepo *self,
goto out; goto out;
} }
if (!add_one_directory_to_tree_and_import (self, component, if (!add_one_directory_to_tree_and_import (self, component,
abspath, current_tree, dir, abspath, current_tree, &dir,
error)) error))
goto out; goto out;
} }