From: Jonas Fonseca Date: Wed, 2 Apr 2008 22:01:15 +0000 (+0200) Subject: Merge branch 'master' of remote-server:src/tig X-Git-Tag: tig-0.11~22 X-Git-Url: https://git.distorted.org.uk/~mdw/tig/commitdiff_plain/251acae219225cb1b6e5cfef73e1720b6dd2d528?hp=-c Merge branch 'master' of remote-server:src/tig --- 251acae219225cb1b6e5cfef73e1720b6dd2d528 diff --combined tig.c index 1642498,566b8e7..c41f2b2 --- a/tig.c +++ b/tig.c @@@ -143,12 -143,11 +143,12 @@@ static size_t utf8_length(const char *s struct ref { char *name; /* Ref name; tag or head names are shortened. */ char id[SIZEOF_REV]; /* Commit SHA1 ID */ + unsigned int head:1; /* Is it the current HEAD? */ unsigned int tag:1; /* Is it a tag? */ unsigned int ltag:1; /* If so, is the tag local? */ unsigned int remote:1; /* Is it a remote ref? */ + unsigned int tracked:1; /* Is it the remote for the current HEAD? */ unsigned int next:1; /* For ref lists: are there more refs? */ - unsigned int head:1; /* Is it the current HEAD? */ }; static struct ref **get_refs(char *id); @@@ -332,6 -331,7 +332,7 @@@ sq_quote(char buf[SIZEOF_STR], size_t b REQ_(PREVIOUS, "Move to previous"), \ REQ_(VIEW_NEXT, "Move focus to next view"), \ REQ_(REFRESH, "Reload and refresh"), \ + REQ_(MAXIMIZE, "Maximize the current view"), \ REQ_(VIEW_CLOSE, "Close the current view"), \ REQ_(QUIT, "Close all views and quit"), \ \ @@@ -447,7 -447,6 +448,7 @@@ static char opt_path[SIZEOF_STR] = "" static char opt_file[SIZEOF_STR] = ""; static char opt_ref[SIZEOF_REF] = ""; static char opt_head[SIZEOF_REF] = ""; +static char opt_remote[SIZEOF_REF] = ""; static bool opt_no_head = TRUE; static FILE *opt_pipe = NULL; static char opt_encoding[20] = "UTF-8"; @@@ -591,11 -590,10 +592,11 @@@ LINE(MAIN_DATE, "", COLOR_BLUE, CO LINE(MAIN_AUTHOR, "", COLOR_GREEN, COLOR_DEFAULT, 0), \ LINE(MAIN_COMMIT, "", COLOR_DEFAULT, COLOR_DEFAULT, 0), \ LINE(MAIN_TAG, "", COLOR_MAGENTA, COLOR_DEFAULT, A_BOLD), \ -LINE(MAIN_LOCAL_TAG,"", COLOR_MAGENTA, COLOR_DEFAULT, A_BOLD), \ -LINE(MAIN_REMOTE, "", COLOR_YELLOW, COLOR_DEFAULT, A_BOLD), \ -LINE(MAIN_REF, "", COLOR_CYAN, COLOR_DEFAULT, A_BOLD), \ -LINE(MAIN_HEAD, "", COLOR_RED, COLOR_DEFAULT, A_BOLD), \ +LINE(MAIN_LOCAL_TAG,"", COLOR_MAGENTA, COLOR_DEFAULT, 0), \ +LINE(MAIN_REMOTE, "", COLOR_YELLOW, COLOR_DEFAULT, 0), \ +LINE(MAIN_TRACKED, "", COLOR_YELLOW, COLOR_DEFAULT, A_BOLD), \ +LINE(MAIN_REF, "", COLOR_CYAN, COLOR_DEFAULT, 0), \ +LINE(MAIN_HEAD, "", COLOR_CYAN, COLOR_DEFAULT, A_BOLD), \ LINE(MAIN_REVGRAPH,"", COLOR_MAGENTA, COLOR_DEFAULT, 0), \ LINE(TREE_DIR, "", COLOR_DEFAULT, COLOR_DEFAULT, A_NORMAL), \ LINE(TREE_FILE, "", COLOR_DEFAULT, COLOR_DEFAULT, A_NORMAL), \ @@@ -733,6 -731,7 +734,7 @@@ static struct keybinding default_keybin { KEY_UP, REQ_PREVIOUS }, { KEY_DOWN, REQ_NEXT }, { 'R', REQ_REFRESH }, + { 'M', REQ_MAXIMIZE }, /* Cursor navigation */ { 'k', REQ_MOVE_UP }, @@@ -1440,7 -1439,8 +1442,8 @@@ static struct view views[] = VIEW_(STAGE, "stage", &stage_ops, TRUE, ""), }; - #define VIEW(req) (&views[(req) - REQ_OFFSET - 1]) + #define VIEW(req) (&views[(req) - REQ_OFFSET - 1]) + #define VIEW_REQ(view) ((view) - views + REQ_OFFSET + 1) #define foreach_view(view, i) \ for (i = 0; i < ARRAY_SIZE(views) && (view = &views[i]); i++) @@@ -1482,6 -1482,43 +1485,43 @@@ draw_text(struct view *view, const cha return len; } + static int + draw_lineno(struct view *view, unsigned int lineno, int max, bool selected) + { + static char fmt[] = "%1ld"; + char number[10] = " "; + int max_number = MIN(view->digits, STRING_SIZE(number)); + bool showtrimmed = FALSE; + int col; + + lineno += view->offset + 1; + if (lineno == 1 || (lineno % opt_num_interval) == 0) { + if (view->digits <= 9) + fmt[1] = '0' + view->digits; + + if (!string_format(number, fmt, lineno)) + number[0] = 0; + showtrimmed = TRUE; + } + + if (max < max_number) + max_number = max; + + col = draw_text(view, number, max_number, showtrimmed, selected); + if (col < max) { + if (!selected) + wattrset(view->win, A_NORMAL); + waddch(view->win, ACS_VLINE); + col++; + } + if (col < max) { + waddch(view->win, ' '); + col++; + } + + return col; + } + static bool draw_view_line(struct view *view, unsigned int lineno) { @@@ -2590,6 -2627,11 +2630,11 @@@ view_driver(struct view *view, enum req report("Refreshing is not yet supported for the %s view", view->name); break; + case REQ_MAXIMIZE: + if (displayed_views() == 2) + open_view(view, VIEW_REQ(view), OPEN_DEFAULT); + break; + case REQ_TOGGLE_LINENO: opt_line_number = !opt_line_number; redraw_display(); @@@ -2695,39 -2737,35 +2740,35 @@@ static bool pager_draw(struct view *view, struct line *line, unsigned int lineno, bool selected) { + static char spaces[] = " "; char *text = line->data; enum line_type type = line->type; - int attr; + int attr = A_NORMAL; + int col = 0; wmove(view->win, lineno, 0); if (selected) { type = LINE_CURSOR; wchgat(view->win, -1, 0, type, NULL); + attr = get_line_attr(type); } - - attr = get_line_attr(type); wattrset(view->win, attr); - if (opt_line_number || opt_tab_size < TABSIZE) { - static char spaces[] = " "; - int col_offset = 0, col = 0; - - if (opt_line_number) { - unsigned long real_lineno = view->offset + lineno + 1; - - if (real_lineno == 1 || - (real_lineno % opt_num_interval) == 0) { - wprintw(view->win, "%.*d", view->digits, real_lineno); + if (opt_line_number) { + col += draw_lineno(view, lineno, view->width, selected); + if (col >= view->width) + return TRUE; + } - } else { - waddnstr(view->win, spaces, - MIN(view->digits, STRING_SIZE(spaces))); - } - waddstr(view->win, ": "); - col_offset = view->digits + 2; - } + if (!selected) { + attr = get_line_attr(type); + wattrset(view->win, attr); + } + if (opt_tab_size < TABSIZE) { + int col_offset = col; + col = 0; while (text && col_offset + col < view->width) { int cols_max = view->width - col_offset - col; char *pos = text; @@@ -2749,7 -2787,7 +2790,7 @@@ } } else { - draw_text(view, text, view->width, TRUE, selected); + draw_text(view, text, view->width - col, TRUE, selected); } return TRUE; @@@ -3594,43 -3632,13 +3635,13 @@@ blame_draw(struct view *view, struct li } { - unsigned long real_lineno = view->offset + lineno + 1; - char number[10] = " "; - int max = MIN(view->digits, STRING_SIZE(number)); - bool showtrimmed = FALSE; - - if (real_lineno == 1 || - (real_lineno % opt_num_interval) == 0) { - char fmt[] = "%1ld"; - - if (view->digits <= 9) - fmt[1] = '0' + view->digits; - - if (!string_format(number, fmt, real_lineno)) - number[0] = 0; - showtrimmed = TRUE; - } - - if (max > view->width - col) - max = view->width - col; if (!selected) wattrset(view->win, get_line_attr(LINE_BLAME_LINENO)); - col += draw_text(view, number, max, showtrimmed, selected); + col += draw_lineno(view, lineno, view->width - col, selected); if (col >= view->width) return TRUE; } - if (!selected) - wattrset(view->win, A_NORMAL); - - if (col >= view->width) - return TRUE; - waddch(view->win, ACS_VLINE); - col++; - if (col >= view->width) - return TRUE; - waddch(view->win, ' '); - col++; col += draw_text(view, blame->text, view->width - col, TRUE, selected); return TRUE; @@@ -3994,6 -4002,8 +4005,8 @@@ static boo status_draw(struct view *view, struct line *line, unsigned int lineno, bool selected) { struct status *status = line->data; + char *text; + int col = 0; wmove(view->win, lineno, 0); @@@ -4014,8 -4024,6 +4027,6 @@@ } if (!status) { - char *text; - switch (line->type) { case LINE_STAT_STAGED: text = "Changes to be committed:"; @@@ -4040,19 -4048,16 +4051,16 @@@ default: return FALSE; } + } else { + char buf[] = { status->status, ' ', ' ', ' ', 0 }; - draw_text(view, text, view->width, TRUE, selected); - return TRUE; + col += draw_text(view, buf, view->width, TRUE, selected); + if (!selected) + wattrset(view->win, A_NORMAL); + text = status->new.name; } - waddch(view->win, status->status); - if (!selected) - wattrset(view->win, A_NORMAL); - wmove(view->win, lineno, 4); - if (view->width < 5) - return TRUE; - - draw_text(view, status->new.name, view->width - 5, TRUE, selected); + draw_text(view, text, view->width - col, TRUE, selected); return TRUE; } @@@ -4895,8 -4900,6 +4903,8 @@@ main_draw(struct view *view, struct lin wattrset(view->win, get_line_attr(LINE_MAIN_LOCAL_TAG)); else if (commit->refs[i]->tag) wattrset(view->win, get_line_attr(LINE_MAIN_TAG)); + else if (commit->refs[i]->tracked) + wattrset(view->win, get_line_attr(LINE_MAIN_TRACKED)); else if (commit->refs[i]->remote) wattrset(view->win, get_line_attr(LINE_MAIN_REMOTE)); else @@@ -5504,7 -5507,6 +5512,7 @@@ read_ref(char *id, size_t idlen, char * bool tag = FALSE; bool ltag = FALSE; bool remote = FALSE; + bool tracked = FALSE; bool check_replace = FALSE; bool head = FALSE; @@@ -5526,7 -5528,6 +5534,7 @@@ remote = TRUE; namelen -= STRING_SIZE("refs/remotes/"); name += STRING_SIZE("refs/remotes/"); + tracked = !strcmp(opt_remote, name); } else if (!strncmp(name, "refs/heads/", STRING_SIZE("refs/heads/"))) { namelen -= STRING_SIZE("refs/heads/"); @@@ -5559,11 -5560,10 +5567,11 @@@ strncpy(ref->name, name, namelen); ref->name[namelen] = 0; + ref->head = head; ref->tag = tag; ref->ltag = ltag; ref->remote = remote; - ref->head = head; + ref->tracked = tracked; string_copy_rev(ref->id, id); return OK; @@@ -5587,28 -5587,6 +5595,28 @@@ read_repo_config_option(char *name, siz if (!strcmp(name, "core.editor")) string_ncopy(opt_editor, value, valuelen); + /* branch..remote */ + if (*opt_head && + !strncmp(name, "branch.", 7) && + !strncmp(name + 7, opt_head, strlen(opt_head)) && + !strcmp(name + 7 + strlen(opt_head), ".remote")) + string_ncopy(opt_remote, value, valuelen); + + if (*opt_head && *opt_remote && + !strncmp(name, "branch.", 7) && + !strncmp(name + 7, opt_head, strlen(opt_head)) && + !strcmp(name + 7 + strlen(opt_head), ".merge")) { + size_t from = strlen(opt_remote); + + if (!strncmp(value, "refs/heads/", STRING_SIZE("refs/heads/"))) { + value += STRING_SIZE("refs/heads/"); + valuelen -= STRING_SIZE("refs/heads/"); + } + + if (!string_format_from(opt_remote, &from, "/%s", value)) + opt_remote[0] = 0; + } + return OK; }