From: Karthik Nayak <karthik.188@gmail.com>
To: git@vger.kernel.org
Cc: christian.couder@gmail.com, Matthieu.Moy@grenoble-inp.fr,
gitster@pobox.com, Karthik Nayak <karthik.188@gmail.com>
Subject: [PATCH v12 13/13] tag.c: implement '--merged' and '--no-merged' options
Date: Wed, 19 Aug 2015 00:07:32 +0530 [thread overview]
Message-ID: <1439923052-7373-14-git-send-email-Karthik.188@gmail.com> (raw)
In-Reply-To: <1439923052-7373-1-git-send-email-Karthik.188@gmail.com>
From: Karthik Nayak <karthik.188@gmail.com>
Use 'ref-filter' APIs to implement the '--merged' and '--no-merged'
options into 'tag.c'. The '--merged' option lets the user to only list
tags merged into the named commit. The '--no-merged' option lets the
user to only list tags not merged into the named commit. If no object
is provided it assumes HEAD as the object.
Add documentation and tests for the same.
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
---
Documentation/git-tag.txt | 7 ++++++-
builtin/tag.c | 6 +++++-
t/t7004-tag.sh | 27 +++++++++++++++++++++++++++
3 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt
index 75703c5..c2785d9 100644
--- a/Documentation/git-tag.txt
+++ b/Documentation/git-tag.txt
@@ -14,7 +14,7 @@ SYNOPSIS
'git tag' -d <tagname>...
'git tag' [-n[<num>]] -l [--contains <commit>] [--points-at <object>]
[--column[=<options>] | --no-column] [--create-reflog] [--sort=<key>]
- [--format=<format>] [<pattern>...]
+ [--format=<format>] [--[no-]merged [<commit>]] [<pattern>...]
'git tag' -v <tagname>...
DESCRIPTION
@@ -171,6 +171,11 @@ This option is only applicable when listing tags without annotation lines.
`%0a` to `\n` (LF). The fields are same as those in `git
for-each-ref`.
+--[no-]merged [<commit>]::
+ Only list tags whose tips are reachable, or not reachable
+ if '--no-merged' is used, from the specified commit ('HEAD'
+ if not specified).
+
CONFIGURATION
-------------
diff --git a/builtin/tag.c b/builtin/tag.c
index 69997a4..781d3e5 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -23,7 +23,7 @@ static const char * const git_tag_usage[] = {
N_("git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] <tagname> [<head>]"),
N_("git tag -d <tagname>..."),
N_("git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>]"
- "\n\t\t[<pattern>...]"),
+ "\n\t\t[--[no-]merged [<commit>]] [<pattern>...]"),
N_("git tag -v <tagname>..."),
NULL
};
@@ -353,6 +353,8 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
OPT_COLUMN(0, "column", &colopts, N_("show tag list in columns")),
OPT_CONTAINS(&filter.with_commit, N_("print only tags that contain the commit")),
OPT_WITH(&filter.with_commit, N_("print only tags that contain the commit")),
+ OPT_MERGED(&filter, N_("print only tags that are merged")),
+ OPT_NO_MERGED(&filter, N_("print only tags that are not merged")),
OPT_CALLBACK(0 , "sort", sorting_tail, N_("key"),
N_("field name to sort on"), &parse_opt_ref_sorting),
{
@@ -413,6 +415,8 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
die(_("--contains option is only allowed with -l."));
if (filter.points_at.nr)
die(_("--points-at option is only allowed with -l."));
+ if (filter.merge_commit)
+ die(_("--merged and --no-merged option are only allowed with -l"));
if (cmdmode == 'd')
return for_each_tag_name(argv, delete_tag);
if (cmdmode == 'v')
diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
index 26670e0..335396e 100755
--- a/t/t7004-tag.sh
+++ b/t/t7004-tag.sh
@@ -1535,4 +1535,31 @@ test_expect_success '--format should list tags as per format given' '
test_cmp expect actual
'
+test_expect_success 'setup --merged test tags' '
+ git tag mergetest-1 HEAD~2 &&
+ git tag mergetest-2 HEAD~1 &&
+ git tag mergetest-3 HEAD
+'
+
+test_expect_success '--merged cannot be used in non-list mode' '
+ test_must_fail git tag --merged=mergetest-2 foo
+'
+
+test_expect_success '--merged shows merged tags' '
+ cat >expect <<-\EOF &&
+ mergetest-1
+ mergetest-2
+ EOF
+ git tag -l --merged=mergetest-2 mergetest-* >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success '--no-merged show unmerged tags' '
+ cat >expect <<-\EOF &&
+ mergetest-3
+ EOF
+ git tag -l --no-merged=mergetest-2 mergetest-* >actual &&
+ test_cmp expect actual
+'
+
test_done
--
2.5.0
next prev parent reply other threads:[~2015-08-18 18:38 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-18 18:37 [PATCH v12 00/13] port tag.c to use ref-filter.c APIs Karthik Nayak
2015-08-18 18:37 ` [PATCH v12 01/13] ref-filter: move `struct atom_value` to ref-filter.c Karthik Nayak
2015-08-19 14:56 ` Matthieu Moy
2015-08-19 15:29 ` Karthik Nayak
2015-08-18 18:37 ` [PATCH v12 02/13] ref-filter: introduce ref_formatting_state Karthik Nayak
2015-08-18 18:37 ` [PATCH v12 03/13] ref-filter: introduce the ref_formatting_state stack machinery Karthik Nayak
2015-08-19 14:56 ` Matthieu Moy
2015-08-19 15:39 ` Karthik Nayak
2015-08-19 15:44 ` Matthieu Moy
2015-08-19 15:54 ` Karthik Nayak
2015-08-19 16:10 ` Karthik Nayak
2015-08-20 7:29 ` Matthieu Moy
2015-08-20 10:29 ` Karthik Nayak
2015-08-20 16:47 ` Junio C Hamano
2015-08-20 17:19 ` Matthieu Moy
2015-08-20 18:29 ` Junio C Hamano
2015-08-19 18:52 ` Junio C Hamano
2015-08-20 10:31 ` Karthik Nayak
2015-08-20 16:51 ` Junio C Hamano
2015-08-18 18:37 ` [PATCH v12 04/13] utf8: add function to align a string into given strbuf Karthik Nayak
2015-08-18 18:37 ` [PATCH v12 05/13] ref-filter: implement an `align` atom Karthik Nayak
2015-08-18 19:28 ` Karthik Nayak
2015-08-20 20:23 ` Eric Sunshine
2015-08-21 1:55 ` Karthik Nayak
2015-08-18 18:37 ` [PATCH v12 06/13] ref-filter: add option to filter out tags, branches and remotes Karthik Nayak
2015-08-18 18:37 ` [PATCH v12 07/13] ref-filter: support printing N lines from tag annotation Karthik Nayak
2015-08-18 18:37 ` [PATCH v12 08/13] ref-filter: add support to sort by version Karthik Nayak
2015-08-18 18:37 ` [PATCH v12 09/13] ref-filter: add option to match literal pattern Karthik Nayak
2015-08-18 18:37 ` [PATCH v12 10/13] tag.c: use 'ref-filter' data structures Karthik Nayak
2015-08-19 14:56 ` Matthieu Moy
2015-08-19 15:51 ` Karthik Nayak
2015-08-18 18:37 ` [PATCH v12 11/13] tag.c: use 'ref-filter' APIs Karthik Nayak
2015-08-18 18:37 ` [PATCH v12 12/13] tag.c: implement '--format' option Karthik Nayak
2015-08-19 14:53 ` Matthieu Moy
2015-08-20 15:50 ` Karthik Nayak
2015-08-18 18:37 ` Karthik Nayak [this message]
2015-08-18 19:18 ` [PATCH v12 00/13] port tag.c to use ref-filter.c APIs Eric Sunshine
2015-08-18 19:25 ` Karthik Nayak
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=1439923052-7373-14-git-send-email-Karthik.188@gmail.com \
--to=karthik.188@gmail.com \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=christian.couder@gmail.com \
--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).