On Fri, Dec 17 2021, Derrick Stolee via GitGitGadget wrote: > From: Derrick Stolee <dstolee@xxxxxxxxxxxxx> > > While testing some ideas in 'git repack', I ran it with '--quiet' and > discovered that some progress output was still shown. Specifically, the > output for writing the multi-pack-index showed the progress. > > The 'show_progress' variable in cmd_repack() is initialized with > isatty(2) and is not modified at all by the '--quiet' flag. The > '--quiet' flag modifies the po_args.quiet option which is translated > into a '--quiet' flag for the 'git pack-objects' child process. However, > 'show_progress' is used to directly send progress information to the > multi-pack-index writing logic which does not use a child process. > > The fix here is to modify 'show_progress' to be false if po_opts.quiet > is true, and isatty(2) otherwise. This new expectation simplifies a > later condition that checks both. > > This is difficult to test because the isatty(2) already prevents the > progess indicators from appearing when we redirect stderr to a file. > > Signed-off-by: Derrick Stolee <dstolee@xxxxxxxxxxxxx> > --- > builtin/repack.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/builtin/repack.c b/builtin/repack.c > index 1f128b7c90b..c393a5db774 100644 > --- a/builtin/repack.c > +++ b/builtin/repack.c > @@ -612,7 +612,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix) > struct tempfile *refs_snapshot = NULL; > int i, ext, ret; > FILE *out; > - int show_progress = isatty(2); > + int show_progress; > > /* variables to be filled by option parsing */ > int pack_everything = 0; > @@ -725,6 +725,8 @@ int cmd_repack(int argc, const char **argv, const char *prefix) > > prepare_pack_objects(&cmd, &po_args); > > + show_progress = !po_args.quiet && isatty(2); > + > strvec_push(&cmd.args, "--keep-true-parents"); > if (!pack_kept_objects) > strvec_push(&cmd.args, "--honor-pack-keep"); > @@ -926,7 +928,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix) > } > strbuf_release(&buf); > } > - if (!po_args.quiet && show_progress) > + if (show_progress) > opts |= PRUNE_PACKED_VERBOSE; > prune_packed_objects(opts); This seems like a good change, but the documentation could really use an update (also before this change). It just says about -q: Pass the -q option to git pack-objects. See git-pack-objects(1). But do various things in "git-repack" itself differently if it's supplied.