commit - 711bb1324928686dc0d198cfa76680ecefce91ac
commit + 5813d178aff670a67346e23851a985a8530a8d33
blob - c1a08e99dca1b6a96beb2b2b90ba4dd9f3a80006
blob + 421f8fec3c395f952fa3c5a0cbccf23b54987d4b
--- tog/tog.c
+++ tog/tog.c
}
static const struct got_error *
+format_author(wchar_t **wauthor, int *author_width, char *author, int limit)
+{
+ char *smallerthan, *at;
+
+ smallerthan = strchr(author, '<');
+ if (smallerthan && smallerthan[1] != '\0')
+ author = smallerthan + 1;
+ at = strchr(author, '@');
+ if (at)
+ *at = '\0';
+ return format_line(wauthor, author_width, author, limit);
+}
+
+static const struct got_error *
draw_commit(struct tog_view *view, struct got_commit_object *commit,
- struct got_object_id *id, struct got_reflist_head *refs)
+ struct got_object_id *id, struct got_reflist_head *refs,
+ int author_display_cols)
{
const struct got_error *err = NULL;
char datebuf[10]; /* YY-MM-DD + SPACE + NUL */
char *logmsg0 = NULL, *logmsg = NULL;
- char *author0 = NULL, *author = NULL;
+ char *author = NULL;
wchar_t *wlogmsg = NULL, *wauthor = NULL;
int author_width, logmsg_width;
- char *newline, *smallerthan, *at;
- char *line = NULL;
+ char *newline, *line = NULL;
int col, limit;
static const size_t date_display_cols = 9;
- static const size_t author_display_cols = 10;
const int avail = view->ncols;
struct tm tm;
time_t committer_time;
if (col > avail)
goto done;
- author0 = strdup(got_object_commit_get_author(commit));
- if (author0 == NULL) {
+ author = strdup(got_object_commit_get_author(commit));
+ if (author == NULL) {
err = got_error_from_errno();
goto done;
}
- author = author0;
- smallerthan = strchr(author, '<');
- if (smallerthan && smallerthan[1] != '\0')
- author = smallerthan + 1;
- at = strchr(author, '@');
- if (at)
- *at = '\0';
- limit = avail - col;
- err = format_line(&wauthor, &author_width, author, limit);
+ err = format_author(&wauthor, &author_width, author, avail - col);
if (err)
goto done;
waddwstr(view->window, wauthor);
col += author_width;
- while (col <= avail && author_width < author_display_cols + 1) {
+ while (col <= avail && author_width < author_display_cols + 2) {
waddch(view->window, ' ');
col++;
author_width++;
done:
free(logmsg0);
free(wlogmsg);
- free(author0);
+ free(author);
free(wauthor);
free(line);
return err;
const struct got_error *err = NULL;
struct commit_queue_entry *entry;
int ncommits, width;
+ int author_cols = 10;
char *id_str = NULL, *header = NULL, *ncommits_str = NULL;
char *refs_str = NULL;
wchar_t *wline;
if (limit <= 1)
goto done;
+ /* Grow author column size if necessary. */
entry = first;
+ ncommits = 0;
+ while (entry) {
+ char *author;
+ wchar_t *wauthor;
+ int width;
+ if (ncommits >= limit - 1)
+ break;
+ author = strdup(got_object_commit_get_author(entry->commit));
+ if (author == NULL) {
+ err = got_error_from_errno();
+ goto done;
+ }
+ err = format_author(&wauthor, &width, author, COLS);
+ if (author_cols < width)
+ author_cols = width;
+ free(wauthor);
+ free(author);
+ entry = TAILQ_NEXT(entry, entry);
+ }
+
+ entry = first;
*last = first;
ncommits = 0;
while (entry) {
break;
if (ncommits == selected_idx)
wstandout(view->window);
- err = draw_commit(view, entry->commit, entry->id, refs);
+ err = draw_commit(view, entry->commit, entry->id, refs,
+ author_cols);
if (ncommits == selected_idx)
wstandend(view->window);
if (err)