Show 135 quoted lines
> Signed-off-by: Karthik Nayak <Karthik.188@gmail.com>
> ---
> Documentation/git-for-each-ref.txt | 27 ++++++++++++++-------------
> ref-filter.c | 26 +++++++++++++++-----------
> t/t6300-for-each-ref.sh | 2 ++
> 3 files changed, 31 insertions(+), 24 deletions(-)
>
> diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
> index a669a32..600b703 100644
> --- a/Documentation/git-for-each-ref.txt
> +++ b/Documentation/git-for-each-ref.txt
> @@ -114,21 +114,22 @@ objectname::
>
> upstream::
> The name of a local ref which can be considered ``upstream''
> - from the displayed ref. Respects `:short` in the same way as
> - `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). `:track` also prints "[gone]" whenever
> - unknown upstream ref is encountered. 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.
> + from the displayed ref. Respects `:short` and `:strip` in the
> + same way as `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). `:track` also prints "[gone]"
> + whenever unknown upstream ref is encountered. 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
> - for the displayed ref. Respects `:short`, `:track`, and
> - `:trackshort` options as `upstream` does. Produces an empty
> - string if no `@{push}` ref is configured.
> + The name of a local ref which represents the `@{push}`
> + location for the displayed ref. Respects `:short`, `:strip`,
> + `:track`, and `:trackshort` options as `upstream`
> + does. Produces an empty string if no `@{push}` ref is
> + configured.
>
> HEAD::
> '*' if HEAD matches current ref (the checked out branch), ' '
> diff --git a/ref-filter.c b/ref-filter.c
> index f1d27b5..7d3d3a6 100644
> --- a/ref-filter.c
> +++ b/ref-filter.c
> @@ -52,7 +52,8 @@ static struct used_atom {
> char color[COLOR_MAXLEN];
> struct align align;
> struct {
> - enum { RR_NORMAL, RR_SHORTEN, RR_TRACK, RR_TRACKSHORT } option;
> + enum { RR_REF, RR_TRACK, RR_TRACKSHORT } option;
> + struct refname_atom refname;
> unsigned int nobracket: 1;
> } remote_ref;
> struct {
> @@ -102,7 +103,9 @@ static void remote_ref_atom_parser(struct used_atom *atom, const char *arg)
> int i;
>
> if (!arg) {
> - atom->u.remote_ref.option = RR_NORMAL;
> + atom->u.remote_ref.option = RR_REF;
> + refname_atom_parser_internal(&atom->u.remote_ref.refname,
> + arg, atom->name);
> return;
> }
>
> @@ -112,16 +115,17 @@ static void remote_ref_atom_parser(struct used_atom *atom, const char *arg)
> for (i = 0; i < params.nr; i++) {
> const char *s = params.items[i].string;
>
> - if (!strcmp(s, "short"))
> - atom->u.remote_ref.option = RR_SHORTEN;
> - else if (!strcmp(s, "track"))
> + if (!strcmp(s, "track"))
> atom->u.remote_ref.option = RR_TRACK;
> else if (!strcmp(s, "trackshort"))
> atom->u.remote_ref.option = RR_TRACKSHORT;
> else if (!strcmp(s, "nobracket"))
> atom->u.remote_ref.nobracket = 1;
> - else
> - die(_("unrecognized format: %%(%s)"), atom->name);
> + else {
> + atom->u.remote_ref.option = RR_REF;
> + refname_atom_parser_internal(&atom->u.remote_ref.refname,
> + arg, atom->name);
> + }
> }
>
> string_list_clear(¶ms, 0);
> @@ -1100,8 +1104,8 @@ static void fill_remote_ref_details(struct used_atom *atom, const char *refname,
> struct branch *branch, const char **s)
> {
> int num_ours, num_theirs;
> - if (atom->u.remote_ref.option == RR_SHORTEN)
> - *s = shorten_unambiguous_ref(refname, warn_ambiguous_refs);
> + if (atom->u.remote_ref.option == RR_REF)
> + *s = show_ref(&atom->u.remote_ref.refname, refname);
> else if (atom->u.remote_ref.option == RR_TRACK) {
> if (stat_tracking_info(branch, &num_ours,
> &num_theirs, NULL)) {
> @@ -1133,8 +1137,8 @@ static void fill_remote_ref_details(struct used_atom *atom, const char *refname,
> *s = ">";
> else
> *s = "<>";
> - } else /* RR_NORMAL */
> - *s = refname;
> + } else
> + die("BUG: unhandled RR_* enum");
> }
>
> char *get_head_description(void)
> diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh
> index 3d28234..7ca0a12 100755
> --- a/t/t6300-for-each-ref.sh
> +++ b/t/t6300-for-each-ref.sh
> @@ -55,8 +55,10 @@ test_atom head refname:strip=1 heads/master
> test_atom head refname:strip=2 master
> test_atom head upstream refs/remotes/origin/master
> test_atom head upstream:short origin/master
> +test_atom head upstream:strip=2 origin/master
> test_atom head push refs/remotes/myfork/master
> test_atom head push:short myfork/master
> +test_atom head push:strip=1 remotes/myfork/master
> test_atom head objecttype commit
> test_atom head objectsize 171
> test_atom head objectname $(git rev-parse refs/heads/master)
> --
> 2.10.2
>