This commit adds custom log_read and log_draw functions that utilize the diff stat drawing functions from the diff module. The absence of the triple hyphen separator prevents direct usage of the diff drawing functions directly. Signed-Off-By: Kumar Appaiah <a.kumar@xxxxxxxxxxxxxxxxx> --- src/log.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/src/log.c b/src/log.c index eef61dc..e6f2a82 100644 --- a/src/log.c +++ b/src/log.c @@ -23,6 +23,9 @@ struct log_state { * up/down in the log view. */ int last_lineno; enum line_type last_type; + bool commit_title_read; + bool after_commit_header; + bool reading_diff_stat; }; static void @@ -76,14 +79,69 @@ log_request(struct view *view, enum request request, struct line *line) } } +static bool +log_read(struct view *view, char *data) +{ + enum line_type type; + struct log_state *state = view->private; + size_t len; + + if (!data) + return TRUE; + + type = get_line_type(data); + + len = strlen(data); + + if (type == LINE_COMMIT) + state->commit_title_read = TRUE; + else if (state->commit_title_read && len < 1) { + state->commit_title_read = FALSE; + state->after_commit_header = TRUE; + } else if (state->after_commit_header && len < 1) { + state->after_commit_header = FALSE; + state->reading_diff_stat = TRUE; + } else if (state->reading_diff_stat) { + bool ret = diff_common_add_diff_stat(view, data); + if (ret) { + return TRUE; + } else { + state->reading_diff_stat = FALSE; + } + } + + return pager_common_read(view, data, type); +} + +static bool +log_draw(struct view *view, struct line *line, unsigned int lineno) +{ + char *text = line->data; + enum line_type type = line->type; + + if (draw_lineno(view, lineno)) + return TRUE; + + if (line->wrapped && draw_text(view, LINE_DELIMITER, "+")) + return TRUE; + + if (type == LINE_DIFF_STAT) { + diff_common_draw_diff_stat(view, &type, &text); + draw_text(view, type, text); + return TRUE; + } + + return pager_draw(view, line, lineno); +} + static struct view_ops log_ops = { "line", argv_env.head, VIEW_ADD_PAGER_REFS | VIEW_OPEN_DIFF | VIEW_SEND_CHILD_ENTER | VIEW_LOG_LIKE | VIEW_REFRESH, sizeof(struct log_state), log_open, - pager_read, - pager_draw, + log_read, + log_draw, log_request, pager_grep, log_select, -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html