git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Santi Béjar" <santi@agolina.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>, git@vger.kernel.org
Subject: Re: [PATCHv2 2/2] pull: support rebased upstream + fetch + pull  --rebase
Date: Fri, 17 Jul 2009 09:51:38 +0200	[thread overview]
Message-ID: <adf1fd3d0907170051u7268d8f6kba7f2e529381d275@mail.gmail.com> (raw)
In-Reply-To: <adf1fd3d0907161618o61ee4b58of25659f8c36420f7@mail.gmail.com>

2009/7/17 Santi Béjar <santi@agolina.net>:
> 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

  reply	other threads:[~2009-07-17  7:51 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-16  0:09 [PATCH 1/2] t5520-pull: Test for rebased upstream + fetch + pull --rebase Santi Béjar
2009-07-16  0:09 ` [PATCH 2/2] pull: support " Santi Béjar
2009-07-16  0:26   ` Junio C Hamano
2009-07-16  6:29     ` Santi Béjar
2009-07-16  8:12       ` [PATCHv2 " Santi Béjar
2009-07-16  8:12         ` Santi Béjar
2009-07-16  8:15         ` Santi Béjar
2009-07-16  8:51         ` Johannes Schindelin
2009-07-16 16:32           ` Santi Béjar
2009-07-17 10:13             ` Johannes Schindelin
2009-07-16 20:41           ` Junio C Hamano
2009-07-16 23:18             ` Santi Béjar
2009-07-17  7:51               ` Santi Béjar [this message]
2009-07-17  8:25                 ` Junio C Hamano
2009-07-17 13:24                   ` Santi Béjar
2009-07-18 13:46                     ` [PATCHv3 " Santi Béjar
2009-07-18 17:55                       ` Junio C Hamano
2009-07-19  7:27                         ` Santi Béjar
2009-07-19  7:45                           ` [PATCHv4 " Santi Béjar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=adf1fd3d0907170051u7268d8f6kba7f2e529381d275@mail.gmail.com \
    --to=santi@agolina.net \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).