git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v8 07/11] for-each-ref: add '--merged' and '--no-merged' options

From
Karthik Nayak <karthik.188@gmail.com>
Date
Jul 7, 2015, 16:06 UTC
Message-ID
<1436285177-12279-7-git-send-email-karthik.188@gmail.com>
In-Reply-To
<1436285177-12279-1-git-send-email-karthik.188@gmail.com>

Add the '--merged' and '--no-merged' options provided by 'ref-filter'. The '--merged' option lets the user to only list refs merged into the named commit. The '--no-merged' option lets the user to only list refs not merged into the named commit.

Add documentation and tests for the same.
Based-on-patch-by: Jeff King <peff@peff.net>
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-for-each-ref.txt | 10 +++++++++-
 builtin/for-each-ref.c             |  3 +++
 t/t6302-for-each-ref-filter.sh     | 23 +++++++++++++++++++++++
 3 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index ff0283b..2842195 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -10,7 +10,7 @@ SYNOPSIS
 [verse]
 'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl]
 		   [(--sort=<key>)...] [--format=<format>] [<pattern>...]
-		   [--points-at <object>]
+		   [--points-at <object>] [(--merged | --no-merged) [<object>]]
 
 DESCRIPTION
 -----------
@@ -66,6 +66,14 @@ OPTIONS
 --points-at <object>::
 	Only list refs which points at the given object.
 
+--merged [<object>]::
+	Only list refs whose tips are reachable from the
+	specified commit (HEAD if not specified).
+
+--no-merged [<object>]::
+	Only list refs whose tips are not reachable from the
+	specified commit (HEAD if not specified).
+
 FIELD NAMES
 -----------
 
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index ae5419e..7521850 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -8,6 +8,7 @@
 static char const * const for_each_ref_usage[] = {
 	N_("git for-each-ref [<options>] [<pattern>]"),
 	N_("git for-each-ref [--points-at <object>]"),
+	N_("git for-each-ref [(--merged | --no-merged) [<object>]]"),
 	NULL
 };
 
@@ -38,6 +39,8 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
 		OPT_CALLBACK(0, "points-at", &filter.points_at,
 			     N_("object"), N_("print only refs which points at the given object"),
 			     parse_opt_object_name),
+		OPT_MERGED(&filter, N_("print only refs that are merged")),
+		OPT_NO_MERGED(&filter, N_("print only refs that are not merged")),
 		OPT_END(),
 	};
 
diff --git a/t/t6302-for-each-ref-filter.sh b/t/t6302-for-each-ref-filter.sh
index 457991f..73dbf53 100755
--- a/t/t6302-for-each-ref-filter.sh
+++ b/t/t6302-for-each-ref-filter.sh
@@ -37,4 +37,27 @@ test_expect_success 'check signed tags with --points-at' '
 	test_cmp expect actual
 '
 
+test_expect_success 'filtering with --merged' '
+	cat >expect <<-\EOF &&
+	refs/heads/master
+	refs/odd/spot
+	refs/tags/one
+	refs/tags/three
+	refs/tags/two
+	EOF
+	git for-each-ref --format="%(refname)" --merged=master >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'filtering with --no-merged' '
+	cat >expect <<-\EOF &&
+	refs/heads/side
+	refs/tags/double-tag
+	refs/tags/four
+	refs/tags/signed-tag
+	EOF
+	git for-each-ref --format="%(refname)" --no-merged=master >actual &&
+	test_cmp expect actual
+'
+
 test_done
-- 
2.4.5
Previous: Karthik NayakNext: Karthik Nayak
Message 8 of 18 in “add options to for-each-ref”
  1. 00/11 add options to for-each-refKarthik Nayak, Jul 7, 2015
  2. 01/11 t6302: for-each-ref tests for ref-filter APIsKarthik Nayak, Jul 7, 2015
  3. 02/11 tag: libify parse_opt_points_at()Karthik Nayak, Jul 7, 2015
  4. 03/11 ref-filter: implement '--points-at' optionKarthik Nayak, Jul 7, 2015
  5. 04/11 for-each-ref: add '--points-at' optionKarthik Nayak, Jul 7, 2015
  6. 05/11 ref-filter: add parse_opt_merge_filter()Karthik Nayak, Jul 7, 2015
  7. 06/11 ref-filter: implement '--merged' and '--no-merged' optionsKarthik Nayak, Jul 7, 2015
  8. 07/11 for-each-ref: add '--merged' and '--no-merged' optionsKarthik Nayak, Jul 7, 2015
  9. 08/11 parse-option: rename parse_opt_with_commit()Karthik Nayak, Jul 7, 2015
  10. 09/11 parse-options.h: add macros for '--contains' optionKarthik Nayak, Jul 7, 2015
  11. 10/11 ref-filter: implement '--contains' optionKarthik Nayak, Jul 7, 2015
  12. 11/11 for-each-ref: add '--contains' optionKarthik Nayak, Jul 7, 2015
  13. Torsten BögershausenJul 8, 2015
  14. Matthieu MoyJul 8, 2015
  15. Karthik NayakJul 8, 2015
  16. Matthieu MoyJul 8, 2015
  17. Karthik NayakJul 9, 2015
  18. 01/11 t6302: for-each-ref tests for ref-filter APIsKarthik Nayak, Jul 9, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.