Re: [tig] [PATCHv2 3/3] log: Colour the diff stat
On Sun, Apr 13, 2014 at 5:54 PM, Kumar Appaiah a.ku...@alumni.iitm.ac.in wrote: 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. See my comments below. --- src/log.c | 55 +-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/src/log.c b/src/log.c index 40c9a21..468f7c3 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 @@ -78,14 +81,62 @@ 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; + This is missing a call to draw_lineno(...) + if (type == LINE_DIFF_STAT) { + diff_common_draw_diff_stat(view, type, text); + draw_text(view, type, text); I had to #include tig/draw.h for this to compile. + 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 -- Jonas Fonseca -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [tig] [PATCHv2 3/3] log: Colour the diff stat
On Wed, Apr 16, 2014 at 08:44:41PM -0400, Jonas Fonseca wrote: On Sun, Apr 13, 2014 at 5:54 PM, Kumar Appaiah a.ku...@alumni.iitm.ac.in wrote: 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. See my comments below. Hi Jonas. +static bool +log_draw(struct view *view, struct line *line, unsigned int lineno) +{ + char *text = line-data; + enum line_type type = line-type; + This is missing a call to draw_lineno(...) Noted. + if (type == LINE_DIFF_STAT) { + diff_common_draw_diff_stat(view, type, text); + draw_text(view, type, text); I had to #include tig/draw.h for this to compile. I'll take care of this. I'll send you a pull request eventually. You can handle it after your refactor is complete. Thanks! Kumar -- Kumar Appaiah -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[tig] [PATCHv2 3/3] log: Colour the diff stat
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.ku...@alumni.iitm.ac.in --- src/log.c | 55 +-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/src/log.c b/src/log.c index 40c9a21..468f7c3 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 @@ -78,14 +81,62 @@ 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 (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 majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html