format-patch: pick up correct branch name from symbolic ref
find_branch_name() assumes to take refs/heads/<branch>. But we also have symbolic refs, such as HEAD, that can point to a valid branch in refs/heads and do not follow refs/heads/<branch> syntax. Remove the assumption and apply normal ref resolution. After all it would be confusing if rev machinery resolves a ref in one way and find_branch_name() another. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
e216cc48da
commit
20b630aae9
@ -1014,8 +1014,8 @@ static char *find_branch_name(struct rev_info *rev)
|
|||||||
{
|
{
|
||||||
int i, positive = -1;
|
int i, positive = -1;
|
||||||
unsigned char branch_sha1[20];
|
unsigned char branch_sha1[20];
|
||||||
struct strbuf buf = STRBUF_INIT;
|
const char *ref;
|
||||||
const char *branch;
|
char *full_ref, *branch = NULL;
|
||||||
|
|
||||||
for (i = 0; i < rev->cmdline.nr; i++) {
|
for (i = 0; i < rev->cmdline.nr; i++) {
|
||||||
if (rev->cmdline.rev[i].flags & UNINTERESTING)
|
if (rev->cmdline.rev[i].flags & UNINTERESTING)
|
||||||
@ -1027,16 +1027,13 @@ static char *find_branch_name(struct rev_info *rev)
|
|||||||
}
|
}
|
||||||
if (positive < 0)
|
if (positive < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
strbuf_addf(&buf, "refs/heads/%s", rev->cmdline.rev[positive].name);
|
ref = rev->cmdline.rev[positive].name;
|
||||||
branch = resolve_ref_unsafe(buf.buf, branch_sha1, 1, NULL);
|
if (dwim_ref(ref, strlen(ref), branch_sha1, &full_ref) &&
|
||||||
if (!branch ||
|
!prefixcmp(full_ref, "refs/heads/") &&
|
||||||
prefixcmp(branch, "refs/heads/") ||
|
!hashcmp(rev->cmdline.rev[positive].item->sha1, branch_sha1))
|
||||||
hashcmp(rev->cmdline.rev[positive].item->sha1, branch_sha1))
|
branch = xstrdup(full_ref + strlen("refs/heads/"));
|
||||||
branch = NULL;
|
free(full_ref);
|
||||||
strbuf_release(&buf);
|
return branch;
|
||||||
if (branch)
|
|
||||||
return xstrdup(rev->cmdline.rev[positive].name);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||||
|
@ -912,4 +912,18 @@ test_expect_success 'cover letter using branch description (3)' '
|
|||||||
grep hello actual >/dev/null
|
grep hello actual >/dev/null
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cover letter using branch description (4)' '
|
||||||
|
git checkout rebuild-1 &&
|
||||||
|
test_config branch.rebuild-1.description hello &&
|
||||||
|
git format-patch --stdout --cover-letter master.. >actual &&
|
||||||
|
grep hello actual >/dev/null
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cover letter using branch description (5)' '
|
||||||
|
git checkout rebuild-1 &&
|
||||||
|
test_config branch.rebuild-1.description hello &&
|
||||||
|
git format-patch --stdout --cover-letter -2 HEAD >actual &&
|
||||||
|
grep hello actual >/dev/null
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
x
Reference in New Issue
Block a user