Junio C Hamano <[email protected]> writes:
> Let's do this for now instead. That would make it clear to people
> who (rightly or wrongly) think the "--follow" option should do
> something that we already do so, and explain the output that they
> see when they do give the "--follow" option to the command.
>
> I may do a "--no-follow" patch as a follow-up, or I may not,
> depending on the mood and workload.
A patch to do so looks like this.
If you know your history did not have any rename, or if you care
only about the history after a large rename that happened some time
ago, "git blame --no-follow $path" can be a way to tell the command
not to bother about them.
When you use -C, the lines that came from the renamed file will
still be found without the whole-file rename detection anyway, and
this is not all that interesting either way, I would think.
diff --git c/builtin/blame.c w/builtin/blame.c
index cad4111..bfa6086 100644
--- c/builtin/blame.c
+++ w/builtin/blame.c
@@ -42,6 +42,7 @@ static int blank_boundary;
static int incremental;
static int xdl_opts;
static int abbrev = -1;
+static int no_whole_file_rename;
static enum date_mode blame_date_mode = DATE_ISO8601;
static size_t blame_date_width;
@@ -1226,7 +1227,7 @@ static void pass_blame(struct scoreboard *sb, struct
origin *origin, int opt)
* The first pass looks for unrenamed path to optimize for
* common cases, then we look for renames in the second pass.
*/
- for (pass = 0; pass < 2; pass++) {
+ for (pass = 0; pass < 2 - no_whole_file_rename; pass++) {
struct origin *(*find)(struct scoreboard *,
struct commit *, struct origin *);
find = pass ? find_rename : find_origin;
@@ -2344,6 +2345,7 @@ int cmd_blame(int argc, const char **argv, const char
*prefix)
init_revisions(&revs, NULL);
revs.date_mode = blame_date_mode;
DIFF_OPT_SET(&revs.diffopt, ALLOW_TEXTCONV);
+ DIFF_OPT_SET(&revs.diffopt, FOLLOW_RENAMES);
save_commit_buffer = 0;
dashdash_pos = 0;
@@ -2367,6 +2369,8 @@ int cmd_blame(int argc, const char **argv, const char
*prefix)
parse_revision_opt(&revs, &ctx, options, blame_opt_usage);
}
parse_done:
+ no_whole_file_rename = !DIFF_OPT_TST(&revs.diffopt, FOLLOW_RENAMES);
+ DIFF_OPT_CLR(&revs.diffopt, FOLLOW_RENAMES);
argc = parse_options_end(&ctx);
if (0 < abbrev)
diff --git c/diff.c w/diff.c
index f1b0447..32ebcbb 100644
--- c/diff.c
+++ w/diff.c
@@ -3584,6 +3584,8 @@ int diff_opt_parse(struct diff_options *options, const
char **av, int ac)
DIFF_OPT_SET(options, FIND_COPIES_HARDER);
else if (!strcmp(arg, "--follow"))
DIFF_OPT_SET(options, FOLLOW_RENAMES);
+ else if (!strcmp(arg, "--no-follow"))
+ DIFF_OPT_CLR(options, FOLLOW_RENAMES);
else if (!strcmp(arg, "--color"))
options->use_color = 1;
else if (!prefixcmp(arg, "--color=")) {
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html