diff options
author | Felipe Contreras <felipe.contreras@gmail.com> | 2013-04-07 12:46:21 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-04-07 13:33:45 -0700 |
commit | 427a8ec5e75f4450620e5df3e1f1071f48c7772c (patch) | |
tree | ac28485ee79e6a65995b5784fec1c0738180f2a4 | |
parent | format-patch: improve head calculation for cover-letter (diff) | |
download | tgif-427a8ec5e75f4450620e5df3e1f1071f48c7772c.tar.xz |
format-patch: refactor branch name calculation
By moving the part that relies on rev->pending earlier, where we are
already checking the special case where there's only one ref.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin/log.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/builtin/log.c b/builtin/log.c index 679282706a..804626b0ea 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1052,15 +1052,6 @@ static char *find_branch_name(struct rev_info *rev) if (0 <= positive) { ref = rev->cmdline.rev[positive].name; tip_sha1 = rev->cmdline.rev[positive].item->sha1; - } else if (!rev->cmdline.nr && rev->pending.nr == 1 && - !strcmp(rev->pending.objects[0].name, "HEAD")) { - /* - * No actual ref from command line, but "HEAD" from - * rev->def was added in setup_revisions() - * e.g. format-patch --cover-letter -12 - */ - ref = "HEAD"; - tip_sha1 = rev->pending.objects[0].item->sha1; } else { return NULL; } @@ -1280,28 +1271,36 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) } if (rev.pending.nr == 1) { + int check_head = 0; + if (rev.max_count < 0 && !rev.show_root_diff) { /* * This is traditional behaviour of "git format-patch * origin" that prepares what the origin side still * does not have. */ - unsigned char sha1[20]; - const char *ref; - rev.pending.objects[0].item->flags |= UNINTERESTING; add_head_to_pending(&rev); - ref = resolve_ref_unsafe("HEAD", sha1, 1, NULL); - if (ref && !prefixcmp(ref, "refs/heads/")) - branch_name = xstrdup(ref + strlen("refs/heads/")); - else - branch_name = xstrdup(""); /* no branch */ + check_head = 1; } /* * Otherwise, it is "format-patch -22 HEAD", and/or * "format-patch --root HEAD". The user wants * get_revision() to do the usual traversal. */ + + if (!strcmp(rev.pending.objects[0].name, "HEAD")) + check_head = 1; + + if (check_head) { + unsigned char sha1[20]; + const char *ref; + ref = resolve_ref_unsafe("HEAD", sha1, 1, NULL); + if (ref && !prefixcmp(ref, "refs/heads/")) + branch_name = xstrdup(ref + strlen("refs/heads/")); + else + branch_name = xstrdup(""); /* no branch */ + } } /* |