Merge branch 'nd/maint-branch-desc-doc'

Teach various forms of "format-patch" command line to identify what
branch the patches are taken from, so that the branch description
is picked up in more cases.

* nd/maint-branch-desc-doc:
  format-patch: pick up branch description when no ref is specified
  format-patch: pick up correct branch name from symbolic ref
  t4014: a few more tests on cover letter using branch description
  branch: delete branch description if it's empty
  config.txt: a few lines about branch.<name>.description
This commit is contained in:
Junio C Hamano 2013-01-09 08:27:09 -08:00
commit 3a2ce79981
4 changed files with 72 additions and 14 deletions

View File

@ -739,6 +739,12 @@ branch.<name>.rebase::
it unless you understand the implications (see linkgit:git-rebase[1] it unless you understand the implications (see linkgit:git-rebase[1]
for details). for details).
branch.<name>.description::
Branch description, can be edited with
`git branch --edit-description`. Branch description is
automatically added in the format-patch cover letter or
request-pull summary.
browser.<tool>.cmd:: browser.<tool>.cmd::
Specify the command to invoke the specified browser. The Specify the command to invoke the specified browser. The
specified command is evaluated in shell with the URLs passed specified command is evaluated in shell with the URLs passed

View File

@ -725,7 +725,7 @@ static int edit_branch_description(const char *branch_name)
stripspace(&buf, 1); stripspace(&buf, 1);
strbuf_addf(&name, "branch.%s.description", branch_name); strbuf_addf(&name, "branch.%s.description", branch_name);
status = git_config_set(name.buf, buf.buf); status = git_config_set(name.buf, buf.len ? buf.buf : NULL);
strbuf_release(&name); strbuf_release(&name);
strbuf_release(&buf); strbuf_release(&buf);

View File

@ -1016,8 +1016,9 @@ 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 unsigned char *tip_sha1;
const char *branch; const char *ref;
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,18 +1028,27 @@ static char *find_branch_name(struct rev_info *rev)
else else
return NULL; return NULL;
} }
if (positive < 0) 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; return NULL;
strbuf_addf(&buf, "refs/heads/%s", 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(tip_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)

View File

@ -963,4 +963,46 @@ test_expect_success 'format patch ignores color.ui' '
test_cmp expect actual test_cmp expect actual
' '
test_expect_success 'cover letter using branch description (1)' '
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 (2)' '
git checkout rebuild-1 &&
test_config branch.rebuild-1.description hello &&
git format-patch --stdout --cover-letter rebuild-1~2..rebuild-1 >actual &&
grep hello actual >/dev/null
'
test_expect_success 'cover letter using branch description (3)' '
git checkout rebuild-1 &&
test_config branch.rebuild-1.description hello &&
git format-patch --stdout --cover-letter ^master rebuild-1 >actual &&
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_expect_success 'cover letter using branch description (6)' '
git checkout rebuild-1 &&
test_config branch.rebuild-1.description hello &&
git format-patch --stdout --cover-letter -2 >actual &&
grep hello actual >/dev/null
'
test_done test_done