[ostree] Add ostree_repo_pull_default_console_progress_changed()



commit 880328ba03c7aa09d55e0b193150e4409d4c98d7
Author: Matthew Barnes <mbarnes redhat com>
Date:   Thu Dec 18 10:06:47 2014 -0500

    Add ostree_repo_pull_default_console_progress_changed()
    
    Replaces ot_common_pull_progress() in ostree binary, so it can be shared
    with rpm-ostree.

 Makefile-ostree.am                    |    2 -
 doc/ostree-sections.txt               |    1 +
 src/libostree/ostree-repo.c           |   74 ++++++++++++++++++++++++++++
 src/libostree/ostree-repo.h           |    3 +
 src/ostree/ot-admin-builtin-switch.c  |    3 +-
 src/ostree/ot-admin-builtin-upgrade.c |    3 +-
 src/ostree/ot-builtin-pull.c          |    3 +-
 src/ostree/ot-builtins-common.c       |   86 ---------------------------------
 src/ostree/ot-builtins-common.h       |   27 ----------
 9 files changed, 81 insertions(+), 121 deletions(-)
---
diff --git a/Makefile-ostree.am b/Makefile-ostree.am
index 86ee144..dc7e83c 100644
--- a/Makefile-ostree.am
+++ b/Makefile-ostree.am
@@ -20,8 +20,6 @@
 bin_PROGRAMS += ostree
 
 ostree_SOURCES = src/ostree/main.c \
-       src/ostree/ot-builtins-common.h \
-       src/ostree/ot-builtins-common.c \
        src/ostree/ot-builtin-admin.c \
        src/ostree/ot-builtins.h \
        src/ostree/ot-builtin-cat.c \
diff --git a/doc/ostree-sections.txt b/doc/ostree-sections.txt
index 535220d..ceb1fa3 100644
--- a/doc/ostree-sections.txt
+++ b/doc/ostree-sections.txt
@@ -279,6 +279,7 @@ OstreeRepoPullFlags
 ostree_repo_pull
 ostree_repo_pull_one_dir
 ostree_repo_pull_with_options
