X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=tig.c;h=e60b717c90d0d4f9be73f76aee418c214fce4731;hb=e4a8d2c0d050d3c53e1aa3846f2ffc2a981ffa65;hp=ac053b3510349b777f604a6bf13cb63d986387de;hpb=cea805b9dfaf077c3b799bbc38c5792c7fee49dd;p=tig.git diff --git a/tig.c b/tig.c index ac053b3..e60b717 100644 --- a/tig.c +++ b/tig.c @@ -207,6 +207,38 @@ get_author_initials(const char *author) return initials; } +#define author_trim(cols) (cols == 0 || cols > 5) + +static const char * +mkauthor(const char *text, int cols, enum author author) +{ + bool trim = author_trim(cols); + bool abbreviate = author == AUTHOR_ABBREVIATED || !trim; + + if (!author) + return ""; + if (abbreviate && text) + return get_author_initials(text); + return text; +} + +static const char * +mkmode(mode_t mode) +{ + if (S_ISDIR(mode)) + return "drwxr-xr-x"; + else if (S_ISLNK(mode)) + return "lrwxrwxrwx"; + else if (S_ISGITLINK(mode)) + return "m---------"; + else if (S_ISREG(mode) && mode & S_IXUSR) + return "-rwxr-xr-x"; + else if (S_ISREG(mode)) + return "-rw-r--r--"; + else + return "----------"; +} + /* * User requests @@ -1654,35 +1686,16 @@ draw_date(struct view *view, struct time *time) static bool draw_author(struct view *view, const char *author) { - bool trim = opt_author_cols == 0 || opt_author_cols > 5; - bool abbreviate = opt_author == AUTHOR_ABBREVIATED || !trim; + bool trim = author_trim(opt_author_cols); + const char *text = mkauthor(author, opt_author_cols, opt_author); - if (opt_author == AUTHOR_NO) - return FALSE; - - if (abbreviate && author) - author = get_author_initials(author); - - return draw_field(view, LINE_AUTHOR, author, opt_author_cols, trim); + return draw_field(view, LINE_AUTHOR, text, opt_author_cols, trim); } static bool draw_mode(struct view *view, mode_t mode) { - const char *str; - - if (S_ISDIR(mode)) - str = "drwxr-xr-x"; - else if (S_ISLNK(mode)) - str = "lrwxrwxrwx"; - else if (S_ISGITLINK(mode)) - str = "m---------"; - else if (S_ISREG(mode) && mode & S_IXUSR) - str = "-rwxr-xr-x"; - else if (S_ISREG(mode)) - str = "-rw-r--r--"; - else - str = "----------"; + const char *str = mkmode(mode); return draw_field(view, LINE_MODE, str, STRING_SIZE("-rw-r--r-- "), FALSE); } @@ -1711,6 +1724,43 @@ draw_lineno(struct view *view, unsigned int lineno) return draw_graphic(view, LINE_DEFAULT, &separator, 1, TRUE); } +static bool +draw_refs(struct view *view, struct ref_list *refs) +{ + size_t i; + + if (!opt_show_refs || !refs) + return FALSE; + + for (i = 0; i < refs->size; i++) { + struct ref *ref = refs->refs[i]; + enum line_type type; + + if (ref->head) + type = LINE_MAIN_HEAD; + else if (ref->ltag) + type = LINE_MAIN_LOCAL_TAG; + else if (ref->tag) + type = LINE_MAIN_TAG; + else if (ref->tracked) + type = LINE_MAIN_TRACKED; + else if (ref->remote) + type = LINE_MAIN_REMOTE; + else + type = LINE_MAIN_REF; + + if (draw_text(view, type, "[") || + draw_text(view, type, ref->name) || + draw_text(view, type, "]")) + return TRUE; + + if (draw_text(view, LINE_DEFAULT, " ")) + return TRUE; + } + + return FALSE; +} + static bool draw_view_line(struct view *view, unsigned int lineno) { @@ -2500,15 +2550,6 @@ setup_update(struct view *view, const char *vid) view->start_time = time(NULL); } -static bool -prepare_update(struct view *view, const char *dir, const char *argv[]) -{ - if (view->pipe) - io_done(view->pipe); - view->dir = dir; - return argv_copy(&view->argv, argv); -} - static bool begin_update(struct view *view, const char *dir, const char **argv, enum open_flags flags) { @@ -2777,7 +2818,11 @@ open_argv(struct view *prev, struct view *view, const char *argv[], const char * { enum request request = view - views + REQ_OFFSET + 1; - if (!prepare_update(view, dir, argv)) { + if (view->pipe) + end_update(view, TRUE); + view->dir = dir; + + if (!argv_copy(&view->argv, argv)) { report("Failed to open %s view: %s", view->name, io_strerror(&view->io)); } else { open_view(prev, request, flags | OPEN_PREPARED); @@ -2787,17 +2832,9 @@ open_argv(struct view *prev, struct view *view, const char *argv[], const char * static void open_file(struct view *prev, struct view *view, const char *file, enum open_flags flags) { - enum request request = view - views + REQ_OFFSET + 1; const char *file_argv[] = { opt_cdup, file , NULL }; - if (view->pipe) - end_update(view, TRUE); - view->dir = opt_cdup; - if (!argv_copy(&view->argv, file_argv)) { - report("Failed to load %s: out of memory", file); - } else { - open_view(prev, request, flags | OPEN_PREPARED); - } + open_argv(prev, view, file_argv, opt_cdup, flags); } static void @@ -5807,35 +5844,8 @@ main_draw(struct view *view, struct line *line, unsigned int lineno) if (opt_rev_graph && draw_graph(view, &commit->graph)) return TRUE; - if (opt_show_refs && commit->refs) { - size_t i; - - for (i = 0; i < commit->refs->size; i++) { - struct ref *ref = commit->refs->refs[i]; - enum line_type type; - - if (ref->head) - type = LINE_MAIN_HEAD; - else if (ref->ltag) - type = LINE_MAIN_LOCAL_TAG; - else if (ref->tag) - type = LINE_MAIN_TAG; - else if (ref->tracked) - type = LINE_MAIN_TRACKED; - else if (ref->remote) - type = LINE_MAIN_REMOTE; - else - type = LINE_MAIN_REF; - - if (draw_text(view, type, "[") || - draw_text(view, type, ref->name) || - draw_text(view, type, "]")) - return TRUE; - - if (draw_text(view, LINE_DEFAULT, " ")) - return TRUE; - } - } + if (draw_refs(view, commit->refs)) + return TRUE; draw_text(view, LINE_DEFAULT, commit->title); return TRUE;