summaryrefslogtreecommitdiff
path: root/builtin/blame.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2013-01-14 16:15:51 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-01-14 16:15:51 (GMT)
commit90d0b8a9f015c21b8f4a00a88838cd7bda5750e9 (patch)
tree3f70d934cb2d677ee1ba9635ff8f309042297dbb /builtin/blame.c
parent6f3f710127b0d5b651915b705a18a25e389fd40d (diff)
parent3d1aa56671e7f33740dcd2cf0642d5ce09bd6a95 (diff)
downloadgit-90d0b8a9f015c21b8f4a00a88838cd7bda5750e9.zip
git-90d0b8a9f015c21b8f4a00a88838cd7bda5750e9.tar.gz
git-90d0b8a9f015c21b8f4a00a88838cd7bda5750e9.tar.bz2
Merge branch 'jc/blame-no-follow'
Teaches "--no-follow" option to "git blame" to disable its whole-file rename detection. * jc/blame-no-follow: blame: pay attention to --no-follow diff: accept --no-follow option
Diffstat (limited to 'builtin/blame.c')
-rw-r--r--builtin/blame.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/builtin/blame.c b/builtin/blame.c
index cfae569..bc6c899 100644
--- a/builtin/blame.c
+++ b/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;
@@ -2403,6 +2404,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;
@@ -2426,6 +2428,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)