Re: git-format-patch possible regressions
Hi,
On Thu, 25 May 2006, Junio C Hamano wrote:
Show 7 quoted lines
> "Marco Costalba" <mcostalba@gmail.com> writes:
>
> > 2) Unhandled ranges list
> >
> > The second one is not so easy.
>
> This is a real regression;
I was not aware of the possibility to specify several ranges, mostly because I did not use it that way.
However, I think it is worth breaking this in that particular case, since the range handling has become unified with the framework in revision.[ch]
> As an easy alternative, we could give --start-number=<n> to
> format-patch so that you can do the iteration yourself instead
> of having format-patch to iterate over the list.
Something like this?
--- [PATCH] format-patch: support --start-number=<n> (and --start-number <n>)
This option implicitely sets numbered mode and starts the numbering with <n>.
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---
builtin-log.c | 19 ++++++++++++++++---
1 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/builtin-log.c b/builtin-log.c
index c8feb0f..4e3388b 100644
--- a/builtin-log.c
+++ b/builtin-log.c
@@ -148,6 +148,7 @@ int cmd_format_patch(int argc, const cha
int nr = 0, total, i, j;
int use_stdout = 0;
int numbered = 0;
+ int start_number = -1;
int keep_subject = 0;
init_revisions(&rev);
@@ -171,7 +172,14 @@ int cmd_format_patch(int argc, const cha
else if (!strcmp(argv[i], "-n") ||
!strcmp(argv[i], "--numbered"))
numbered = 1;
- else if (!strcmp(argv[i], "-k") ||
+ else if (!strncmp(argv[i], "--start-number=", 15))
+ start_number = strtol(argv[i] + 15, NULL, 10);
+ else if (!strcmp(argv[i], "--start-number")) {
+ i++;
+ if (i == argc)
+ die("Need a number for --start-number");
+ start_number = strtol(argv[i], NULL, 10);
+ } else if (!strcmp(argv[i], "-k") ||
!strcmp(argv[i], "--keep-subject")) {
keep_subject = 1;
rev.total = -1;
@@ -193,6 +201,11 @@ int cmd_format_patch(int argc, const cha
}
argc = j;
+ if (start_number >= 0)
+ numbered = 1;
+ else if (numbered)
+ start_number = 1;
+
if (numbered && keep_subject < 0)
die ("-n and -k are mutually exclusive.");
@@ -219,11 +232,11 @@ int cmd_format_patch(int argc, const cha
}
total = nr;
if (numbered)
- rev.total = total;
+ rev.total = total + start_number - 1;
while (0 <= --nr) {
int shown;
commit = list[nr];
- rev.nr = total - nr;
+ rev.nr = rev.total - nr;
if (!use_stdout)
reopen_stdout(commit, rev.nr, keep_subject);
shown = log_tree_commit(&rev, commit);
--
1.3.3.gd515