Show 34 quoted lines
> -----Original Message-----
> From: git-owner@vger.kernel.org [mailto:git-owner@vger.kernel.org] On
> Behalf Of Stefan Beller
> Sent: Wednesday, May 31, 2017 12:40 PM
> To: Kevin Willford <kcwillford@gmail.com>
> Cc: git@vger.kernel.org; Junio C Hamano <gitster@pobox.com>; Kevin
> Willford <kewillf@microsoft.com>
> 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@gmail.com>
> 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.
>
Show 104 quoted lines
>
> >
> > Signed-off-by: Kevin Willford <kewillf@microsoft.com>
> > ---
> > 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
> >