Re: [PATCH 1/2] format-patch: have progress option while generating patches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.


>
> 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
>



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]