return TRUE;
}
+/* Look at a commit object, and determine whether there are
+ * more things to fetch.
+ */
static gboolean
scan_commit_object (OtPullData *pull_data,
const char *checksum,
GCancellable *cancellable,
GError **error)
{
- gboolean ret = FALSE;
- /* If we found a legacy transaction flag, assume we have to scan.
- * We always do a scan of dirtree objects; see
- * https://github.com/ostreedev/ostree/issues/543
- */
- OstreeRepoCommitState commitstate;
- g_autoptr(GVariant) commit = NULL;
- g_autoptr(GVariant) parent_csum = NULL;
- const guchar *parent_csum_bytes = NULL;
gpointer depthp;
gint depth;
- gboolean is_partial;
-
if (g_hash_table_lookup_extended (pull_data->commit_to_depth, checksum,
NULL, &depthp))
{
cancellable,
error);
if (!process_verify_result (pull_data, checksum, result, error))
- goto out;
+ return FALSE;
}
+ /* If we found a legacy transaction flag, assume we have to scan.
+ * We always do a scan of dirtree objects; see
+ * https://github.com/ostreedev/ostree/issues/543
+ */
+ OstreeRepoCommitState commitstate;
+ g_autoptr(GVariant) commit = NULL;
if (!ostree_repo_load_commit (pull_data->repo, checksum, &commit, &commitstate, error))
- goto out;
+ return FALSE;
/* If ref is non-NULL then the commit we fetched was requested through the
* branch, otherwise we requested a commit checksum without specifying a branch.
*/
if (!verify_bindings (pull_data, commit, ref, error))
- {
- g_prefix_error (error, "Commit %s: ", checksum);
- goto out;
- }
+ return glnx_prefix_error (error, "Commit %s", checksum);
if (pull_data->timestamp_check)
{
{
if (!ostree_repo_load_commit (pull_data->repo, orig_rev,
&orig_commit, NULL, error))
- {
- g_prefix_error (error, "Reading %s for timestamp-check: ", ref->ref_name);
- goto out;
- }
+ return glnx_prefix_error (error, "Reading %s for timestamp-check", ref->ref_name);
guint64 orig_ts = ostree_commit_get_timestamp (orig_commit);
guint64 new_ts = ostree_commit_get_timestamp (commit);
if (!_ostree_compare_timestamps (orig_rev, orig_ts, checksum, new_ts, error))
- goto out;
+ return FALSE;
}
}
/* If we found a legacy transaction flag, assume all commits are partial */
- is_partial = commitstate_is_partial (pull_data, commitstate);
+ gboolean is_partial = commitstate_is_partial (pull_data, commitstate);
/* PARSE OSTREE_SERIALIZED_COMMIT_VARIANT */
+ g_autoptr(GVariant) parent_csum = NULL;
+ const guchar *parent_csum_bytes = NULL;
g_variant_get_child (commit, 1, "@ay", &parent_csum);
if (g_variant_n_children (parent_csum) > 0)
{
parent_csum_bytes = ostree_checksum_bytes_peek_validate (parent_csum, error);
if (parent_csum_bytes == NULL)
- goto out;
+ return FALSE;
}
if (parent_csum_bytes != NULL && pull_data->maxdepth == -1)
int parent_depth;
ostree_checksum_inplace_from_bytes (parent_csum_bytes, parent_checksum);
-
+
if (g_hash_table_lookup_extended (pull_data->commit_to_depth, parent_checksum,
NULL, &parent_depthp))
{
tree_contents_csum_bytes = ostree_checksum_bytes_peek_validate (tree_contents_csum, error);
if (tree_contents_csum_bytes == NULL)
- goto out;
+ return FALSE;
tree_meta_csum_bytes = ostree_checksum_bytes_peek_validate (tree_meta_csum, error);
if (tree_meta_csum_bytes == NULL)
- goto out;
+ return FALSE;
queue_scan_one_metadata_object_c (pull_data, tree_contents_csum_bytes,
OSTREE_OBJECT_TYPE_DIR_TREE, "/", recursion_depth + 1, NULL);
OSTREE_OBJECT_TYPE_DIR_META, NULL, recursion_depth + 1, NULL);
}
- ret = TRUE;
- out:
- return ret;
+ return TRUE;
}
static void
validate_variant_is_csum (GVariant *csum,
GError **error)
{
- gboolean ret = FALSE;
-
if (!g_variant_is_of_type (csum, G_VARIANT_TYPE ("ay")))
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Invalid checksum variant of type '%s', expected 'ay'",
- g_variant_get_type_string (csum));
- goto out;
- }
+ return glnx_throw (error, "Invalid checksum variant of type '%s', expected 'ay'",
+ g_variant_get_type_string (csum));
- if (!ostree_validate_structureof_csum_v (csum, error))
- goto out;
-
- ret = TRUE;
- out:
- return ret;
+ return ostree_validate_structureof_csum_v (csum, error);
}
/* Load the summary from the cache if the provided .sig file is the same as the
GCancellable *cancellable,
GError **error)
{
- gboolean ret = FALSE;
- const char *summary_cache_sig_file = glnx_strjoina (_OSTREE_SUMMARY_CACHE_DIR, "/", remote, ".sig");
-
- glnx_fd_close int prev_fd = -1;
- g_autoptr(GBytes) old_sig_contents = NULL;
-
if (self->cache_dir_fd == -1)
return TRUE;
+ const char *summary_cache_sig_file = glnx_strjoina (_OSTREE_SUMMARY_CACHE_DIR, "/", remote, ".sig");
+ glnx_fd_close int prev_fd = -1;
if (!ot_openat_ignore_enoent (self->cache_dir_fd, summary_cache_sig_file, &prev_fd, error))
- goto out;
-
+ return FALSE;
if (prev_fd < 0)
- {
- ret = TRUE;
- goto out;
- }
+ return TRUE; /* Note early return */
- old_sig_contents = glnx_fd_readall_bytes (prev_fd, cancellable, error);
+ g_autoptr(GBytes) old_sig_contents = glnx_fd_readall_bytes (prev_fd, cancellable, error);
if (!old_sig_contents)
- goto out;
+ return FALSE;
if (g_bytes_compare (old_sig_contents, summary_sig) == 0)
{
if (errno == ENOENT)
{
(void) unlinkat (self->cache_dir_fd, summary_cache_sig_file, 0);
- ret = TRUE;
- goto out;
+ return TRUE; /* Note early return */
}
- glnx_set_error_from_errno (error);
- goto out;
+ return glnx_throw_errno_prefix (error, "openat(%s)", summary_cache_file);
}
summary_data = glnx_fd_readall_bytes (summary_fd, cancellable, error);
if (!summary_data)
- goto out;
+ return FALSE;
*summary = summary_data;
}
- ret = TRUE;
-
- out:
- return ret;
+ return TRUE;
}
+/* Replace the current summary+signature with new versions */
static gboolean
_ostree_repo_cache_summary (OstreeRepo *self,
const char *remote,
GCancellable *cancellable,
GError **error)
{
- gboolean ret = FALSE;
- const char *summary_cache_file = glnx_strjoina (_OSTREE_SUMMARY_CACHE_DIR, "/", remote);
- const char *summary_cache_sig_file = glnx_strjoina (_OSTREE_SUMMARY_CACHE_DIR, "/", remote, ".sig");
-
if (self->cache_dir_fd == -1)
return TRUE;
if (!glnx_shutil_mkdir_p_at (self->cache_dir_fd, _OSTREE_SUMMARY_CACHE_DIR, 0775, cancellable, error))
- goto out;
+ return FALSE;
+ const char *summary_cache_file = glnx_strjoina (_OSTREE_SUMMARY_CACHE_DIR, "/", remote);
if (!glnx_file_replace_contents_at (self->cache_dir_fd,
summary_cache_file,
g_bytes_get_data (summary, NULL),
g_bytes_get_size (summary),
self->disable_fsync ? GLNX_FILE_REPLACE_NODATASYNC : GLNX_FILE_REPLACE_DATASYNC_NEW,
cancellable, error))
- goto out;
+ return FALSE;
+ const char *summary_cache_sig_file = glnx_strjoina (_OSTREE_SUMMARY_CACHE_DIR, "/", remote, ".sig");
if (!glnx_file_replace_contents_at (self->cache_dir_fd,
summary_cache_sig_file,
g_bytes_get_data (summary_sig, NULL),
g_bytes_get_size (summary_sig),
self->disable_fsync ? GLNX_FILE_REPLACE_NODATASYNC : GLNX_FILE_REPLACE_DATASYNC_NEW,
cancellable, error))
- goto out;
-
- ret = TRUE;
- out:
- return ret;
+ return FALSE;
+ return TRUE;
}
static OstreeFetcher *