All of lore.kernel.org
 help / color / mirror / Atom feed
From: Isabella Stephens <istephens@atlassian.com>
To: git@vger.kernel.org
Cc: sunshine@sunshineco.com, peff@peff.net, gitster@pobox.com,
	bturner@atlassian.com,
	Isabella Stephens <istephens@atlassian.com>
Subject: [PATCH] blame: add --fuzzy-lines command line option
Date: Thu, 26 Oct 2017 13:19:29 +1100	[thread overview]
Message-ID: <20171026021929.1346-1-istephens@atlassian.com> (raw)

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, git will fail with a fatal
error. It may instead be desirable to perform a git blame for the line
numbers in the intersection of the file and the specified line range.
This patch adds a --fuzzy-lines command line option to allow this.

Signed-off-by: Isabella Stephens <istephens@atlassian.com>
---
 Documentation/blame-options.txt | 5 +++++
 builtin/blame.c                 | 4 ++++
 t/t8003-blame-corner-cases.sh   | 6 ++++++
 3 files changed, 15 insertions(+)

diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt
index dc41957af..664cd8f8b 100644
--- a/Documentation/blame-options.txt
+++ b/Documentation/blame-options.txt
@@ -19,6 +19,11 @@
 +
 include::line-range-format.txt[]
 
+--fuzzy-lines::
+	Use fuzzy line ranges. If a range specified with -L starts on a line
+	within the file but ends past the end of the file, display the blame
+	for the existing lines rather than failing.
+
 -l::
 	Show long rev (Default: off).
 
diff --git a/builtin/blame.c b/builtin/blame.c
index 67adaef4d..d25b39d40 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -661,6 +661,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 
 	struct string_list range_list = STRING_LIST_INIT_NODUP;
 	int output_option = 0, opt = 0;
+	int fuzzy_lines = 0;
 	int show_stats = 0;
 	const char *revs_file = NULL;
 	const char *contents_from = NULL;
@@ -670,6 +671,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 		OPT_BOOL(0, "root", &show_root, N_("Do not treat root commits as boundaries (Default: off)")),
 		OPT_BOOL(0, "show-stats", &show_stats, N_("Show work cost statistics")),
 		OPT_BOOL(0, "progress", &show_progress, N_("Force progress reporting")),
+		OPT_BOOL(0, "fuzzy-lines", &fuzzy_lines, N_("Use fuzzy line ranges")),
 		OPT_BIT(0, "score-debug", &output_option, N_("Show output score for blame entries"), OUTPUT_SHOW_SCORE),
 		OPT_BIT('f', "show-name", &output_option, N_("Show original filename (Default: auto)"), OUTPUT_SHOW_NAME),
 		OPT_BIT('n', "show-number", &output_option, N_("Show original linenumber (Default: off)"), OUTPUT_SHOW_NUMBER),
@@ -878,6 +880,8 @@ 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 (fuzzy_lines && lno < top)
+			top = lno;
 		if (lno < top || ((lno || bottom) && lno < bottom))
 			die(Q_("file %s has only %lu line",
 			       "file %s has only %lu lines",
diff --git a/t/t8003-blame-corner-cases.sh b/t/t8003-blame-corner-cases.sh
index 661f9d430..6e7657df2 100755
--- a/t/t8003-blame-corner-cases.sh
+++ b/t/t8003-blame-corner-cases.sh
@@ -220,6 +220,12 @@ test_expect_success 'blame -L with invalid end' '
 	test_i18ngrep "has only 2 lines" errors
 '
 
+test_expect_success 'blame -L with invalid end and fuzzy-lines' '
+	git blame -L1,5 tres --fuzzy-lines >out &&
+	cat out &&
+	test $(wc -l < out) -eq 2
+'
+
 test_expect_success 'blame parses <end> part of -L' '
 	git blame -L1,1 tres >out &&
 	cat out &&
-- 
2.14.1


             reply	other threads:[~2017-10-26  2:19 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-26  2:19 Isabella Stephens [this message]
2017-10-26  6:15 ` [PATCH] blame: add --fuzzy-lines command line option Junio C Hamano
2017-10-26  7:01   ` [PATCH v2] blame: prevent error if range ends past end of file Isabella Stephens
2017-10-26  8:48     ` Jacob Keller
2017-10-26 22:50       ` Isabella Stephens
2017-10-26 15:31     ` SZEDER Gábor
2017-10-26 23:37       ` Isabella Stephens
2017-10-27  0:56       ` [PATCH v3] " Isabella Stephens
2017-10-27  1:58         ` Junio C Hamano
2017-10-27  2:01           ` Junio C Hamano
2017-10-27  6:18           ` Isabella Stephens
2017-10-27  6:56             ` Eric Sunshine
2018-04-26  7:45               ` [PATCH v4 0/2] blame and log: " istephens
2018-04-26  7:45                 ` [PATCH v4 1/2] blame: " istephens
2018-04-27  0:50                   ` Junio C Hamano
2018-04-27  1:42                     ` Isabella Stephens
2018-04-27  2:09                       ` Junio C Hamano
2018-04-27  4:15                         ` Isabella Stephens
2018-05-02  2:47                           ` Junio C Hamano
2018-05-29  5:30                             ` [PATCH v5 0/2] blame and log: " istephens
2018-05-29  5:30                               ` [PATCH] blame: " istephens
2018-05-30  8:45                                 ` Eric Sunshine
2018-05-31  5:07                                   ` Isabella Stephens
2018-05-29  5:30                               ` [PATCH] log: prevent error if line " istephens
2018-05-30  8:59                                 ` Eric Sunshine
2018-04-26  7:45                 ` [PATCH v4 2/2] " istephens
2017-10-26  7:08   ` [PATCH] blame: add --fuzzy-lines command line option Isabella Stephens

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171026021929.1346-1-istephens@atlassian.com \
    --to=istephens@atlassian.com \
    --cc=bturner@atlassian.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    --cc=sunshine@sunshineco.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.