+ostree_repo_pull_default_console_progress_changed
 ostree_repo_sign_commit
 ostree_repo_append_gpg_signature
 ostree_repo_verify_commit
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index 9d58122..38471a6 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -2734,6 +2734,80 @@ ostree_repo_pull_with_options (OstreeRepo             *self,
 #endif
 
 /**
+ * ostree_repo_pull_default_console_progress_changed:
+ * @progress: Async progress
+ * @user_data: (allow-none): User data
+ *
+ * Convenient "changed" callback for use with
+ * ostree_async_progress_new_and_connect() when pulling from a remote
+ * repository.
+ *
+ * Depending on the state of the #OstreeAsyncProgress, either displays a
+ * custom status message, or else outstanding fetch progress in bytes/sec,
+ * or else outstanding content or metadata writes to the repository in
+ * number of objects.
+ **/
+void
+ostree_repo_pull_default_console_progress_changed (OstreeAsyncProgress *progress,
+                                                   gpointer             user_data)
+{
+  GSConsole *console = user_data;
+  GString *buf;
+  gs_free char *status = NULL;
+  guint outstanding_fetches;
+  guint outstanding_writes;
+  guint n_scanned_metadata;
+
+  if (!console)
+    return;
+
+  buf = g_string_new ("");
+
+  status = ostree_async_progress_get_status (progress);
+  outstanding_fetches = ostree_async_progress_get_uint (progress, "outstanding-fetches");
+  outstanding_writes = ostree_async_progress_get_uint (progress, "outstanding-writes");
+  n_scanned_metadata = ostree_async_progress_get_uint (progress, "scanned-metadata");
+  if (status)
+    {
+      g_string_append (buf, status);
+    }
+  else if (outstanding_fetches)
+    {
+      guint64 bytes_transferred = ostree_async_progress_get_uint64 (progress, "bytes-transferred");
+      guint fetched = ostree_async_progress_get_uint (progress, "fetched");
+      guint requested = ostree_async_progress_get_uint (progress, "requested");
+      guint64 bytes_sec = (g_get_monotonic_time () - ostree_async_progress_get_uint64 (progress, 
"start-time")) / G_USEC_PER_SEC;
+      gs_free char *formatted_bytes_transferred =
+        g_format_size_full (bytes_transferred, 0);
+      gs_free char *formatted_bytes_sec = NULL;
+
+      if (!bytes_sec) // Ignore first second
+        formatted_bytes_sec = g_strdup ("-");
+      else
+        {
+          bytes_sec = bytes_transferred / bytes_sec;
+          formatted_bytes_sec = g_format_size (bytes_sec);
+        }
+
+      g_string_append_printf (buf, "Receiving objects: %u%% (%u/%u) %s/s %s",
+                              (guint)((((double)fetched) / requested) * 100),
+                              fetched, requested, formatted_bytes_sec, formatted_bytes_transferred);
+    }
+  else if (outstanding_writes)
+    {
+      g_string_append_printf (buf, "Writing objects: %u", outstanding_writes);
+    }
+  else
+    {
+      g_string_append_printf (buf, "Scanning metadata: %u", n_scanned_metadata);
+    }
+
+  gs_console_begin_status_line (console, buf->str, NULL, NULL);
+
+  g_string_free (buf, TRUE);
+}
+
+/**
  * ostree_repo_append_gpg_signature:
  * @self: Self
  * @commit_checksum: SHA256 of given commit to sign
diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h
index b08c0f5..be04aa5 100644
--- a/src/libostree/ostree-repo.h
+++ b/src/libostree/ostree-repo.h
@@ -591,6 +591,9 @@ gboolean ostree_repo_pull_with_options (OstreeRepo             *self,
                                         GCancellable           *cancellable,
                                         GError                **error);
 
+void ostree_repo_pull_default_console_progress_changed (OstreeAsyncProgress *progress,
+                                                        gpointer             user_data);
+
 gboolean ostree_repo_sign_commit (OstreeRepo     *self,
                                   const gchar    *commit_checksum,
                                   const gchar    *key_id,
diff --git a/src/ostree/ot-admin-builtin-switch.c b/src/ostree/ot-admin-builtin-switch.c
index 2f6c334..ff9d6e9 100644
--- a/src/ostree/ot-admin-builtin-switch.c
+++ b/src/ostree/ot-admin-builtin-switch.c
@@ -23,7 +23,6 @@
 #include "ot-main.h"
 #include "ot-admin-builtins.h"
 #include "ot-admin-functions.h"
-#include "ot-builtins-common.h"
 #include "ostree.h"
 #include "otutil.h"
 #include "libgsystem.h"
@@ -129,7 +128,7 @@ ot_admin_builtin_switch (int argc, char **argv, GCancellable *cancellable, GErro
     {
       gs_console_begin_status_line (console, "", NULL, NULL);
       in_status_line = TRUE;
-      progress = ostree_async_progress_new_and_connect (ot_common_pull_progress, console);
+      progress = ostree_async_progress_new_and_connect (ostree_repo_pull_default_console_progress_changed, 
console);
     }
 
   /* Always allow older...there's not going to be a chronological
diff --git a/src/ostree/ot-admin-builtin-upgrade.c b/src/ostree/ot-admin-builtin-upgrade.c
index 1dff0a5..5ccd0b3 100644
--- a/src/ostree/ot-admin-builtin-upgrade.c
+++ b/src/ostree/ot-admin-builtin-upgrade.c
@@ -25,7 +25,6 @@
 #include "ot-main.h"
 #include "ot-admin-builtins.h"
 #include "ot-admin-functions.h"
-#include "ot-builtins-common.h"
 #include "ostree.h"
 #include "otutil.h"
 #include "libgsystem.h"
@@ -84,7 +83,7 @@ ot_admin_builtin_upgrade (int argc, char **argv, GCancellable *cancellable, GErr
     {
       gs_console_begin_status_line (console, "", NULL, NULL);
       in_status_line = TRUE;
-      progress = ostree_async_progress_new_and_connect (ot_common_pull_progress, console);
+      progress = ostree_async_progress_new_and_connect (ostree_repo_pull_default_console_progress_changed, 
console);
     }
 
   if (opt_allow_downgrade)
diff --git a/src/ostree/ot-builtin-pull.c b/src/ostree/ot-builtin-pull.c
index ed013ca..0846605 100644
--- a/src/ostree/ot-builtin-pull.c
+++ b/src/ostree/ot-builtin-pull.c
@@ -24,7 +24,6 @@
 
 #include "ot-main.h"
 #include "ot-builtins.h"
-#include "ot-builtins-common.h"
 #include "ostree.h"
 #include "otutil.h"
 
@@ -97,7 +96,7 @@ ostree_builtin_pull (int argc, char **argv, GCancellable *cancellable, GError **
   if (console)
     {
       gs_console_begin_status_line (console, "", NULL, NULL);
-      progress = ostree_async_progress_new_and_connect (ot_common_pull_progress, console);
+      progress = ostree_async_progress_new_and_connect (ostree_repo_pull_default_console_progress_changed, 
console);
     }
 
   {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]