git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/3] format-patch: pick up branch description when no ref is specified

From
Duy Nguyen <pclouds@gmail.com>
Date
Jan 2, 2013, 01:25 UTC
Message-ID
<CACsJy8C_rpJrfZLESB8dva4RXrVgcf_Fsnv3zkTw=rhN0JOGog@mail.gmail.com>
In-Reply-To
<7v38ykbpv3.fsf@alter.siamese.dyndns.org>
On Wed, Jan 2, 2013 at 3:38 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 19 quoted lines
> Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:
>
>> find_branch_name() fails to detect "format-patch --cover-letter -3"
>> where no command line arguments are given and HEAD is automatically
>> added.
>
> Nicely spotted.
>
> That is not the only case that takes this codepath, though.
>
>     $ git format-patch --cover-letter master..
>
> will also give you the same (if you say it without "..", which is
> the more normal invocation of the command, then the caller already
> know you meant the current branch and this function is not called).
>
> And in that case you will have two tokens on cmdline.nr, one for
> "master.."  to show where he bottom is, and the other for the
> implied "HEAD";

Interesting. find_brach_name() handles this case wrong because rev->cmdline[positive].name is "HEAD" and it goes ahead prepending "refs/heads/" anyway. I'll fix it in the reroll. I was avoiding tests with an excuse that you did not write tests when you added this function either. But with this change, I think tests are required.

> I do not think this patch is a sufficient solution
> for the more general cases, but on the other hand I do not know how
> much it matters.

I think the best place to handle this is setup_revisions() for general cases. But we do not need branch detection anywhere else yet, I guess it's ok to fix it case by case here. We can move the code back to revisions.c when there are more use cases for it.

Show 10 quoted lines
>> -     if (positive < 0)
>> +     if (positive < 0) {
>> +             /*
>> +              * No actual ref from command line, but "HEAD" from
>> +              * rev->def was added in setup_revisions()
>> +              * e.g. format-patch --cover-letter -12
>> +              */
>
> That comment does not describe "positive < 0" case, but belongs to
> the conditional added in this patch, no?

It's meant as the comment for the following block, yes. I'll move it into the block for clarity.

Show 13 quoted lines
>> +             if (!rev->cmdline.nr &&
>> +                 rev->pending.nr == 1 &&
>> +                 !strcmp(rev->pending.objects[0].name, "HEAD")) {
>> +                     const char *ref;
>> +                     ref = resolve_ref_unsafe("HEAD", branch_sha1, 1, NULL);
>> +                     if (ref && !prefixcmp(ref, "refs/heads/"))
>> +                             return xstrdup(ref + strlen("refs/heads/"));
>> +             }
>>               return NULL;
>> +     }
>>       strbuf_addf(&buf, "refs/heads/%s", rev->cmdline.rev[positive].name);
>>       branch = resolve_ref_unsafe(buf.buf, branch_sha1, 1, NULL);
>>       if (!branch ||
-- 
Duy
Previous: Junio C HamanoNext: Nguyễn Thái Ngọc Duy
Message 4 of 5 in “config.txt: a few lines about branch.<name>.description”
  1. 1/3 config.txt: a few lines about branch.<name>.descriptionNguyễn Thái Ngọc Duy, Jan 1, 2013
  2. 2/3 format-patch: pick up branch description when no ref is specifiedNguyễn Thái Ngọc Duy, Jan 1, 2013
  3. Junio C HamanoJan 1, 2013
  4. Duy NguyenJan 2, 2013
  5. 3/3 branch: delete branch description if it's emptyNguyễn Thái Ngọc Duy, Jan 1, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.