Re: [PATCH v6] Add new git-related helper to contrib
From: Felipe Contreras <hidden>
Date: 2016-06-15 22:57:25
On Wed, May 22, 2013 at 7:08 PM, Junio C Hamano [off-list ref] wrote:
Felipe Contreras [off-list ref] writes:quoted
quoted
IIRC, git-gui runs two blames, one without any -C and one with (I do not offhand recall how many -C it uses) to show both.'git blame' is a very expensive operation, perhaps we should add another option so users don't need to run two blames to find this.Yes, you could add a "struct origin *suspect_in_the_same_file" next to the current "struct origin *suspect" to the blame_entry in order to represent the origin you would get if you were to stop at a "move across files" event, and keep digging, when you are operating under "-C -C" or higher mode.
No, this is what I meant:
--- a/builtin/blame.c
+++ b/builtin/blame.c@@ -1509,16 +1509,6 @@ static void found_guilty_entry(struct blame_entry *ent) if (ent->guilty) return; ent->guilty = 1; - if (incremental) { - struct origin *suspect = ent->suspect; - - printf("%s %d %d %d\n", - sha1_to_hex(suspect->commit->object.sha1), - ent->s_lno + 1, ent->lno + 1, ent->num_lines); - emit_one_suspect_detail(suspect, 0); - write_filename_info(suspect->path); - maybe_flush_or_die(stdout, "stdout"); - } } /*
@@ -1536,12 +1526,24 @@ static void assign_blame(struct scoreboard *sb, int opt) struct origin *suspect = NULL; /* find one suspect to break down */ - for (ent = sb->ent; !suspect && ent; ent = ent->next) - if (!ent->guilty) + for (ent = sb->ent; ent; ent = ent->next) + if (!ent->guilty) { suspect = ent->suspect; + break; + } + if (!suspect) return; /* all done */ + if (incremental &&
!is_null_sha1(suspect->commit->object.sha1)) {
+ printf("%s %d %d %d\n",
+
sha1_to_hex(suspect->commit->object.sha1),
+ ent->s_lno + 1, ent->lno + 1,
ent->num_lines);
+ emit_one_suspect_detail(suspect, 0);
+ write_filename_info(suspect->path);
+ maybe_flush_or_die(stdout, "stdout");
+ }
+
/*
* We will use this suspect later in the loop,
* so hold onto it in the meantime.
--
Felipe Contreras