mirror of
https://github.com/ostreedev/ostree.git
synced 2024-10-26 17:25:36 +03:00
repo: Make the optimization for reusing checksums clearer
The code here is a bit hard to understand, so make it clearer by cleaning up the flow control and adding some comments. https://bugzilla.gnome.org/show_bug.cgi?id=707727
This commit is contained in:
parent
223bccf2f6
commit
fb1e140dba
@ -1466,27 +1466,34 @@ write_directory_to_mtree_internal (OstreeRepo *self,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
gboolean ret = FALSE;
|
gboolean ret = FALSE;
|
||||||
gboolean repo_dir_was_empty = FALSE;
|
|
||||||
OstreeRepoCommitFilterResult filter_result;
|
OstreeRepoCommitFilterResult filter_result;
|
||||||
gs_unref_object OstreeRepoFile *repo_dir = NULL;
|
OstreeRepoFile *repo_dir = NULL;
|
||||||
gs_unref_object GFileEnumerator *dir_enum = NULL;
|
gs_unref_object GFileEnumerator *dir_enum = NULL;
|
||||||
gs_unref_object GFileInfo *child_info = NULL;
|
gs_unref_object GFileInfo *child_info = NULL;
|
||||||
|
|
||||||
g_debug ("Examining: %s", gs_file_get_path_cached (dir));
|
g_debug ("Examining: %s", gs_file_get_path_cached (dir));
|
||||||
|
|
||||||
/* We can only reuse checksums directly if there's no modifier */
|
/* If the directory is already in the repository, we can try to
|
||||||
|
* reuse checksums to skip checksumming. */
|
||||||
if (OSTREE_IS_REPO_FILE (dir) && modifier == NULL)
|
if (OSTREE_IS_REPO_FILE (dir) && modifier == NULL)
|
||||||
repo_dir = (OstreeRepoFile*)g_object_ref (dir);
|
repo_dir = (OstreeRepoFile *) dir;
|
||||||
|
|
||||||
if (repo_dir)
|
if (repo_dir)
|
||||||
{
|
{
|
||||||
if (!ostree_repo_file_ensure_resolved (repo_dir, error))
|
if (!ostree_repo_file_ensure_resolved (repo_dir, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
ostree_mutable_tree_set_metadata_checksum (mtree, ostree_repo_file_get_checksum (repo_dir));
|
ostree_mutable_tree_set_metadata_checksum (mtree, ostree_repo_file_tree_get_metadata_checksum (repo_dir));
|
||||||
repo_dir_was_empty =
|
|
||||||
g_hash_table_size (ostree_mutable_tree_get_files (mtree)) == 0
|
/* If the mtree was empty beforehand, the checksums on the mtree can simply
|
||||||
&& g_hash_table_size (ostree_mutable_tree_get_subdirs (mtree)) == 0;
|
* become the checksums on the tree in the repo. Super simple. */
|
||||||
|
if (g_hash_table_size (ostree_mutable_tree_get_files (mtree)) == 0 &&
|
||||||
|
g_hash_table_size (ostree_mutable_tree_get_subdirs (mtree)) == 0)
|
||||||
|
{
|
||||||
|
ostree_mutable_tree_set_contents_checksum (mtree, ostree_repo_file_tree_get_contents_checksum (repo_dir));
|
||||||
|
ret = TRUE;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
filter_result = OSTREE_REPO_COMMIT_FILTER_ALLOW;
|
filter_result = OSTREE_REPO_COMMIT_FILTER_ALLOW;
|
||||||
}
|
}
|
||||||
@ -1632,9 +1639,6 @@ write_directory_to_mtree_internal (OstreeRepo *self,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (repo_dir && repo_dir_was_empty)
|
|
||||||
ostree_mutable_tree_set_contents_checksum (mtree, ostree_repo_file_tree_get_contents_checksum (repo_dir));
|
|
||||||
|
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
out:
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user