From: Karthik Nayak <karthik.188@gmail.com>
To: git@vger.kernel.org
Cc: christian.couder@gmail.com, Matthieu.Moy@grenoble-inp.fr,
Karthik Nayak <karthik.188@gmail.com>
Subject: [PATCH v7 04/11] for-each-ref: add '--points-at' option
Date: Thu, 2 Jul 2015 20:51:03 +0530 [thread overview]
Message-ID: <1435850470-5175-4-git-send-email-karthik.188@gmail.com> (raw)
In-Reply-To: <1435850470-5175-1-git-send-email-karthik.188@gmail.com>
Add the '--points-at' option provided by 'ref-filter'. The
option lets the user to list only refs which pertain to the
given object.
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 | 3 +++
builtin/for-each-ref.c | 9 +++++++--
t/t6302-for-each-ref-filter.sh | 20 ++++++++++++++++++++
3 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index 7f8d9a5..f115335 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -10,6 +10,7 @@ SYNOPSIS
[verse]
'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl]
[(--sort=<key>)...] [--format=<format>] [<pattern>...]
+ [--points-at <object>]
DESCRIPTION
-----------
@@ -62,6 +63,8 @@ OPTIONS
the specified host language. This is meant to produce
a scriptlet that can directly be `eval`ed.
+--points-at <object>::
+ Only list refs pertaining to the given object.
FIELD NAMES
-----------
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index 7919206..5b6f93a 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -7,6 +7,7 @@
static char const * const for_each_ref_usage[] = {
N_("git for-each-ref [<options>] [<pattern>]"),
+ N_("git for-each-ref [--points-at <object>]"),
NULL
};
@@ -34,9 +35,15 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
OPT_STRING( 0 , "format", &format, N_("format"), N_("format to use for the output")),
OPT_CALLBACK(0 , "sort", sorting_tail, N_("key"),
N_("field name to sort on"), &parse_opt_ref_sorting),
+ OPT_CALLBACK(0, "points-at", &filter.points_at,
+ N_("object"), N_("print only refs pertaining to the given object"),
+ parse_opt_object_name),
OPT_END(),
};
+ memset(&array, 0, sizeof(array));
+ memset(&filter, 0, sizeof(filter));
+
parse_options(argc, argv, prefix, opts, for_each_ref_usage, 0);
if (maxcount < 0) {
error("invalid --count argument: `%d'", maxcount);
@@ -55,8 +62,6 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
/* for warn_ambiguous_refs */
git_config(git_default_config, NULL);
- memset(&array, 0, sizeof(array));
- memset(&filter, 0, sizeof(filter));
filter.name_patterns = argv;
filter_refs(&array, &filter, FILTER_REFS_ALL | FILTER_REFS_INCLUDE_BROKEN);
ref_array_sort(sorting, &array);
diff --git a/t/t6302-for-each-ref-filter.sh b/t/t6302-for-each-ref-filter.sh
index 44d2f24..457991f 100755
--- a/t/t6302-for-each-ref-filter.sh
+++ b/t/t6302-for-each-ref-filter.sh
@@ -17,4 +17,24 @@ test_expect_success 'setup some history and refs' '
git update-ref refs/odd/spot master
'
+test_expect_success 'filtering with --points-at' '
+ cat >expect <<-\EOF &&
+ refs/heads/master
+ refs/odd/spot
+ refs/tags/three
+ EOF
+ git for-each-ref --format="%(refname)" --points-at=master >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'check signed tags with --points-at' '
+ sed -e "s/Z$//" >expect <<-\EOF &&
+ refs/heads/side Z
+ refs/tags/four Z
+ refs/tags/signed-tag four
+ EOF
+ git for-each-ref --format="%(refname) %(*subject)" --points-at=side >actual &&
+ test_cmp expect actual
+'
+
test_done
--
2.4.4
next prev parent reply other threads:[~2015-07-02 15:22 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-02 15:20 [PATCH v7 00/11] add options to for-each-ref Karthik Nayak
2015-07-02 15:21 ` [PATCH v7 01/11] t6302: for-each-ref tests for ref-filter APIs Karthik Nayak
2015-07-02 15:21 ` [PATCH v7 02/11] tag: libify parse_opt_points_at() Karthik Nayak
2015-07-02 15:21 ` [PATCH v7 03/11] ref-filter: implement '--points-at' option Karthik Nayak
2015-07-02 15:21 ` Karthik Nayak [this message]
2015-07-02 17:05 ` [PATCH v7 04/11] for-each-ref: add " Matthieu Moy
2015-07-05 16:01 ` Karthik Nayak
2015-07-02 15:21 ` [PATCH v7 05/11] ref-filter: add parse_opt_merge_filter() Karthik Nayak
2015-07-02 17:06 ` Matthieu Moy
2015-07-02 17:21 ` Karthik Nayak
2015-07-02 15:21 ` [PATCH v7 06/11] ref-filter: implement '--merged' and '--no-merged' options Karthik Nayak
2015-07-02 15:21 ` [PATCH v7 07/11] for-each-ref: add " Karthik Nayak
2015-07-02 15:21 ` [PATCH v7 08/11] parse-option: rename parse_opt_with_commit() Karthik Nayak
2015-07-02 15:21 ` [PATCH v7 09/11] parse-options.h: add macros for '--contains' option Karthik Nayak
2015-07-02 17:08 ` Matthieu Moy
2015-07-02 17:22 ` Karthik Nayak
2015-07-02 15:21 ` [PATCH v7 10/11] ref-filter: implement " Karthik Nayak
2015-07-02 17:12 ` Matthieu Moy
2015-07-02 17:24 ` Karthik Nayak
2015-07-02 15:21 ` [PATCH v7 11/11] for-each-ref: add " 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=1435850470-5175-4-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 \
/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.