From: Tim Harper Date: Tue, 20 May 2008 20:33:57 GMT Subject: Re: using rev-list to tell if a branch is behind or ahead Message-ID: <19466E30-0877-4AE9-BA1D-A8A32C8989C5@gmail.com> In-Reply-To: On May 20, 2008, at 2:24 PM, Shawn O. Pearce wrote: > Tim Harper wrote: >> I'm implementing a ruby interface to git and am wanting to be able to >> ask if a branch is ahead or behind. >> >> I looked in the builtin-checkout.c file and see this code: >> >> /* Run "rev-list --left-right ours...theirs" internally... */ > ... >> It looks like it's calling rev-parse. But, when I call it with the >> same arguments (using branches or commit sha1's), it only will list >> commits that are in right and not in left. I need it to show both >> ways: commits that are in the right and not in left, and commits that >> are in the left but not in right. >> >> Do I need to call rev-parse twice to achieve this? > > No. You need to use the triple dot operator ("...") not the > double dot operator (".."). > Ugh... figured it was something simple. Funny thing is, when I was looking at the c code: strcpy(symmetric, sha1_to_hex(ours->object.sha1)); strcpy(symmetric + 40, "..."); strcpy(symmetric + 43, sha1_to_hex(theirs->object.sha1)); I was like "I wonder why the 3rd line is +43, and not +42". >> Here's a sample of what I'm trying currently: >> ~ $ mkdir test >> ~ $ cd test/ >> ~/test $ git init >> Initialized empty Git repository in .git/ >> ~/test $ git >> ~/test $ echo content > file.txt >> ~/test $ git add file.txt && git commit -m "Initial commit" >> Created initial commit f5e4160: Initial commit >> 1 files changed, 1 insertions(+), 0 deletions(-) >> create mode 100644 file.txt >> ~/test master$ git co -b task >> Switched to a new branch "task" >> ~/test task$ echo changes >> file.txt >> ~/test task$ git add file.txt && git commit -m "Some changes" >> Created commit 96492ee: Some changes >> 1 files changed, 1 insertions(+), 0 deletions(-) >> ~/test task$ git rev-list --left-right task..master -- > > You need an extra "." between task and master, this should be: > > git rev-list --left-right task...master -- > >> ~/test task$ git rev-list --left-right master..task -- >>> 96492ee80143f43417b00699ff29330d0027df7f > > -- > Shawn. That did it, thanks Tim