[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.
This commit is contained in:
parent
2f2287318b
commit
d6f26c9d28
@ -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>
|
2020-12-02 Enze Li <lienze2010@hotmail.com>
|
||||||
|
|
||||||
* .gitignore: Add gnu global outputs.
|
* .gitignore: Add gnu global outputs.
|
||||||
|
@ -272,7 +272,7 @@ cli_ui_out::do_redirect (ui_file *outstream)
|
|||||||
- printed for tty, SHOULD_PRINT == false:
|
- printed for tty, SHOULD_PRINT == false:
|
||||||
<>
|
<>
|
||||||
- printed for not-a-tty:
|
- printed for not-a-tty:
|
||||||
<NAME...done.
|
<NAME...
|
||||||
>
|
>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -348,7 +348,7 @@ cli_ui_out::do_progress_end ()
|
|||||||
|
|
||||||
if (!stream->isatty ())
|
if (!stream->isatty ())
|
||||||
{
|
{
|
||||||
fprintf_unfiltered (stream, "done.\n");
|
fprintf_unfiltered (stream, "\n");
|
||||||
gdb_flush (stream);
|
gdb_flush (stream);
|
||||||
}
|
}
|
||||||
else if (meter.printing == PROGRESS)
|
else if (meter.printing == PROGRESS)
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "cli/cli-style.h"
|
#include "cli/cli-style.h"
|
||||||
#include "gdbsupport/scoped_fd.h"
|
#include "gdbsupport/scoped_fd.h"
|
||||||
#include "debuginfod-support.h"
|
#include "debuginfod-support.h"
|
||||||
|
#include "gdbsupport/gdb_optional.h"
|
||||||
|
|
||||||
#ifndef HAVE_LIBDEBUGINFOD
|
#ifndef HAVE_LIBDEBUGINFOD
|
||||||
scoped_fd
|
scoped_fd
|
||||||
@ -46,12 +47,12 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
|
|||||||
struct user_data
|
struct user_data
|
||||||
{
|
{
|
||||||
user_data (const char *desc, const char *fname)
|
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 desc;
|
||||||
const char * const fname;
|
const char * const fname;
|
||||||
bool has_printed;
|
gdb::optional<ui_out::progress_meter> meter;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Deleter for a debuginfod_client. */
|
/* Deleter for a debuginfod_client. */
|
||||||
@ -80,15 +81,25 @@ progressfn (debuginfod_client *c, long cur, long total)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!data->has_printed && total != 0)
|
if (total == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!data->meter.has_value ())
|
||||||
{
|
{
|
||||||
/* Print this message only once. */
|
float size_in_mb = 1.0f * total / (1024 * 1024);
|
||||||
data->has_printed = true;
|
string_file styled_filename (current_uiout->can_emit_style_escape ());
|
||||||
printf_filtered ("Downloading %s %ps...\n",
|
fprintf_styled (&styled_filename,
|
||||||
data->desc,
|
file_name_style.style (),
|
||||||
styled_string (file_name_style.style (), data->fname));
|
"%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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user