for-each-ref: add '--contains' option

Add the '--contains' option provided by 'ref-filter'. The '--contains'
option lists only refs which contain the mentioned commit (HEAD if no
commit is explicitly given).

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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Karthik Nayak
2015-07-07 21:36:17 +05:30
committed by Junio C Hamano
parent ee2bd06b0f
commit 4a71109aa4
3 changed files with 22 additions and 0 deletions

View File

@ -11,6 +11,7 @@ SYNOPSIS
'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl] 'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl]
[(--sort=<key>)...] [--format=<format>] [<pattern>...] [(--sort=<key>)...] [--format=<format>] [<pattern>...]
[--points-at <object>] [(--merged | --no-merged) [<object>]] [--points-at <object>] [(--merged | --no-merged) [<object>]]
[--contains [<object>]]
DESCRIPTION DESCRIPTION
----------- -----------
@ -74,6 +75,10 @@ OPTIONS
Only list refs whose tips are not reachable from the Only list refs whose tips are not reachable from the
specified commit (HEAD if not specified). specified commit (HEAD if not specified).
--contains [<object>]::
Only list tags which contain the specified commit (HEAD if not
specified).
FIELD NAMES FIELD NAMES
----------- -----------

View File

@ -9,6 +9,7 @@ static char const * const for_each_ref_usage[] = {
N_("git for-each-ref [<options>] [<pattern>]"), N_("git for-each-ref [<options>] [<pattern>]"),
N_("git for-each-ref [--points-at <object>]"), N_("git for-each-ref [--points-at <object>]"),
N_("git for-each-ref [(--merged | --no-merged) [<object>]]"), N_("git for-each-ref [(--merged | --no-merged) [<object>]]"),
N_("git for-each-ref [--contains [<object>]]"),
NULL NULL
}; };
@ -41,6 +42,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
parse_opt_object_name), parse_opt_object_name),
OPT_MERGED(&filter, N_("print only refs that are merged")), OPT_MERGED(&filter, N_("print only refs that are merged")),
OPT_NO_MERGED(&filter, N_("print only refs that are not merged")), OPT_NO_MERGED(&filter, N_("print only refs that are not merged")),
OPT_CONTAINS(&filter.with_commit, N_("print only refs which contain the commit")),
OPT_END(), OPT_END(),
}; };

View File

@ -66,4 +66,19 @@ test_expect_success 'filtering with --no-merged' '
test_cmp expect actual test_cmp expect actual
' '
test_expect_success 'filtering with --contains' '
cat >expect <<-\EOF &&
refs/heads/master
refs/heads/side
refs/odd/spot
refs/tags/double-tag
refs/tags/four
refs/tags/signed-tag
refs/tags/three
refs/tags/two
EOF
git for-each-ref --format="%(refname)" --contains=two >actual &&
test_cmp expect actual
'
test_done test_done