mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
add-patch: add diff.context command line overrides
This patch compliments the previous commit, where builtins that use add-patch infrastructure now respect diff.context and diff.interHunkContext file configurations. In particular, this patch helps users who don't want to set persistent context configurations or just want a way to override them on a one-time basis, by allowing the relevant builtins to accept corresponding command line options that override the file configurations. This mimics commands such as diff and log, which allow for both context file configuration and command line overrides. Signed-off-by: Leon Michalak <leonmichalak6@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
2b0a2db2c0
commit
2b3ae04011
@@ -36,7 +36,8 @@ static void init_color(struct repository *r, struct add_i_state *s,
|
||||
free(key);
|
||||
}
|
||||
|
||||
void init_add_i_state(struct add_i_state *s, struct repository *r)
|
||||
void init_add_i_state(struct add_i_state *s, struct repository *r,
|
||||
struct add_p_opt *add_p_opt)
|
||||
{
|
||||
const char *value;
|
||||
|
||||
@@ -90,6 +91,17 @@ void init_add_i_state(struct add_i_state *s, struct repository *r)
|
||||
repo_config_get_bool(r, "interactive.singlekey", &s->use_single_key);
|
||||
if (s->use_single_key)
|
||||
setbuf(stdin, NULL);
|
||||
|
||||
if (add_p_opt->context != -1) {
|
||||
if (add_p_opt->context < 0)
|
||||
die(_("%s cannot be negative"), "--unified");
|
||||
s->context = add_p_opt->context;
|
||||
}
|
||||
if (add_p_opt->interhunkcontext != -1) {
|
||||
if (add_p_opt->interhunkcontext < 0)
|
||||
die(_("%s cannot be negative"), "--inter-hunk-context");
|
||||
s->interhunkcontext = add_p_opt->interhunkcontext;
|
||||
}
|
||||
}
|
||||
|
||||
void clear_add_i_state(struct add_i_state *s)
|
||||
@@ -978,6 +990,10 @@ static int run_patch(struct add_i_state *s, const struct pathspec *ps,
|
||||
opts->prompt = N_("Patch update");
|
||||
count = list_and_choose(s, files, opts);
|
||||
if (count > 0) {
|
||||
struct add_p_opt add_p_opt = {
|
||||
.context = s->context,
|
||||
.interhunkcontext = s->interhunkcontext,
|
||||
};
|
||||
struct strvec args = STRVEC_INIT;
|
||||
struct pathspec ps_selected = { 0 };
|
||||
|
||||
@@ -988,7 +1004,7 @@ static int run_patch(struct add_i_state *s, const struct pathspec *ps,
|
||||
parse_pathspec(&ps_selected,
|
||||
PATHSPEC_ALL_MAGIC & ~PATHSPEC_LITERAL,
|
||||
PATHSPEC_LITERAL_PATH, "", args.v);
|
||||
res = run_add_p(s->r, ADD_P_ADD, NULL, &ps_selected);
|
||||
res = run_add_p(s->r, ADD_P_ADD, &add_p_opt, NULL, &ps_selected);
|
||||
strvec_clear(&args);
|
||||
clear_pathspec(&ps_selected);
|
||||
}
|
||||
@@ -1023,10 +1039,13 @@ static int run_diff(struct add_i_state *s, const struct pathspec *ps,
|
||||
if (count > 0) {
|
||||
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||
|
||||
strvec_pushl(&cmd.args, "git", "diff", "-p", "--cached",
|
||||
oid_to_hex(!is_initial ? &oid :
|
||||
s->r->hash_algo->empty_tree),
|
||||
"--", NULL);
|
||||
strvec_pushl(&cmd.args, "git", "diff", "-p", "--cached", NULL);
|
||||
if (s->context != -1)
|
||||
strvec_pushf(&cmd.args, "--unified=%i", s->context);
|
||||
if (s->interhunkcontext != -1)
|
||||
strvec_pushf(&cmd.args, "--inter-hunk-context=%i", s->interhunkcontext);
|
||||
strvec_pushl(&cmd.args, oid_to_hex(!is_initial ? &oid :
|
||||
s->r->hash_algo->empty_tree), "--", NULL);
|
||||
for (i = 0; i < files->items.nr; i++)
|
||||
if (files->selected[i])
|
||||
strvec_push(&cmd.args,
|
||||
@@ -1119,7 +1138,8 @@ static void command_prompt_help(struct add_i_state *s)
|
||||
_("(empty) select nothing"));
|
||||
}
|
||||
|
||||
int run_add_i(struct repository *r, const struct pathspec *ps)
|
||||
int run_add_i(struct repository *r, const struct pathspec *ps,
|
||||
struct add_p_opt *add_p_opt)
|
||||
{
|
||||
struct add_i_state s = { NULL };
|
||||
struct print_command_item_data data = { "[", "]" };
|
||||
@@ -1162,7 +1182,7 @@ int run_add_i(struct repository *r, const struct pathspec *ps)
|
||||
->util = util;
|
||||
}
|
||||
|
||||
init_add_i_state(&s, r);
|
||||
init_add_i_state(&s, r, add_p_opt);
|
||||
|
||||
/*
|
||||
* When color was asked for, use the prompt color for
|
||||
|
||||
Reference in New Issue
Block a user