index 826c3f9be45a5d907f0d5e26a7fd89c94c89de6a..cd3428cc38c29f783bdbc12800f3dd5ad26d86bf 100644 (file)
--- a/tig.c
+++ b/tig.c
enum format_flags {
FORMAT_ALL, /* Perform replacement in all arguments. */
- FORMAT_DASH, /* Perform replacement up until "--". */
FORMAT_NONE /* No replacement should be performed. */
};
add_builtin_run_requests(void)
{
const char *cherry_pick[] = { "git", "cherry-pick", "%(commit)", NULL };
+ const char *checkout[] = { "git", "checkout", "%(branch)", NULL };
const char *commit[] = { "git", "commit", NULL };
const char *gc[] = { "git", "gc", NULL };
struct {
} reqs[] = {
{ KEYMAP_MAIN, 'C', ARRAY_SIZE(cherry_pick) - 1, cherry_pick },
{ KEYMAP_STATUS, 'C', ARRAY_SIZE(commit) - 1, commit },
+ { KEYMAP_BRANCH, 'C', ARRAY_SIZE(checkout) - 1, checkout },
{ KEYMAP_GENERIC, 'G', ARRAY_SIZE(gc) - 1, gc },
};
int i;
static char ref_blob[SIZEOF_REF] = "";
static char ref_commit[SIZEOF_REF] = "HEAD";
static char ref_head[SIZEOF_REF] = "HEAD";
+static char ref_branch[SIZEOF_REF] = "";
struct view {
const char *name; /* View name */
FORMAT_VAR("%(head)", ref_head, ""),
FORMAT_VAR("%(commit)", ref_commit, ""),
FORMAT_VAR("%(blob)", ref_blob, ""),
+ FORMAT_VAR("%(branch)", ref_branch, ""),
};
int i;
@@ -3142,8 +3145,6 @@ format_argv(const char *dst_argv[], const char *src_argv[], enum format_flags fl
const char *value;
if (!next || noreplace) {
- if (flags == FORMAT_DASH && !strcmp(arg, "--"))
- noreplace = TRUE;
len = strlen(arg);
value = "";
}
static bool
-prepare_update(struct view *view, const char *argv[], const char *dir,
- enum format_flags flags)
+prepare_update(struct view *view, const char *argv[], const char *dir)
{
if (view->pipe)
end_update(view, TRUE);
- return io_format(&view->io, dir, IO_RD, argv, flags);
+ return io_format(&view->io, dir, IO_RD, argv, FORMAT_NONE);
}
static bool
diff_index_argv[7] = "/dev/null";
}
- if (!prepare_update(diff, diff_index_argv, NULL, FORMAT_DASH)) {
+ if (!prepare_update(diff, diff_index_argv, NULL)) {
report("Failed to allocate diff command");
break;
}
};
struct view *main_view = VIEW(REQ_VIEW_MAIN);
- if (!prepare_update(main_view, all_branches_argv, NULL, FORMAT_NONE)) {
+ if (!prepare_update(main_view, all_branches_argv, NULL)) {
report("Failed to load view of all branches");
return REQ_NONE;
}
string_copy_rev(view->ref, branch->ref->id);
string_copy_rev(ref_commit, branch->ref->id);
string_copy_rev(ref_head, branch->ref->id);
+ string_copy_rev(ref_branch, branch->ref->name);
}
static struct view_ops branch_ops = {
"--", "/dev/null", newpath, NULL
};
- if (!prepare_update(stage, no_head_diff_argv, opt_cdup, FORMAT_DASH))
+ if (!prepare_update(stage, no_head_diff_argv, opt_cdup))
return status_load_error(view, stage, newpath);
} else {
const char *index_show_argv[] = {
oldpath, newpath, NULL
};
- if (!prepare_update(stage, index_show_argv, opt_cdup, FORMAT_DASH))
+ if (!prepare_update(stage, index_show_argv, opt_cdup))
return status_load_error(view, stage, newpath);
}
"-C", "-M", "--", oldpath, newpath, NULL
};
- if (!prepare_update(stage, files_show_argv, opt_cdup, FORMAT_DASH))
+ if (!prepare_update(stage, files_show_argv, opt_cdup))
return status_load_error(view, stage, newpath);
if (status)
info = "Unstaged changes to %s";
die("command too long");
}
- if (!prepare_update(VIEW(request), custom_argv, NULL, FORMAT_NONE))
+ if (!prepare_update(VIEW(request), custom_argv, NULL))
die("Failed to format arguments");
return request;
if (!argv_from_string(argv, &argc, cmd)) {
report("Too many arguments");
- } else if (!prepare_update(next, argv, NULL, FORMAT_DASH)) {
+ } else if (!prepare_update(next, argv, NULL)) {
report("Failed to format command");
} else {
open_view(view, REQ_VIEW_PAGER, OPEN_PREPARED);