Thread (12 messages) flat view 12 messages, 1 author, 2016-06-15

Re: [PATCH v2 08/10] ref-filter: add support for %(upstream:track,nobracket)

From: Karthik Nayak <hidden>
Date: 2016-06-15 23:06:51

On Thu, Oct 8, 2015 at 2:48 PM, Karthik Nayak [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Add support for %(upstream:track,nobracket) which will print the
tracking information without the brackets (i.e. "ahead N, behind M").

Add test and documentation for the same.
---
 Documentation/git-for-each-ref.txt |  6 ++++--
 ref-filter.c                       | 28 +++++++++++++++++++++++-----
 t/t6300-for-each-ref.sh            |  9 +++++++++
 3 files changed, 36 insertions(+), 7 deletions(-)
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index c713ec0..a38cbf6 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -114,8 +114,10 @@ upstream::
        `refname` above.  Additionally respects `:track` to show
        "[ahead N, behind M]" and `:trackshort` to show the terse
        version: ">" (ahead), "<" (behind), "<>" (ahead and behind),
-       or "=" (in sync).  Has no effect if the ref does not have
-       tracking information associated with it.
+       or "=" (in sync).  Append `:track,nobracket` to show tracking
+       information without brackets (i.e "ahead N, behind M").  Has
+       no effect if the ref does not have tracking information
+       associated with it.

 push::
        The name of a local ref which represents the `@{push}` location
diff --git a/ref-filter.c b/ref-filter.c
index 6a38089..6044eb0 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -1112,27 +1112,45 @@ static void populate_value(struct ref_array_item *ref)
                        if (!strcmp(formatp, "short"))
                                refname = shorten_unambiguous_ref(refname,
                                                      warn_ambiguous_refs);
-                       else if (!strcmp(formatp, "track") &&
+                       else if (skip_prefix(formatp, "track", &valp) &&
+                                strcmp(formatp, "trackshort") &&
                                 (starts_with(name, "upstream") ||
                                  starts_with(name, "push"))) {
If you see here, we detect "track" first for
%(upstream:track,nobracket) so although
the idea was to use something similar to %(align:...) I don't see a
good way of going
about this. If we want %(upstream:nobracket,track) to be supported then, I think
we'll have to change this whole layout and have the detection done up where we
locat "upstream" / "push", what would be a nice way to go around this?

What I could think of:
1. Do the cleanup that Junio and Matthieu suggested, where we
basically parse the
atoms and store them into a used_atom struct. I could either work on
those patches
before this and then rebase this on top.
2. Let this be and come back on it when implementing the above series.
After reading Matthieu's and Junio's discussion, I lean towards the latter.
quoted hunk ↗ jump to hunk
                                char buf[40];
+                               unsigned int nobracket = 0;
+
+                               if (!strcmp(valp, ",nobracket"))
+                                       nobracket = 1;

                                if (stat_tracking_info(branch, &num_ours,
                                                       &num_theirs, NULL)) {
-                                       v->s = "[gone]";
+                                       if (nobracket)
+                                               v->s = "gone";
+                                       else
+                                               v->s = "[gone]";
                                        continue;
                                }

                                if (!num_ours && !num_theirs)
                                        v->s = "";
                                else if (!num_ours) {
-                                       sprintf(buf, "[behind %d]", num_theirs);
+                                       if (nobracket)
+                                               sprintf(buf, "behind %d", num_theirs);
+                                       else
+                                               sprintf(buf, "[behind %d]", num_theirs);
                                        v->s = xstrdup(buf);
                                } else if (!num_theirs) {
-                                       sprintf(buf, "[ahead %d]", num_ours);
+                                       if (nobracket)
+                                               sprintf(buf, "ahead %d", num_ours);
+                                       else
+                                               sprintf(buf, "[ahead %d]", num_ours);
                                        v->s = xstrdup(buf);
                                } else {
-                                       sprintf(buf, "[ahead %d, behind %d]",
+                                       if (nobracket)
+                                               sprintf(buf, "ahead %d, behind %d",
+                                                       num_ours, num_theirs);
+                                       else
+                                               sprintf(buf, "[ahead %d, behind %d]",
                                                num_ours, num_theirs);
                                        v->s = xstrdup(buf);
                                }
diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh
index 4f620bf..7ab8bf8 100755
--- a/t/t6300-for-each-ref.sh
+++ b/t/t6300-for-each-ref.sh
@@ -344,6 +344,15 @@ test_expect_success 'Check upstream:track format' '
 '

 cat >expected <<EOF
+ahead 1
+EOF
+
+test_expect_success 'Check upstream:track,nobracket format' '
+       git for-each-ref --format="%(upstream:track,nobracket)" refs/heads >actual &&
+       test_cmp expected actual
+'
+
+cat >expected <<EOF
 >
 EOF

--
2.6.0


-- 
Regards,
Karthik Nayak
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help