diff options
author | Felipe Contreras <felipe.contreras@gmail.com> | 2013-04-07 12:46:20 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-04-07 13:32:41 -0700 |
commit | 80d35ca0aaeca654562974be6ea528e22bc76e8c (patch) | |
tree | 957c277a944dfaa40f1ea4383b15f1ea528b1811 /builtin/log.c | |
parent | 402596aafa45ef371611bb795bdf8daa2bdb9286 (diff) | |
download | git-80d35ca0aaeca654562974be6ea528e22bc76e8c.tar.gz |
format-patch: improve head calculation for cover-letter
If we do it after the revision traversal we can be sure that this is
indeed a commit that will be processed (i.e. not a merge) and it's the
top most one (thus removing the NEEDSWORK comment, at least we show the
same as 'git diff --stat' output that appears in the cover-letter).
While we are at it, since we know there's nothing to generate, exit
sooner in all cases, like --cover-letter currently does.
Also, if there's nothing to generate and cover-letter is specified, a
different code-path might be triggered that is not currently covered in
the test-case, so add a test for it.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/log.c')
-rw-r--r-- | builtin/log.c | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/builtin/log.c b/builtin/log.c index 0f318107e5..679282706a 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1311,24 +1311,6 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) rev.show_root_diff = 1; if (cover_letter) { - /* - * NEEDSWORK:randomly pick one positive commit to show - * diffstat; this is often the tip and the command - * happens to do the right thing in most cases, but a - * complex command like "--cover-letter a b c ^bottom" - * picks "c" and shows diffstat between bottom..c - * which may not match what the series represents at - * all and totally broken. - */ - int i; - for (i = 0; i < rev.pending.nr; i++) { - struct object *o = rev.pending.objects[i].item; - if (!(o->flags & UNINTERESTING)) - head = (struct commit *)o; - } - /* There is nothing to show; it is not an error, though. */ - if (!head) - return 0; if (!branch_name) branch_name = find_branch_name(&rev); } @@ -1364,6 +1346,10 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) list = xrealloc(list, nr * sizeof(list[0])); list[nr - 1] = commit; } + if (nr == 0) + /* nothing to do */ + return 0; + head = list[0]; total = nr; if (!keep_subject && auto_number && total > 1) numbered = 1; |