> -----Original Message----- > From: git-owner@xxxxxxxxxxxxxxx [mailto:git-owner@xxxxxxxxxxxxxxx] On > Behalf Of Stefan Beller > Sent: Wednesday, May 31, 2017 12:40 PM > To: Kevin Willford <kcwillford@xxxxxxxxx> > Cc: git@xxxxxxxxxxxxxxx; Junio C Hamano <gitster@xxxxxxxxx>; Kevin > Willford <kewillf@xxxxxxxxxxxxx> > Subject: Re: [PATCH 1/2] format-patch: have progress option while > generating patches > > On Wed, May 31, 2017 at 8:04 AM, Kevin Willford <kcwillford@xxxxxxxxx> > wrote: > > When generating patches for the rebase command if the user does not > > realize the branch they are rebasing onto is thousands of commits > > different there is no progress indication after initial rewinding > > message. > > > > This patch allows a progress option to be passed to format-patch so > > that the user can be informed the progress of generating the patch. > > This option will then be used by the rebase command when calling > > format-patch. > > After reading the code, I was looking for some explanation on the underlying > assumptions, such as: > > The progress meter as presented in this patch assumes the thousands of > patches to have a fine granularity as well as assuming to require all the > same amount of work/time for each, such that a steady progress bar > is achieved. > > We do not want to estimate the time for each patch based e.g. > on their size or number of touched files (or parents) as that is too > expensive for just a progress meter. > Sounds good. I will add some explanation to the commit message. > > > > > Signed-off-by: Kevin Willford <kewillf@xxxxxxxxxxxxx> > > --- > > Documentation/git-format-patch.txt | 8 ++++++++ > > builtin/log.c | 10 ++++++++++ > > 2 files changed, 18 insertions(+) > > > > diff --git a/Documentation/git-format-patch.txt > > b/Documentation/git-format-patch.txt > > index c890328b02..ee5f99f606 100644 > > --- a/Documentation/git-format-patch.txt > > +++ b/Documentation/git-format-patch.txt > > @@ -23,6 +23,7 @@ SYNOPSIS > > [(--reroll-count|-v) <n>] > > [--to=<email>] [--cc=<email>] > > [--[no-]cover-letter] [--quiet] [--notes[=<ref>]] > > + [--progress] > > [<common diff options>] > > [ <since> | <revision range> ] > > > > @@ -260,6 +261,7 @@ you can use `--suffix=-patch` to get `0001- > description-of-my-change-patch`. > > -q:: > > --quiet:: > > Do not print the names of the generated files to standard output. > > + Progress is not reported to the standard error stream. > > > > --no-binary:: > > Do not output contents of changes in binary files, instead @@ > > -283,6 +285,12 @@ you can use `--suffix=-patch` to get `0001-description- > of-my-change-patch`. > > range are always formatted as creation patches, independently > > of this flag. > > > > +--progress:: > > + Progress status is reported on the standard error stream > > + by default when it is attached to a terminal, unless -q > > + is specified. This flag forces progress status even if the > > + standard error stream is not directed to a terminal. > > + > > CONFIGURATION > > ------------- > > You can specify extra mail header lines to be added to each message, > > diff --git a/builtin/log.c b/builtin/log.c index > > 631fbc984f..02c50431b6 100644 > > --- a/builtin/log.c > > +++ b/builtin/log.c > > @@ -26,6 +26,7 @@ > > #include "version.h" > > #include "mailmap.h" > > #include "gpg-interface.h" > > +#include "progress.h" > > > > /* Set a default date-time format for git log ("log.date" config > > variable) */ static const char *default_date_mode = NULL; @@ -1409,6 > > +1410,8 @@ int cmd_format_patch(int argc, const char **argv, const char > *prefix) > > char *branch_name = NULL; > > char *base_commit = NULL; > > struct base_tree_info bases; > > + int show_progress = 0; > > + struct progress *progress = NULL; > > > > const struct option builtin_format_patch_options[] = { > > { OPTION_CALLBACK, 'n', "numbered", &numbered, NULL, > > @@ -1480,6 +1483,8 @@ int cmd_format_patch(int argc, const char **argv, > const char *prefix) > > OPT_FILENAME(0, "signature-file", &signature_file, > > N_("add a signature from a file")), > > OPT__QUIET(&quiet, N_("don't print the patch > > filenames")), > > + OPT_BOOL(0, "progress", &show_progress, > > + N_("show progress")), > > OPT_END() > > }; > > > > @@ -1739,8 +1744,12 @@ int cmd_format_patch(int argc, const char > **argv, const char *prefix) > > start_number--; > > } > > rev.add_signoff = do_signoff; > > + > > + if (show_progress && !quiet) > > + progress = start_progress(_("Generating patch"), > > + total); > > while (0 <= --nr) { > > int shown; > > + display_progress(progress, total - nr); > > commit = list[nr]; > > rev.nr = total - nr + (start_number - 1); > > /* Make the second and subsequent mails replies to the > > first */ @@ -1805,6 +1814,7 @@ int cmd_format_patch(int argc, const char > **argv, const char *prefix) > > if (!use_stdout) > > fclose(rev.diffopt.file); > > } > > + stop_progress(&progress); > > free(list); > > free(branch_name); > > string_list_clear(&extra_to, 0); > > -- > > 2.13.0.92.g73a4ce6a77 > >