diff options
author | Martin Liska <mliska@suse.cz> | 2020-12-16 18:18:40 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2020-12-16 18:18:40 +0100 |
commit | d6f26c9d2852286c0ff8053a1b6e688ae1ba0793 (patch) | |
tree | 95b3a9eac4e975e7c006dbd78af7bb69bbb30df1 | |
parent | 2f2287318b33ddf855a692fcc191f6b25caf4644 (diff) | |
download | gdb-d6f26c9d2852286c0ff8053a1b6e688ae1ba0793.zip gdb-d6f26c9d2852286c0ff8053a1b6e688ae1ba0793.tar.gz gdb-d6f26c9d2852286c0ff8053a1b6e688ae1ba0793.tar.bz2 |
[gdb] Print progress for debuginfod
Prints progress like:
Downloading 4.89 MB separate debug info for /usr/lib64/libgcrypt.so.20.
Downloading 1.10 MB separate debug info for /usr/lib64/liblzma.so.5.
Downloading 1.31 MB separate debug info for /usr/lib64/liblz4.so.1.
Downloading 0.96 MB separate debug info for /usr/lib64/libsmime3.so.
[### ]
Tested on x86_64-linux.
ChangeLog:
2020-12-16 Martin Liska <mliska@suse.cz>
Tom de Vries <tdevries@suse.de>
* gdb/debuginfod-support.c (struct user_data): Remove has_printed
field. Add meter field.
(progressfn): Print progress using meter.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | gdb/cli-out.c | 4 | ||||
-rw-r--r-- | gdb/debuginfod-support.c | 27 |
3 files changed, 28 insertions, 10 deletions
@@ -1,3 +1,10 @@ +2020-12-16 Martin Liska <mliska@suse.cz> + Tom de Vries <tdevries@suse.de> + + * gdb/debuginfod-support.c (struct user_data): Remove has_printed + field. Add meter field. + (progressfn): Print progress using meter. + 2020-12-02 Enze Li <lienze2010@hotmail.com> * .gitignore: Add gnu global outputs. diff --git a/gdb/cli-out.c b/gdb/cli-out.c index 7722ecc..b342be4 100644 --- a/gdb/cli-out.c +++ b/gdb/cli-out.c @@ -272,7 +272,7 @@ cli_ui_out::do_redirect (ui_file *outstream) - printed for tty, SHOULD_PRINT == false: <> - printed for not-a-tty: - <NAME...done. + <NAME... > */ @@ -348,7 +348,7 @@ cli_ui_out::do_progress_end () if (!stream->isatty ()) { - fprintf_unfiltered (stream, "done.\n"); + fprintf_unfiltered (stream, "\n"); gdb_flush (stream); } else if (meter.printing == PROGRESS) diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c index e21b2f4..e9b2dcd 100644 --- a/gdb/debuginfod-support.c +++ b/gdb/debuginfod-support.c @@ -21,6 +21,7 @@ #include "cli/cli-style.h" #include "gdbsupport/scoped_fd.h" #include "debuginfod-support.h" +#include "gdbsupport/gdb_optional.h" #ifndef HAVE_LIBDEBUGINFOD scoped_fd @@ -46,12 +47,12 @@ debuginfod_debuginfo_query (const unsigned char *build_id, struct user_data { user_data (const char *desc, const char *fname) - : desc (desc), fname (fname), has_printed (false) + : desc (desc), fname (fname) { } const char * const desc; const char * const fname; - bool has_printed; + gdb::optional<ui_out::progress_meter> meter; }; /* Deleter for a debuginfod_client. */ @@ -80,15 +81,25 @@ progressfn (debuginfod_client *c, long cur, long total) return 1; } - if (!data->has_printed && total != 0) + if (total == 0) + return 0; + + if (!data->meter.has_value ()) { - /* Print this message only once. */ - data->has_printed = true; - printf_filtered ("Downloading %s %ps...\n", - data->desc, - styled_string (file_name_style.style (), data->fname)); + float size_in_mb = 1.0f * total / (1024 * 1024); + string_file styled_filename (current_uiout->can_emit_style_escape ()); + fprintf_styled (&styled_filename, + file_name_style.style (), + "%s", + data->fname); + std::string message + = string_printf ("Downloading %.2f MB %s %s", size_in_mb, data->desc, + styled_filename.c_str()); + data->meter.emplace (current_uiout, message, 1); } + current_uiout->progress ((double)cur / (double)total); + return 0; } |