Sometimes I want to blame a file starting at some point and ending at the end of the file. In my haste I'll write something like this: $ git blame -L5,2342343 -- builtin-blame.c and be greeted by a die message telling me that my end range is greater than the number of lines in the file. Obviously I can do: $ git blame -L5, -- builtin-blame.c and get what I want but that isn't very discoverable. If the range is greater than the number of lines just truncate the range to go up to the end of the file. Update the docs to more accurately reflect the defaults for n and m too. Signed-off-by: Stephen Boyd <bebarino@xxxxxxxxx> --- I realize this is late in the game for 1.7.0 so I'll resend if this isn't picked up. Documentation/blame-options.txt | 4 +++- builtin-blame.c | 4 +++- t/t8003-blame.sh | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt index 4833cac..620660d 100644 --- a/Documentation/blame-options.txt +++ b/Documentation/blame-options.txt @@ -9,7 +9,7 @@ --show-stats:: Include additional statistics at the end of blame output. --L <start>,<end>:: +-L [<start>],[<end>]:: Annotate only the given line range. <start> and <end> can take one of these forms: @@ -31,6 +31,8 @@ starting at the line given by <start>. This is only valid for <end> and will specify a number of lines before or after the line given by <start>. + +Note: if <start> is not given it defaults to 1 and if <end> is not given it +defaults to the number of lines in the file. -l:: Show long rev (Default: off). diff --git a/builtin-blame.c b/builtin-blame.c index 10f7eac..77b7323 100644 --- a/builtin-blame.c +++ b/builtin-blame.c @@ -1962,6 +1962,8 @@ static void prepare_blame_range(struct scoreboard *sb, term = parse_loc(term + 1, sb, lno, *bottom + 1, top); if (*term) usage(blame_usage); + if (lno < *top) + *top = lno; } if (*term) usage(blame_usage); @@ -2238,7 +2240,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix) OPT_STRING(0, "contents", &contents_from, "file", "Use <file>'s contents as the final image"), { OPTION_CALLBACK, 'C', NULL, &opt, "score", "Find line copies within and across files", PARSE_OPT_OPTARG, blame_copy_callback }, { OPTION_CALLBACK, 'M', NULL, &opt, "score", "Find line movements within and across files", PARSE_OPT_OPTARG, blame_move_callback }, - OPT_CALLBACK('L', NULL, &bottomtop, "n,m", "Process only line range n,m, counting from 1", blame_bottomtop_callback), + OPT_CALLBACK('L', NULL, &bottomtop, "[n],[m]", "Process only line range n,m, counting from 1", blame_bottomtop_callback), OPT_END() }; diff --git a/t/t8003-blame.sh b/t/t8003-blame.sh index 4a8db74..0ba150e 100755 --- a/t/t8003-blame.sh +++ b/t/t8003-blame.sh @@ -161,8 +161,8 @@ test_expect_success 'blame -L with invalid start' ' test_must_fail git blame -L5 tres 2>&1 | grep "has only 2 lines" ' -test_expect_success 'blame -L with invalid end' ' - git blame -L1,5 tres 2>&1 | grep "has only 2 lines" +test_expect_success 'blame -L with invalid end truncates automatically' ' + git blame -L1,5 tres ' test_done -- 1.7.0.rc2.13.g8b233 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html