commit - 694d3271e2afd0fc9a20ede5856bd4ee41d92eb3
commit + ffe385066240ef3f4d6b0f279be621a100b20a70
blob - 3d070a1101fd42f89e3b94632d56d43ee705e66b
blob + 02ae1bde0056ed2df220f62f486d778115cd673f
--- tog/tog.c
+++ tog/tog.c
}
static void
-scroll_up(struct tog_view *view,
- struct commit_queue_entry **first_displayed_entry, int maxscroll,
- struct commit_queue *commits)
+log_scroll_up(struct tog_view *view, int maxscroll)
{
+ struct tog_log_view_state *s = &view->state.log;
struct commit_queue_entry *entry;
int nscrolled = 0;
- entry = TAILQ_FIRST(&commits->head);
- if (*first_displayed_entry == entry)
+ entry = TAILQ_FIRST(&s->commits.head);
+ if (s->first_displayed_entry == entry)
return;
- entry = *first_displayed_entry;
+ entry = s->first_displayed_entry;
while (entry && nscrolled < maxscroll) {
entry = TAILQ_PREV(entry, commit_queue_head, entry);
if (entry) {
- *first_displayed_entry = entry;
+ s->first_displayed_entry = entry;
nscrolled++;
}
}
}
static const struct got_error *
-trigger_log_thread(struct tog_view *log_view, int wait,
- int *commits_needed, int *log_complete,
- pthread_cond_t *need_commits, pthread_cond_t *commit_loaded)
+trigger_log_thread(struct tog_view *view, int wait)
{
+ struct tog_log_thread_args *ta = &view->state.log.thread_args;
int errcode;
halfdelay(1); /* fast refresh while loading commits */
- while (*commits_needed > 0) {
- if (*log_complete)
+ while (ta->commits_needed > 0) {
+ if (ta->log_complete)
break;
/* Wake the log thread. */
- errcode = pthread_cond_signal(need_commits);
+ errcode = pthread_cond_signal(&ta->need_commits);
if (errcode)
return got_error_set_errno(errcode,
"pthread_cond_signal");
break;
/* Display progress update in log view. */
- show_log_view(log_view);
+ show_log_view(view);
update_panels();
doupdate();
/* Wait right here while next commit is being loaded. */
- errcode = pthread_cond_wait(commit_loaded, &tog_mutex);
+ errcode = pthread_cond_wait(&ta->commit_loaded, &tog_mutex);
if (errcode)
return got_error_set_errno(errcode,
"pthread_cond_wait");
/* Display progress update in log view. */
- show_log_view(log_view);
+ show_log_view(view);
update_panels();
doupdate();
}
}
static const struct got_error *
-scroll_down(struct tog_view *log_view,
- struct commit_queue_entry **first_displayed_entry, int maxscroll,
- struct commit_queue_entry **last_displayed_entry,
- struct commit_queue *commits, int *log_complete, int *commits_needed,
- pthread_cond_t *need_commits, pthread_cond_t *commit_loaded)
+log_scroll_down(struct tog_view *view, int maxscroll)
{
+ struct tog_log_view_state *s = &view->state.log;
const struct got_error *err = NULL;
struct commit_queue_entry *pentry;
int nscrolled = 0, ncommits_needed;
- if (*last_displayed_entry == NULL)
+ if (s->last_displayed_entry == NULL)
return NULL;
- ncommits_needed = (*last_displayed_entry)->idx + 1 + maxscroll;
- if (commits->ncommits < ncommits_needed && !*log_complete) {
+ ncommits_needed = (s->last_displayed_entry)->idx + 1 + maxscroll;
+ if (s->commits.ncommits < ncommits_needed &&
+ !s->thread_args.log_complete) {
/*
* Ask the log thread for required amount of commits.
*/
- (*commits_needed) += maxscroll;
- err = trigger_log_thread(log_view, 1, commits_needed,
- log_complete, need_commits, commit_loaded);
+ s->thread_args.commits_needed += maxscroll;
+ err = trigger_log_thread(view, 1);
if (err)
return err;
}
do {
- pentry = TAILQ_NEXT(*last_displayed_entry, entry);
+ pentry = TAILQ_NEXT(s->last_displayed_entry, entry);
if (pentry == NULL)
break;
- *last_displayed_entry = pentry;
+ s->last_displayed_entry = pentry;
- pentry = TAILQ_NEXT(*first_displayed_entry, entry);
+ pentry = TAILQ_NEXT(s->first_displayed_entry, entry);
if (pentry == NULL)
break;
- *first_displayed_entry = pentry;
+ s->first_displayed_entry = pentry;
} while (++nscrolled < maxscroll);
return err;
* will resume at s->search_entry once we come back.
*/
s->thread_args.commits_needed++;
- return trigger_log_thread(view, 0,
- &s->thread_args.commits_needed,
- &s->thread_args.log_complete,
- &s->thread_args.need_commits,
- &s->thread_args.commit_loaded);
+ return trigger_log_thread(view, 0);
}
err = match_commit(&have_match, entry->id, entry->commit,
if (errcode)
return got_error_set_errno(errcode, "pthread_create");
if (s->thread_args.commits_needed > 0) {
- err = trigger_log_thread(view, 1,
- &s->thread_args.commits_needed,
- &s->thread_args.log_complete,
- &s->thread_args.need_commits,
- &s->thread_args.commit_loaded);
+ err = trigger_log_thread(view, 1);
if (err)
return err;
}
if (s->selected > 0)
s->selected--;
else
- scroll_up(view, &s->first_displayed_entry, 1,
- &s->commits);
+ log_scroll_up(view, 1);
break;
case KEY_PPAGE:
case CTRL('b'):
s->selected = 0;
break;
}
- scroll_up(view, &s->first_displayed_entry,
- view->nlines - 1, &s->commits);
+ log_scroll_up(view, view->nlines - 1);
break;
case 'j':
case KEY_DOWN:
s->selected++;
break;
}
- err = scroll_down(view, &s->first_displayed_entry, 1,
- &s->last_displayed_entry, &s->commits,
- &s->thread_args.log_complete,
- &s->thread_args.commits_needed,
- &s->thread_args.need_commits,
- &s->thread_args.commit_loaded);
+ err = log_scroll_down(view, 1);
break;
case KEY_NPAGE:
case CTRL('f'): {
first = s->first_displayed_entry;
if (first == NULL)
break;
- err = scroll_down(view, &s->first_displayed_entry,
- view->nlines - 1, &s->last_displayed_entry,
- &s->commits, &s->thread_args.log_complete,
- &s->thread_args.commits_needed,
- &s->thread_args.need_commits,
- &s->thread_args.commit_loaded);
+ err = log_scroll_down(view, view->nlines - 1);
if (err)
break;
if (first == s->first_displayed_entry &&
if (TAILQ_NEXT(ls->selected_entry, entry) == NULL) {
ls->thread_args.commits_needed++;
- err = trigger_log_thread(s->log_view, 1,
- &ls->thread_args.commits_needed,
- &ls->thread_args.log_complete,
- &ls->thread_args.need_commits,
- &ls->thread_args.commit_loaded);
+ err = trigger_log_thread(s->log_view, 1);
if (err)
break;
}