ref-filter: Do not abruptly die when using the 'lstrip=<N>' option

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> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Karthik Nayak committed Jan 10, 2017 at 14:19 UTC 3a42980f9e5ecc2b74c538109d4007c630881f1c
3 files changed +2 -8
Documentation/git-for-each-ref.txt
+1 -2
@@ -98,8 +98,7 @@ refname::
98 abbreviation mode. If `lstrip=<N>` is appended, strips `<N>`
99 slash-separated path components from the front of the refname
100 (e.g., `%(refname:lstrip=2)` turns `refs/tags/foo` into `foo`.
101 - `<N>` must be a positive integer. If a displayed ref has fewer
102 - components than `<N>`, the command aborts with an error.
101 + `<N>` must be a positive integer.
102
103 objecttype::
104 The type of the object (`blob`, `tree`, `commit`, `tag`).
ref-filter.c
+1 -2
@@ -1099,8 +1099,7 @@ static const char *lstrip_ref_components(const char *refname, unsigned int len)
1099 while (remaining) {
1100 switch (*start++) {
1101 case '\0':
1102 - die(_("ref '%s' does not have %ud components to :lstrip"),
1103 - refname, len);
1102 + return "";
1103 case '/':
1104 remaining--;
1105 break;
t/t6300-for-each-ref.sh
-4
@@ -147,10 +147,6 @@ test_expect_success 'arguments to :lstrip must be positive integers' '
147 test_must_fail git for-each-ref --format="%(refname:lstrip=foo)"
148 '
149
150 -test_expect_success 'stripping refnames too far gives an error' '
151 - test_must_fail git for-each-ref --format="%(refname:lstrip=3)"
152 -'
153 -
150 test_expect_success 'Check format specifiers are ignored in naming date atoms' '
151 git for-each-ref --format="%(authordate)" refs/heads &&
152 git for-each-ref --format="%(authordate:default) %(authordate)" refs/heads &&