All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Karthik Nayak <karthik.188@gmail.com>
Cc: git@vger.kernel.org, christian.couder@gmail.com,
	Matthieu.Moy@grenoble-inp.fr,
	"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
	"Michael Haggerty" <mhagger@alum.mit.edu>
Subject: Re: [PATCH v2 01/10] ref-filter: add %(refname:shortalign=X) option
Date: Fri, 10 Jul 2015 09:20:21 -0700	[thread overview]
Message-ID: <xmqqk2u8kmre.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <1436437671-25600-1-git-send-email-karthik.188@gmail.com> (Karthik Nayak's message of "Thu, 9 Jul 2015 15:57:42 +0530")

Karthik Nayak <karthik.188@gmail.com> writes:

> Add support for %(refname:shortalign=X) where X is a number.
> This will print a shortened refname aligned to the left
> followed by spaces for a total length of X characters.
> If X is less than the shortened refname size, the entire
> shortened refname is printed.
>
> 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>
> ---
>  ref-filter.c | 19 ++++++++++++++++++-
>  1 file changed, 18 insertions(+), 1 deletion(-)

This may be enough to support the various existing formats that are
offered by "git branch" and/or "git tag", but I do not think if this
is the right approach in the longer term, or if we are painting
ourselves in a corner we cannot cleanly get out of later [*1*].
Will the "refname" stay to be the only thing that may want alignment
padding appended in the future?  Will it stay true that we want to
align only to the left?  Etc., etc.

Cc'ed Duy as %< in the pretty-format was his invention at around
a5752342 (pretty: support padding placeholders, %< %> and %><,
2013-04-19).

> diff --git a/ref-filter.c b/ref-filter.c
> index dd0709d..3098497 100644
> --- a/ref-filter.c
> +++ b/ref-filter.c
> @@ -10,6 +10,7 @@
>  #include "quote.h"
>  #include "ref-filter.h"
>  #include "revision.h"
> +#include "utf8.h"
>  
>  typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type;
>  
> @@ -695,7 +696,23 @@ static void populate_value(struct ref_array_item *ref)
>  			int num_ours, num_theirs;
>  
>  			formatp++;
> -			if (!strcmp(formatp, "short"))
> +			if (starts_with(formatp, "shortalign=")) {

When adding a new thing to an existing list, we prefer to append it
at the end of the list, if there is no other reason not to do so
(e.g. "the existing list is sorted in this order, and the new
location was chosen to fit the new item to honor the existing
ordering rule" is a valid reason to put it at the beginning, if the
existing sorting rule dictates that the new thing must come at the
beginning).

> +				const char *valp, *short_refname = NULL;
> +				int val, len;
> +
> +				skip_prefix(formatp, "shortalign=", &valp);
> +				val = atoi(valp);

In newer code, we would want to avoid atoi() so that "foo:shortalign=1z"
that is a typo of "12" can be caught as an error.  Either strtol_i()
or strtoul_ui() may be better (we would need to adjust it further
when Michael decides to resurrect his numparse thing that has been
in the stalled bin for quite a while, though).

> +				refname = short_refname = shorten_unambiguous_ref(refname,
> +										  warn_ambiguous_refs);
> +				len = utf8_strwidth(refname);
> +				if (val > len) {
> +					struct strbuf buf = STRBUF_INIT;
> +					strbuf_addstr(&buf, refname);
> +					strbuf_addchars(&buf, ' ', val - len);
> +					free((char *)short_refname);
> +					refname = strbuf_detach(&buf, NULL);
> +				}

What should happen when the display column width of the string is
wider?  If a user wants to align the refs that are usually usually
short start the next thing at the 8th column, which should she use?

    "%(refname:shorta=7) %(next item)"
    "%(refname:shorta=8)%(next item)"

> +			} else if (!strcmp(formatp, "short"))
>  				refname = shorten_unambiguous_ref(refname,
>  						      warn_ambiguous_refs);
>  			else if (!strcmp(formatp, "track") &&

  parent reply	other threads:[~2015-07-10 16:20 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-09 10:27 [PATCH v2 00/10] Port tag.c to use ref-filter APIs Karthik Nayak
2015-07-09 10:27 ` [PATCH v2 01/10] ref-filter: add %(refname:shortalign=X) option Karthik Nayak
2015-07-09 10:27   ` [PATCH v2 02/10] ref-filter: add option to filter only tags Karthik Nayak
2015-07-09 10:27   ` [PATCH v2 03/10] ref-filter: support printing N lines from tag annotation Karthik Nayak
2015-07-09 13:07     ` Matthieu Moy
2015-07-10 10:38       ` Karthik Nayak
2015-07-09 10:27   ` [PATCH v2 04/10] ref-filter: add support to sort by version Karthik Nayak
2015-07-09 13:29     ` Matthieu Moy
2015-07-10 10:52       ` Karthik Nayak
2015-07-10 11:01         ` Karthik Nayak
2015-07-10 12:18           ` Matthieu Moy
2015-07-11  5:54             ` Karthik Nayak
2015-07-09 10:27   ` [PATCH v2 05/10] ref-filter: add option to match literal pattern Karthik Nayak
2015-07-09 13:32     ` Matthieu Moy
2015-07-10 11:11       ` Karthik Nayak
2015-07-10 16:43     ` Junio C Hamano
2015-07-11  5:55       ` Karthik Nayak
2015-07-11  9:26         ` Matthieu Moy
2015-07-11 12:54           ` Karthik Nayak
2015-07-09 10:27   ` [PATCH v2 06/10] Documentation/tag: remove double occurance of "<pattern>" Karthik Nayak
2015-07-09 12:19     ` Christian Couder
2015-07-09 12:56       ` Karthik Nayak
2015-07-10 16:44       ` Junio C Hamano
2015-07-12 12:39         ` Karthik Nayak
2015-07-09 10:27   ` [PATCH v2 07/10] tag.c: use 'ref-filter' data structures Karthik Nayak
2015-07-09 10:55   ` [PATCH v2 08/10] tag.c: use 'ref-filter' APIs Karthik Nayak
2015-07-09 12:48     ` Matthieu Moy
2015-07-09 12:55       ` Karthik Nayak
2015-07-09 13:43         ` Matthieu Moy
2015-07-10  9:41           ` Karthik Nayak
2015-07-09 13:41     ` Matthieu Moy
2015-07-09 10:58   ` Karthik Nayak
2015-07-12  9:45     ` Duy Nguyen
2015-07-12 19:36       ` Karthik Nayak
2015-07-13 10:46         ` Duy Nguyen
2015-07-13 20:34           ` Karthik Nayak
2015-07-09 10:59   ` [PATCH v2 09/10] tag.c: implement '--format' option Karthik Nayak
2015-07-09 11:00   ` [PATCH v2 10/10] tag.c: implement '--merged' and '--no-merged' options Karthik Nayak
2015-07-09 12:58   ` [PATCH v2 01/10] ref-filter: add %(refname:shortalign=X) option Matthieu Moy
2015-07-11  6:07     ` Karthik Nayak
2015-07-11 10:20       ` Matthieu Moy
2015-07-10 16:20   ` Junio C Hamano [this message]
2015-07-11 12:05     ` Karthik Nayak
2015-07-12  1:47       ` Duy Nguyen
2015-07-12  8:59         ` Duy Nguyen
2015-07-12 19:56           ` Karthik Nayak
2015-07-13 10:51             ` Duy Nguyen
2015-07-13 20:36               ` 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=xmqqk2u8kmre.fsf@gitster.dls.corp.google.com \
    --to=gitster@pobox.com \
    --cc=Matthieu.Moy@grenoble-inp.fr \
    --cc=christian.couder@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=karthik.188@gmail.com \
    --cc=mhagger@alum.mit.edu \
    --cc=pclouds@gmail.com \
    /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.