GCancellable *cancellable,
GError **error)
{
- g_autofree char *filename = NULL;
+ g_autofree char *ret_contents = NULL;
- if (ref->collection_id == NULL || g_strcmp0 (ref->collection_id, main_collection_id) == 0)
- filename = g_build_filename ("refs", "heads", ref->ref_name, NULL);
+ if (pull_data->remote_repo_local != NULL && ref->collection_id != NULL)
+ {
+#ifdef OSTREE_ENABLE_EXPERIMENTAL_API
+ g_autoptr(GHashTable) refs = NULL; /* (element-type OstreeCollectionRef utf8) */
+ if (!ostree_repo_list_collection_refs (pull_data->remote_repo_local,
+ ref->collection_id, &refs,
+ OSTREE_REPO_LIST_REFS_EXT_NONE,
+ cancellable, error))
+ return FALSE;
+
+ ret_contents = g_strdup (g_hash_table_lookup (refs, ref));
+#else /* if !OSTREE_ENABLE_EXPERIMENTAL_API */
+ g_assert_not_reached ();
+#endif /* !OSTREE_ENABLE_EXPERIMENTAL_API */
+ }
+ else if (pull_data->remote_repo_local != NULL)
+ {
+ g_autoptr(GHashTable) refs = NULL; /* (element-type utf8 utf8) */
+ if (!ostree_repo_list_refs (pull_data->remote_repo_local, NULL,
+ &refs, cancellable, error))
+ return FALSE;
+
+ ret_contents = g_strdup (g_hash_table_lookup (refs, ref->ref_name));
+ }
else
- filename = g_build_filename ("refs", "mirrors", ref->collection_id, ref->ref_name, NULL);
+ {
+ g_autofree char *filename = NULL;
- g_autofree char *ret_contents = NULL;
- if (!fetch_mirrored_uri_contents_utf8_sync (pull_data->fetcher,
- pull_data->meta_mirrorlist,
- filename, &ret_contents,
- cancellable, error))
- return FALSE;
+ if (ref->collection_id == NULL || g_strcmp0 (ref->collection_id, main_collection_id) == 0)
+ filename = g_build_filename ("refs", "heads", ref->ref_name, NULL);
+ else
+ filename = g_build_filename ("refs", "mirrors", ref->collection_id, ref->ref_name, NULL);
+
+ if (!fetch_mirrored_uri_contents_utf8_sync (pull_data->fetcher,
+ pull_data->meta_mirrorlist,
+ filename, &ret_contents,
+ cancellable, error))
+ return FALSE;
+ }
+ /* Validate and return. */
g_strchomp (ret_contents);
if (!ostree_validate_checksum_string (ret_contents, error))
- return glnx_prefix_error (error, "Fetching %s", filename);
+ return glnx_prefix_error (error, "Fetching checksum for ref (%s, %s)",
+ ref->collection_id ? ref->collection_id : "(empty)",
+ ref->ref_name);
ot_transfer_out_value (out_contents, &ret_contents);
return TRUE;