summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c77942d)
raw | patch | inline | side by side (parent: c77942d)
author | Jonas Fonseca <fonseca@diku.dk> | |
Sat, 9 Apr 2011 18:18:35 +0000 (14:18 -0400) | ||
committer | Jonas Fonseca <fonseca@diku.dk> | |
Sat, 9 Apr 2011 18:19:06 +0000 (14:19 -0400) |
Makes it possible to use begin_update to load extra view data, which
allows the argv argument to be properly formatted.
allows the argv argument to be properly formatted.
tig.c | patch | blob | history |
index 3ae55f23d78d87b0f2ad3bcec9d9f8591862913f..f562218376a5f17edc4722ce7e2fb25b4b985ec5 100644 (file)
--- a/tig.c
+++ b/tig.c
OPEN_RELOAD = 4, /* Reload view even if it is the current. */
OPEN_REFRESH = 16, /* Refresh view using previous command. */
OPEN_PREPARED = 32, /* Open already prepared command. */
+ OPEN_EXTRA = 64, /* Open extra data from command. */
};
struct view_ops {
static bool
begin_update(struct view *view, const char *dir, const char **argv, enum open_flags flags)
{
- bool reload = !!(flags & (OPEN_RELOAD | OPEN_REFRESH | OPEN_PREPARED));
+ bool extra = !!(flags & (OPEN_EXTRA));
+ bool reload = !!(flags & (OPEN_RELOAD | OPEN_REFRESH | OPEN_PREPARED | OPEN_EXTRA));
bool refresh = flags & (OPEN_REFRESH | OPEN_PREPARED);
if (!reload && !strcmp(view->vid, view->id))
return TRUE;
- if (view->pipe)
- end_update(view, TRUE);
+ if (view->pipe) {
+ if (extra)
+ io_done(view->pipe);
+ else
+ end_update(view, TRUE);
+ }
if (!refresh) {
view->dir = dir;
@@ -2543,7 +2549,8 @@ begin_update(struct view *view, const char *dir, const char **argv, enum open_fl
!io_run(&view->io, IO_RD, view->dir, view->argv))
return FALSE;
- setup_update(view, view->id);
+ if (!extra)
+ setup_update(view, view->id);
return TRUE;
}
static bool
blame_open(struct view *view, enum open_flags flags)
{
+ const char *file_argv[] = { opt_cdup, opt_file , NULL };
char path[SIZEOF_STR];
size_t i;
return FALSE;
}
- if (*opt_ref || !io_open(&view->io, "%s%s", opt_cdup, opt_file)) {
+ if (*opt_ref || !begin_update(view, opt_cdup, file_argv, flags)) {
const char *blame_cat_file_argv[] = {
"git", "cat-file", "blob", path, NULL
};
if (!string_format(path, "%s:%s", opt_ref, opt_file) ||
- !start_update(view, blame_cat_file_argv, opt_cdup))
+ !begin_update(view, opt_cdup, blame_cat_file_argv, flags))
return FALSE;
}
free(blame->commit);
}
- setup_update(view, opt_file);
+ string_format(view->vid, "%s:%s", opt_ref, opt_file);
string_format(view->ref, "%s ...", opt_file);
return TRUE;
if (view->lines == 0 && !view->prev)
die("No blame exist for %s", view->vid);
- if (view->lines == 0 || !start_update(view, blame_argv, opt_cdup)) {
+ if (view->lines == 0 || !begin_update(view, opt_cdup, blame_argv, OPEN_EXTRA)) {
report("Failed to load blame data");
return TRUE;
}