lib/repo-pull: Use resolve() instead of list() in fetch_ref_contents()

This is more efficient in the non-collection case; in the collection
case, the implementation of ostree_repo_resolve_collection_ref() needs
to be rewritten to improve efficiency.

Signed-off-by: Philip Withnall <withnall@endlessm.com>

Closes: #1182
Approved by: cgwalters
This commit is contained in:
Philip Withnall 2017-09-26 15:17:47 +01:00 committed by Atomic Bot
parent 149aec1099
commit 2f9f7222a4
1 changed files with 12 additions and 14 deletions

View File

@ -839,26 +839,22 @@ fetch_ref_contents (OtPullData *pull_data,
if (pull_data->remote_repo_local != NULL && ref->collection_id != NULL) if (pull_data->remote_repo_local != NULL && ref->collection_id != NULL)
{ {
#ifdef OSTREE_ENABLE_EXPERIMENTAL_API #ifdef OSTREE_ENABLE_EXPERIMENTAL_API
g_autoptr(GHashTable) refs = NULL; /* (element-type OstreeCollectionRef utf8) */ if (!ostree_repo_resolve_collection_ref (pull_data->remote_repo_local,
if (!ostree_repo_list_collection_refs (pull_data->remote_repo_local, ref, TRUE /* ignore enoent */,
ref->collection_id, &refs, OSTREE_REPO_RESOLVE_REV_EXT_NONE,
OSTREE_REPO_LIST_REFS_EXT_NONE, &ret_contents, cancellable, error))
cancellable, error))
return FALSE; return FALSE;
ret_contents = g_strdup (g_hash_table_lookup (refs, ref));
#else /* if !OSTREE_ENABLE_EXPERIMENTAL_API */ #else /* if !OSTREE_ENABLE_EXPERIMENTAL_API */
g_assert_not_reached (); g_assert_not_reached ();
#endif /* !OSTREE_ENABLE_EXPERIMENTAL_API */ #endif /* !OSTREE_ENABLE_EXPERIMENTAL_API */
} }
else if (pull_data->remote_repo_local != NULL) else if (pull_data->remote_repo_local != NULL)
{ {
g_autoptr(GHashTable) refs = NULL; /* (element-type utf8 utf8) */ if (!ostree_repo_resolve_rev_ext (pull_data->remote_repo_local,
if (!ostree_repo_list_refs (pull_data->remote_repo_local, NULL, ref->ref_name, TRUE /* ignore enoent */,
&refs, cancellable, error)) OSTREE_REPO_RESOLVE_REV_EXT_NONE,
&ret_contents, error))
return FALSE; return FALSE;
ret_contents = g_strdup (g_hash_table_lookup (refs, ref->ref_name));
} }
else else
{ {
@ -877,9 +873,11 @@ fetch_ref_contents (OtPullData *pull_data,
} }
/* Validate and return. */ /* Validate and return. */
g_strchomp (ret_contents); if (ret_contents != NULL)
g_strchomp (ret_contents);
if (!ostree_validate_checksum_string (ret_contents, error)) if (ret_contents == NULL ||
!ostree_validate_checksum_string (ret_contents, error))
return glnx_prefix_error (error, "Fetching checksum for ref (%s, %s)", return glnx_prefix_error (error, "Fetching checksum for ref (%s, %s)",
ref->collection_id ? ref->collection_id : "(empty)", ref->collection_id ? ref->collection_id : "(empty)",
ref->ref_name); ref->ref_name);