git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v9 15/20] ref-filter: modify the 'lstrip=<N>' option to work with negative '<N>'

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 27, 2016, 21:11 UTC
Message-ID
<xmqqo9zx6phw.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20161227162357.28212-16-Karthik.188@gmail.com>
Karthik Nayak <karthik.188@gmail.com> writes:
> Currently the 'lstrip=<N>' option only takes a positive value '<N>'
> and strips '<N>' slash-separated path components from the left. Modify
> the 'lstrip' option to also take a negative number '<N>' which would
> only _leave_ behind 'N' slash-separated path components from the left.

"would only leave behind N components from the left" sounds as if the result is A/B, when you are given A/B/C/D/E and asked to lstrip:-2. Given these two tests added by the patch ...

> +test_atom head refname:lstrip=-1 master
> +test_atom head refname:lstrip=-2 heads/master

... I somehow think that is not what you wanted to say. Instead, you strip from the left as many as necessary and leave -N components that appear at the right-most end, no?

Show 9 quoted lines
> --- a/Documentation/git-for-each-ref.txt
> +++ b/Documentation/git-for-each-ref.txt
> @@ -98,7 +98,8 @@ refname::
>  	abbreviation mode. If `lstrip=<N>` is appended, strips `<N>`
>  	slash-separated path components from the front of the refname
>  	(e.g., `%(refname:lstrip=2)` turns `refs/tags/foo` into `foo`.
> -	`<N>` must be a positive integer.
> +	if `<N>` is a negative number, then only `<N>` path components
> +	are left behind.

I think positive <N> is so obvious not to require an example but it is good that you have one. The negative <N> case needs illustration more than the positive case. Perhaps something like:

    (e.g. %(refname:lstrip=-1) strips components of refs/tags/frotz 
    from the left to leave only one component, i.e. 'frotz').

Would %(refname:lstrip=-4) attempt to strip components of refs/tags/frotz from the left to leave only four components, and because the original does not have that many components, it ends with refs/tags/frotz?

I am debating myself if we need something like "When the ref does not have enough components, the result becomes an empty string if stripping with positive <N>, or it becomes the full refname if stripping with negative <N>. Neither is an error." is necessary here. Or is it too obvious?

Previous: Karthik NayakNext: Jacob Keller
Message 25 of 34 in “port branch.c to use ref-filter's printing options”
  1. 00/20 port branch.c to use ref-filter's printing optionsKarthik Nayak, Dec 27, 2016
  2. 01/20 ref-filter: implement %(if), %(then), and %(else) atomsKarthik Nayak, Dec 27, 2016
  3. Junio C HamanoDec 27, 2016
  4. Karthik NayakDec 28, 2016
  5. 03/20 ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)Karthik Nayak, Dec 27, 2016
  6. Junio C HamanoDec 27, 2016
  7. Karthik NayakDec 28, 2016
  8. 02/20 ref-filter: include reference to 'used_atom' within 'atom_value'Karthik Nayak, Dec 27, 2016
  9. Junio C HamanoDec 27, 2016
  10. Karthik NayakDec 28, 2016
  11. 05/20 ref-filter: move get_head_description() from branch.cKarthik Nayak, Dec 27, 2016
  12. 04/20 ref-filter: modify "%(objectname:short)" to take lengthKarthik Nayak, Dec 27, 2016
  13. 06/20 ref-filter: introduce format_ref_array_item()Karthik Nayak, Dec 27, 2016
  14. 07/20 ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreamsKarthik Nayak, Dec 27, 2016
  15. 08/20 ref-filter: add support for %(upstream:track,nobracket)Karthik Nayak, Dec 27, 2016
  16. 10/20 ref-filter: introduce refname_atom_parser_internal()Karthik Nayak, Dec 27, 2016
  17. 09/20 ref-filter: make "%(symref)" atom work with the ':short' modifierKarthik Nayak, Dec 27, 2016
  18. 12/20 ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()Karthik Nayak, Dec 27, 2016
  19. 11/20 ref-filter: introduce refname_atom_parser()Karthik Nayak, Dec 27, 2016
  20. Junio C HamanoDec 27, 2016
  21. Karthik NayakDec 28, 2016
  22. 14/20 ref-filter: Do not abruptly die when using the 'lstrip=<N>' optionKarthik Nayak, Dec 27, 2016
  23. 13/20 ref-filter: rename the 'strip' option to 'lstrip'Karthik Nayak, Dec 27, 2016
  24. 15/20 ref-filter: modify the 'lstrip=<N>' option to work with negative '<N>'Karthik Nayak, Dec 27, 2016
  25. Junio C HamanoDec 27, 2016
  26. Jacob KellerDec 28, 2016
  27. Karthik NayakDec 28, 2016
  28. 16/20 ref-filter: add an 'rstrip=<N>' option to atoms which deal with refnamesKarthik Nayak, Dec 27, 2016
  29. 17/20 ref-filter: allow porcelain to translate messages in the outputKarthik Nayak, Dec 27, 2016
  30. 18/20 branch, tag: use porcelain outputKarthik Nayak, Dec 27, 2016
  31. 19/20 branch: use ref-filter printing APIsKarthik Nayak, Dec 27, 2016
  32. Junio C HamanoDec 27, 2016
  33. Karthik NayakDec 28, 2016
  34. 20/20 branch: implement '--format' optionKarthik Nayak, Dec 27, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.