lib/pull: A bit of new style porting
authorColin Walters <walters@verbum.org>
Thu, 7 Sep 2017 01:44:09 +0000 (21:44 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Thu, 7 Sep 2017 17:18:50 +0000 (17:18 +0000)
A lof of the functions here are async and have nontrivial exits, but these ones
are all sync were straightforward ports.

Not prep for anything, just chipping away at porting.

Closes: #1146
Approved by: jlebon

src/libostree/ostree-repo-pull.c

index 4a2a0fcd943bd1ecb324b43aabad78caf68eb6af..92aeb5bcc57bd96f114c9f9ce249eeec5484584d 100644 (file)
@@ -1588,6 +1588,9 @@ verify_bindings (OtPullData                 *pull_data,
   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,
@@ -1596,19 +1599,8 @@ scan_commit_object (OtPullData                 *pull_data,
                     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))
     {
@@ -1631,20 +1623,23 @@ scan_commit_object (OtPullData                 *pull_data,
                                                      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)
     {
@@ -1661,28 +1656,27 @@ scan_commit_object (OtPullData                 *pull_data,
         {
           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)
@@ -1698,7 +1692,7 @@ scan_commit_object (OtPullData                 *pull_data,
       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))
         {
@@ -1737,11 +1731,11 @@ scan_commit_object (OtPullData                 *pull_data,
 
       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);
@@ -1750,9 +1744,7 @@ scan_commit_object (OtPullData                 *pull_data,
                                         OSTREE_OBJECT_TYPE_DIR_META, NULL, recursion_depth + 1, NULL);
     }
 
-  ret = TRUE;
- out:
-  return ret;
+  return TRUE;
 }
 
 static void
@@ -2532,22 +2524,11 @@ static gboolean
 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
@@ -2560,27 +2541,19 @@ _ostree_repo_load_cache_summary_if_same_sig (OstreeRepo        *self,
                                              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)
     {
@@ -2595,25 +2568,21 @@ _ostree_repo_load_cache_summary_if_same_sig (OstreeRepo        *self,
           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,
@@ -2622,36 +2591,31 @@ _ostree_repo_cache_summary (OstreeRepo        *self,
                             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 *