From: Miklos Vajna <vmiklos@frugalware.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: [PATCH] Add --only-merges flag to display only merge commits.
Date: Tue, 8 Apr 2008 22:36:48 +0200 [thread overview]
Message-ID: <20080408203648.GS11574@genesis.frugalware.org> (raw)
This is the opposite of git-rev-list --no-merges: It will hide commits
with single or no parent.
It is useful if a maintainer has a lot of commits between tags and
usually each feature is developed in its own topic branch.
Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
---
I just wanted to see the list of merges since the last tag in a repo
where we have 1000+ commits and about 20 merges and found that there is
no easy way to do so.
As a side effect, git rev-list --no-merges --only-merges will list
nothing, but that's logical IMHO.
Documentation/git-rev-list.txt | 1 +
Documentation/rev-list-options.txt | 4 ++++
builtin-rev-list.c | 1 +
builtin-rev-parse.c | 1 +
revision.c | 7 +++++++
revision.h | 1 +
6 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt
index d80cdf5..17c26bc 100644
--- a/Documentation/git-rev-list.txt
+++ b/Documentation/git-rev-list.txt
@@ -15,6 +15,7 @@ SYNOPSIS
[ \--min-age=timestamp ]
[ \--sparse ]
[ \--no-merges ]
+ [ \--only-merges ]
[ \--first-parent ]
[ \--remove-empty ]
[ \--full-history ]
diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt
index 2648a55..fc1cf0f 100644
--- a/Documentation/rev-list-options.txt
+++ b/Documentation/rev-list-options.txt
@@ -176,6 +176,10 @@ endif::git-rev-list[]
Do not print commits with more than one parent.
+--only-merges::
+
+ Do not print commits with less than two parents.
+
--first-parent::
Follow only the first parent commit upon seeing a merge
commit. This option can give a better overview when
diff --git a/builtin-rev-list.c b/builtin-rev-list.c
index edc0bd3..35c9422 100644
--- a/builtin-rev-list.c
+++ b/builtin-rev-list.c
@@ -23,6 +23,7 @@ static const char rev_list_usage[] =
" --min-age=epoch\n"
" --sparse\n"
" --no-merges\n"
+" --only-merges\n"
" --remove-empty\n"
" --all\n"
" --branches\n"
diff --git a/builtin-rev-parse.c b/builtin-rev-parse.c
index 0351d54..66a6b62 100644
--- a/builtin-rev-parse.c
+++ b/builtin-rev-parse.c
@@ -47,6 +47,7 @@ static int is_rev_argument(const char *arg)
"--max-count=",
"--min-age=",
"--no-merges",
+ "--only-merges",
"--objects",
"--objects-edge",
"--parents",
diff --git a/revision.c b/revision.c
index 196fedc..1f92a1a 100644
--- a/revision.c
+++ b/revision.c
@@ -1127,6 +1127,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
revs->no_merges = 1;
continue;
}
+ if (!strcmp(arg, "--only-merges")) {
+ revs->only_merges = 1;
+ continue;
+ }
if (!strcmp(arg, "--boundary")) {
revs->boundary = 1;
continue;
@@ -1517,6 +1521,9 @@ enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit)
return commit_ignore;
if (revs->no_merges && commit->parents && commit->parents->next)
return commit_ignore;
+ if (revs->only_merges && ((commit->parents && !commit->parents->next) ||
+ !commit->parents))
+ return commit_ignore;
if (!commit_match(commit, revs))
return commit_ignore;
if (revs->prune && revs->dense) {
diff --git a/revision.h b/revision.h
index c8b3b94..c40cf33 100644
--- a/revision.h
+++ b/revision.h
@@ -32,6 +32,7 @@ struct rev_info {
unsigned int dense:1,
prune:1,
no_merges:1,
+ only_merges:1,
no_walk:1,
show_all:1,
remove_empty_trees:1,
--
1.5.4.5
next reply other threads:[~2008-04-08 20:37 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-08 20:36 Miklos Vajna [this message]
2008-04-09 14:06 ` [PATCH] Add --only-merges flag to display only merge commits Johannes Schindelin
2008-04-09 14:51 ` Miklos Vajna
2008-04-09 15:00 ` Johannes Schindelin
2008-04-09 18:31 ` Miklos Vajna
2008-04-09 20:06 ` Junio C Hamano
2008-04-09 20:38 ` Miklos Vajna
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=20080408203648.GS11574@genesis.frugalware.org \
--to=vmiklos@frugalware.org \
--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).