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

[PATCH v10 14/20] ref-filter: Do not abruptly die when using the 'lstrip=<N>' option

From
Karthik Nayak <karthik.188@gmail.com>
Date
Jan 10, 2017, 08:49 UTC
Message-ID
<20170110084953.15890-15-Karthik.188@gmail.com>
In-Reply-To
<20170110084953.15890-1-Karthik.188@gmail.com>

Currently when we use the 'lstrip=<N>' option, if 'N' is greater than the number of components available in the refname, we abruptly end program execution by calling die().

This behavior is undesired since a single refname with few components could end program execution. To avoid this, return an empty string whenever the value 'N' is greater than the number of components available, instead of calling die().

Signed-off-by: Karthik Nayak <Karthik.188@gmail.com>
---
 Documentation/git-for-each-ref.txt | 3 +--
 ref-filter.c                       | 3 +--
 t/t6300-for-each-ref.sh            | 4 ----
 3 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index b0d94deea..04ffc3552 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -98,8 +98,7 @@ 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 a displayed ref has fewer
-	components than `<N>`, the command aborts with an error.
+	`<N>` must be a positive integer.
 
 objecttype::
 	The type of the object (`blob`, `tree`, `commit`, `tag`).
diff --git a/ref-filter.c b/ref-filter.c
index e0015c60f..76553ebc4 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -1099,8 +1099,7 @@ static const char *lstrip_ref_components(const char *refname, unsigned int len)
 	while (remaining) {
 		switch (*start++) {
 		case '\0':
-			die(_("ref '%s' does not have %ud components to :lstrip"),
-			    refname, len);
+			return "";
 		case '/':
 			remaining--;
 			break;
diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh
index 5eb013ca2..d3d1a97db 100755
--- a/t/t6300-for-each-ref.sh
+++ b/t/t6300-for-each-ref.sh
@@ -147,10 +147,6 @@ test_expect_success 'arguments to :lstrip must be positive integers' '
 	test_must_fail git for-each-ref --format="%(refname:lstrip=foo)"
 '
 
-test_expect_success 'stripping refnames too far gives an error' '
-	test_must_fail git for-each-ref --format="%(refname:lstrip=3)"
-'
-
 test_expect_success 'Check format specifiers are ignored in naming date atoms' '
 	git for-each-ref --format="%(authordate)" refs/heads &&
 	git for-each-ref --format="%(authordate:default) %(authordate)" refs/heads &&
-- 
2.11.0
Previous: Karthik NayakNext: Karthik Nayak
Message 24 of 28 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, Jan 10, 2017
  2. 01/20 ref-filter: implement %(if), %(then), and %(else) atomsKarthik Nayak, Jan 10, 2017
  3. 03/20 ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)Karthik Nayak, Jan 10, 2017
  4. Junio C HamanoJan 10, 2017
  5. Karthik NayakJan 14, 2017
  6. 04/20 ref-filter: modify "%(objectname:short)" to take lengthKarthik Nayak, Jan 10, 2017
  7. 02/20 ref-filter: include reference to 'used_atom' within 'atom_value'Karthik Nayak, Jan 10, 2017
  8. 07/20 ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreamsKarthik Nayak, Jan 10, 2017
  9. 06/20 ref-filter: introduce format_ref_array_item()Karthik Nayak, Jan 10, 2017
  10. 05/20 ref-filter: move get_head_description() from branch.cKarthik Nayak, Jan 10, 2017
  11. 08/20 ref-filter: add support for %(upstream:track,nobracket)Karthik Nayak, Jan 10, 2017
  12. 10/20 ref-filter: introduce refname_atom_parser_internal()Karthik Nayak, Jan 10, 2017
  13. 11/20 ref-filter: introduce refname_atom_parser()Karthik Nayak, Jan 10, 2017
  14. 09/20 ref-filter: make "%(symref)" atom work with the ':short' modifierKarthik Nayak, Jan 10, 2017
  15. 15/20 ref-filter: modify the 'lstrip=<N>' option to work with negative '<N>'Karthik Nayak, Jan 10, 2017
  16. 20/20 branch: implement '--format' optionKarthik Nayak, Jan 10, 2017
  17. 17/20 ref-filter: allow porcelain to translate messages in the outputKarthik Nayak, Jan 10, 2017
  18. 16/20 ref-filter: add an 'rstrip=<N>' option to atoms which deal with refnamesKarthik Nayak, Jan 10, 2017
  19. 19/20 branch: use ref-filter printing APIsKarthik Nayak, Jan 10, 2017
  20. Jacob KellerJan 11, 2017
  21. Karthik NayakJan 14, 2017
  22. Jacob KellerJan 15, 2017
  23. 18/20 branch, tag: use porcelain outputKarthik Nayak, Jan 10, 2017
  24. 14/20 ref-filter: Do not abruptly die when using the 'lstrip=<N>' optionKarthik Nayak, Jan 10, 2017
  25. 12/20 ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()Karthik Nayak, Jan 10, 2017
  26. 13/20 ref-filter: rename the 'strip' option to 'lstrip'Karthik Nayak, Jan 10, 2017
  27. Junio C HamanoJan 10, 2017
  28. Karthik NayakJan 14, 2017

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.