diff options
author | Jeff Smith <whydoubt@gmail.com> | 2017-05-24 00:15:26 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-05-25 13:08:08 +0900 |
commit | 8c59921dbf99cd19f1311a4eb1213312fdb41905 (patch) | |
tree | 97d4d254bca5e215bf1a2d759e9e224570b9b419 /builtin | |
parent | 4149c1860b10512cf32410c1f71311a23dc97f07 (diff) | |
download | git-8c59921dbf99cd19f1311a4eb1213312fdb41905.tar.gz |
blame: move progress updates to a scoreboard callback
Allow the interface user to decide how to handle a progress update.
Signed-off-by: Jeff Smith <whydoubt@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/blame.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/builtin/blame.c b/builtin/blame.c index 1b53325ff3..d05907b86c 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -391,6 +391,9 @@ struct blame_scoreboard { /* callbacks */ void(*on_sanity_fail)(struct blame_scoreboard *, int); + void(*found_guilty_entry)(struct blame_entry *, void *); + + void *found_guilty_entry_data; }; static void sanity_check_refcnt(struct blame_scoreboard *); @@ -1729,9 +1732,10 @@ static int emit_one_suspect_detail(struct blame_origin *suspect, int repeat) * The blame_entry is found to be guilty for the range. * Show it in incremental output. */ -static void found_guilty_entry(struct blame_entry *ent, - struct progress_info *pi) +static void found_guilty_entry(struct blame_entry *ent, void *data) { + struct progress_info *pi = (struct progress_info *)data; + if (incremental) { struct blame_origin *suspect = ent->suspect; @@ -1754,11 +1758,6 @@ static void assign_blame(struct blame_scoreboard *sb, int opt) { struct rev_info *revs = sb->revs; struct commit *commit = prio_queue_get(&sb->commits); - struct progress_info pi = { NULL, 0 }; - - if (show_progress) - pi.progress = start_progress_delay(_("Blaming lines"), - sb->num_lines, 50, 1); while (commit) { struct blame_entry *ent; @@ -1800,7 +1799,8 @@ static void assign_blame(struct blame_scoreboard *sb, int opt) suspect->guilty = 1; for (;;) { struct blame_entry *next = ent->next; - found_guilty_entry(ent, &pi); + if (sb->found_guilty_entry) + sb->found_guilty_entry(ent, sb->found_guilty_entry_data); if (next) { ent = next; continue; @@ -1816,8 +1816,6 @@ static void assign_blame(struct blame_scoreboard *sb, int opt) if (sb->debug) /* sanity */ sanity_check_refcnt(sb); } - - stop_progress(&pi.progress); } static const char *format_time(timestamp_t time, const char *tz_str, @@ -2550,6 +2548,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix) char *final_commit_name = NULL; enum object_type type; struct commit *final_commit = NULL; + struct progress_info pi = { NULL, 0 }; struct string_list range_list = STRING_LIST_INIT_NODUP; int output_option = 0, opt = 0; @@ -2905,8 +2904,16 @@ parse_done: read_mailmap(&mailmap, NULL); + sb.found_guilty_entry = &found_guilty_entry; + sb.found_guilty_entry_data = π + if (show_progress) + pi.progress = start_progress_delay(_("Blaming lines"), + sb.num_lines, 50, 1); + assign_blame(&sb, opt); + stop_progress(&pi.progress); + if (!incremental) setup_pager(); |