diff --git a/Makefile-ostree.am b/Makefile-ostree.am index 86ee144e..dc7e83c7 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 535220de..ceb1fa39 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 9d581224..38471a6b 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -2733,6 +2733,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 diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h index b08c0f5e..be04aa5b 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 2f6c3343..ff9d6e9d 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 1dff0a53..5ccd0b34 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 ed013ca8..08466054 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); } { diff --git a/src/ostree/ot-builtins-common.c b/src/ostree/ot-builtins-common.c deleted file mode 100644 index 9595ab4a..00000000 --- a/src/ostree/ot-builtins-common.c +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2013 Colin Walters - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "config.h" - -#include "ot-main.h" -#include "ot-builtins-common.h" -#include "otutil.h" - -void -ot_common_pull_progress (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); - -} diff --git a/src/ostree/ot-builtins-common.h b/src/ostree/ot-builtins-common.h deleted file mode 100644 index deb599ad..00000000 --- a/src/ostree/ot-builtins-common.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2013 Colin Walters - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#pragma once - -#include - -void -ot_common_pull_progress (OstreeAsyncProgress *progress, - gpointer user_data);