Thread (8 messages) 8 messages, 4 authors, 2017-10-27

Re: [PATCH v2] blame: prevent error if range ends past end of file

From: Isabella Stephens <hidden>
Date: 2017-10-26 23:37:34

On 27/10/17 2:31 am, SZEDER Gábor wrote:
quoted
If the -L option is used to specify a line range in git blame, and the
end of the range is past the end of the file, at present git will fail
with a fatal error. This commit prevents such behaviour - instead the
blame is display for any existing lines within the specified range.
s/is display/is displayed/ ?
Oops.
'git log' has a very similar -L option, which errors out, too, if the
end of the line range is past the end of the file.  IMHO the
interpretation of the line range -L<start>,<end> should be kept
consistent in the two commands, and 'git log' shouldn't error out,
either.
Good suggestion. I'll submit a separate patch for git log.
quoted
Signed-off-by: Isabella Stephens <redacted>
---
 builtin/blame.c               | 4 ++--
 t/t8003-blame-corner-cases.sh | 5 +++--
 2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/builtin/blame.c b/builtin/blame.c
index 67adaef4d..b5b9db147 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -878,13 +878,13 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 				    nth_line_cb, &sb, lno, anchor,
 				    &bottom, &top, sb.path))
 			usage(blame_usage);
-		if (lno < top || ((lno || bottom) && lno < bottom))
+		if ((lno || bottom) && lno < bottom)
 			die(Q_("file %s has only %lu line",
 			       "file %s has only %lu lines",
 			       lno), path, lno);
 		if (bottom < 1)
 			bottom = 1;
-		if (top < 1)
+		if (top < 1 || lno < top)
 			top = lno;
 		bottom--;
 		range_set_append_unsafe(&ranges, bottom, top);
diff --git a/t/t8003-blame-corner-cases.sh b/t/t8003-blame-corner-cases.sh
index 661f9d430..32b3788fe 100755
--- a/t/t8003-blame-corner-cases.sh
+++ b/t/t8003-blame-corner-cases.sh
@@ -216,8 +216,9 @@ test_expect_success 'blame -L with invalid start' '
 '
 
 test_expect_success 'blame -L with invalid end' '
-	test_must_fail git blame -L1,5 tres 2>errors &&
-	test_i18ngrep "has only 2 lines" errors
+	git blame -L1,5 tres >out &&
+	cat out &&
+	test $(wc -l < out) -eq 2
Please use the test_line_count helper instead, as it will output a
helpful error message on failure, making the 'cat out' above
unnecessary.
Thanks for pointing that out.
quoted
 '
 
 test_expect_success 'blame parses <end> part of -L' '
-- 
2.14.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help