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

Re: Transfer notes when rebasing

From
FMFrancis Moreau <francis.moro@gmail.com>
Date
Sep 4, 2013, 08:47 UTC
Message-ID
<CAC9WiBg+0PkEeBst6sw5uuCb4-21=zj+XCcjwKWSfAYi-ciqDA@mail.gmail.com>
In-Reply-To
<20130904082803.GA17308@sigill.intra.peff.net>
On Wed, Sep 4, 2013 at 10:28 AM, Jeff King <peff@peff.net> wrote:
Show 52 quoted lines
> On Wed, Sep 04, 2013 at 08:59:41AM +0100, John Keeping wrote:
>
>> On Wed, Sep 04, 2013 at 03:53:10AM -0400, Jeff King wrote:
>> > On Wed, Sep 04, 2013 at 09:51:26AM +0200, Francis Moreau wrote:
>> >
>> > > When rebasing a branch which contains commits with notes onto another
>> > > branch it happens that some commits are already presents in the target
>> > > branch.
>> > >
>> > > In that case git-rebase correctly drops those (already present)
>> > > commits but it also drops the notes associated with them.
>> > >
>> > > Can the notes be transfered somehow in the target branch on the
>> > > already present commits ?
>> >
>> > Yes, see the notes.rewriteRef config option to enable this.
>>
>> Does that actually work for this case?  It sounds like Francis has the
>> notes copying correctly when commits are rewritten but the notes are not
>> copied anywhere if the commit becomes empty.
>
> Ah, I misunderstood. If we are dropping commits from the rebase because
> their counterpart is already applied upstream, then no, there isn't an
> automatic way to do this.
>
> If the commits are dropped because a commit with the same patch-id
> already exists upstream, you could match them up by patch-id and copy
> the notes. Annoyingly, while we have things like "log --cherry-mark" to
> show which commits are already present on each side, I do not think
> there is a way to correlate them commit for commit. So I think you are
> stuck doing something in the shell like:
>
>   patch_ids() {
>     git rev-list "$1" |
>     git diff-tree --stdin -p |
>     git patch-id |
>     sort
>   }
>
>   patch_ids $upstream..HEAD >us
>   patch_ids HEAD..$upstream >them
>
>   join us them |
>   cut -d' ' -f2-3 |
>   git notes copy --stdin
>
> However, if the commit is dropped because we find while applying that it
> becomes empty, there is not much we can do. It may have been obsoleted
> by its counterpart patch that had a different patch-id, or it may even
> have been obsoleted by unrelated patches. In the latter case, there is
> nothing to copy to. In the former, you would have to trying to match up
> the commit messages or similar to guess that the two commits correspond.

Can't git-rebase at least handle the case where a patch and its counterpart have the same patch-id ?

Also maybe git-rebase should warn when dropping a commit having a note to tell the user that the note is dropped too.

-- 
Francis
Previous: Jeff KingNext: Jeff King
Message 6 of 7 in “Transfer notes when rebasing”
  1. Francis MoreauSep 4, 2013
  2. Jeff KingSep 4, 2013
  3. John KeepingSep 4, 2013
  4. Francis MoreauSep 4, 2013
  5. Jeff KingSep 4, 2013
  6. Francis MoreauSep 4, 2013
  7. Jeff KingSep 4, 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.