From: John Keeping <john@keeping.me.uk>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>,
Jonathan Nieder <jrnieder@gmail.com>,
Michael J Gruber <git@drmicha.warpmail.net>,
John Keeping <john@keeping.me.uk>
Subject: [RFC/PATCH 0/2] merge-base: add --merge-child option
Date: Sat, 11 May 2013 13:23:42 +0100 [thread overview]
Message-ID: <cover.1368274689.git.john@keeping.me.uk> (raw)
This is helpful when examining branches with disjoint roots, for example
because one is periodically merged into a subtree of the other.
With the --merge-child option, "git merge-base" will print a
first-parent ancestor of the first revision given, where the commit
printed is either a merge-base of the supplied revisions or a merge for
which one of its parents (not the first) is a merge-base.
For example, given the history:
A---C---G
\
B-----D---F
\
E
we have:
$ git merge-base F E
B
$ git merge-base --merge-child F E
D
$ git merge-base F G
C
$ git merge-base --merge-child F G
C
$ git log --left-right F...E
< F
< D
< C
< A
> E
$ git log --left-right F...E --not $(git merge-base --merge-child F E)
< F
> E
The git-log case is useful because it allows us to limit the range of
commits that we are examining for patch-identical changes when using
--cherry. For example with git-gui in git.git I know that anything
before the last merge of git-gui is not interesting:
$ time git log --cherry master...git-gui/master >/dev/null
real 0m32.731s
user 0m31.956s
sys 0m0.664s
$ time git log --cherry master...git-gui/master --not \
$(git merge-base --merge-child master git-gui/master) \
>/dev/null
real 0m2.296s
user 0m2.193s
sys 0m0.092s
The first commit is a small prerequisite to extract a useful function
from builtin/tag.c to commit.c. The second is the main change (the
commit message is identical to the text before this paragraph).
I'm not convinced that '--merge-child' is the right name for this but I
think the functionality itself is useful.
John Keeping (2):
commit: add commit_list_contains function
merge-base: add --merge-child option
Documentation/git-merge-base.txt | 6 ++++
builtin/merge-base.c | 61 ++++++++++++++++++++++++++++++++++++++--
builtin/tag.c | 10 +------
commit.c | 8 ++++++
commit.h | 1 +
t/t6010-merge-base.sh | 25 ++++++++++++++--
6 files changed, 98 insertions(+), 13 deletions(-)
--
1.8.3.rc1.289.gcb3647f
next reply other threads:[~2013-05-11 12:24 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-11 12:23 John Keeping [this message]
2013-05-11 12:23 ` [RFC/PATCH 1/2] commit: add commit_list_contains function John Keeping
2013-05-11 12:23 ` [RFC/PATCH 2/2] merge-base: add --merge-child option John Keeping
2013-05-11 17:54 ` [RFC/PATCH 0/2] " Junio C Hamano
2013-05-11 18:48 ` John Keeping
2013-05-12 15:44 ` Kevin Bracey
2013-05-12 16:28 ` John Keeping
2013-05-12 16:33 ` John Keeping
2013-05-12 17:14 ` Kevin Bracey
2013-05-12 22:22 ` Junio C Hamano
2013-05-13 14:26 ` Kevin Bracey
2013-05-13 14:45 ` Michael J Gruber
2013-05-19 12:40 ` log --cherry and merges (was [RFC/PATCH 0/2] merge-base: add --merge-child option) John Keeping
2013-05-20 6:43 ` Jonathan Nieder
2013-05-13 15:00 ` [PATCH 0/2] Make --ancestry-path A...B work Kevin Bracey
2013-05-13 15:00 ` [PATCH 1/2] t6019: demonstrate --ancestry-path A...B breakage Kevin Bracey
2013-05-13 15:00 ` [PATCH 2/2] revision.c: treat A...B merge bases as if manually specified Kevin Bracey
2013-05-13 16:04 ` Junio C Hamano
2013-05-12 16:58 ` [RFC/PATCH 0/2] merge-base: add --merge-child option John Keeping
2013-05-12 17:29 ` Kevin Bracey
2013-05-13 5:02 ` Junio C Hamano
2013-05-13 7:52 ` John Keeping
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=cover.1368274689.git.john@keeping.me.uk \
--to=john@keeping.me.uk \
--cc=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=peff@peff.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.