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

Re: [PATCHv2 2/2] pull: support rebased upstream + fetch + pull --rebase

From
SBSanti Béjar <santi@agolina.net>
Date
Jul 17, 2009, 07:51 UTC
Message-ID
<adf1fd3d0907170051u7268d8f6kba7f2e529381d275@mail.gmail.com>
In-Reply-To
<adf1fd3d0907161618o61ee4b58of25659f8c36420f7@mail.gmail.com>
2009/7/17 Santi Béjar <santi@agolina.net>:
Show 17 quoted lines
> 2009/7/16 Junio C Hamano <gitster@pobox.com>:
>> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>>
>>> How about
>>>
>>>       oldremoteref="$(git rev-list --boundary HEAD --not \
>>>                       $(git rev-list -g $remoteref | sed 's/$/^@/') |
>>>               sed -e '/^[^-]/d' -e q)"
>>>
>>> Explanation: the "git rev-list -g $remoteref" lists the previous commits
>>> the remote ref pointed to, and the ^@ appended to them means all their
>>> parents.  Now, the outer rev-list says to take everything in HEAD but
>>> _not_ in those parents, showing the boundary commits.  The "sed" call
>>> lists the first such boundary commit (which must, by construction, be one
>>> of the commits shown by the first rev-list).
>>
>> Hmm, I am not sure about that "(which must..." part.

Unfortunatly you are right with the "(which must..." part. Even without the ^@. Normally gives the right answer, but it is not sure that the first commit boundary is the correct one. For example:

         o--C
        /
 A--x--y--B--o--z
     \      /
      o----o
A, B, C are upstream@{n}

It involves a merge with a branch forked before the fork commit for the current branch, and it will not work neither with git pull --rebase. We could say that it is not supported, but nevertheless it gives the wrong answer.

The right answer is B, but: $ git rev-list --boundary z --not C B A z o o o -x -B

in this case we could take the boundaries commits and filter the commits that are ancestor of some other boundary commit, and would get B (git show-branch --independent x B -> B).

Here it is a test case to see the above.

rm -rf test mkdir test cd test git init echo A > file git add . git commit -mA git tag A echo o > file git commit -a -mo git tag fork1 echo z > file git commit -a -mz git tag fork2 echo B > file git commit -a -mB git tag B git checkout -b topic fork1 echo oo > filetopic git add . git commit -moo echo ooo > filetopic git commit -a -mooo git checkout master git merge topic echo c > file git commit -a -mc git checkout -b upstream fork2 echo o > fileupstream git add . git commit -a -mo5 echo C > fileupstream git commit -a -mo git tag C git rev-list --boundary master --not C B A echo answer: $(git rev-parse B^{})

HTH, Santi

Previous: Santi BéjarNext: Junio C Hamano
Message 13 of 19 in “t5520-pull: Test for rebased upstream + fetch + pull --rebase”
  1. 1/2 t5520-pull: Test for rebased upstream + fetch + pull --rebaseSanti Béjar, Jul 16, 2009
  2. 2/2 pull: support rebased upstream + fetch + pull --rebaseSanti Béjar, Jul 16, 2009
  3. Junio C HamanoJul 16, 2009
  4. Santi BéjarJul 16, 2009
  5. 2/2 pull: support rebased upstream + fetch + pull --rebaseSanti Béjar, Jul 16, 2009
  6. 2/2 pull: support rebased upstream + fetch + pull --rebaseSanti Béjar, Jul 16, 2009
  7. Santi BéjarJul 16, 2009
  8. Johannes SchindelinJul 16, 2009
  9. Santi BéjarJul 16, 2009
  10. Johannes SchindelinJul 17, 2009
  11. Junio C HamanoJul 16, 2009
  12. Santi BéjarJul 16, 2009
  13. Santi BéjarJul 17, 2009
  14. Junio C HamanoJul 17, 2009
  15. Santi BéjarJul 17, 2009
  16. 2/2 pull: support rebased upstream + fetch + pull --rebaseSanti Béjar, Jul 18, 2009
  17. Junio C HamanoJul 18, 2009
  18. Santi BéjarJul 19, 2009
  19. 2/2 pull: support rebased upstream + fetch + pull --rebaseSanti Béjar, Jul 19, 2009

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.