built-in add -p: implement the "worktree" patch modes
This is a straight-forward port of 2f0896ec3a
(restore: support
--patch, 2019-04-25) which added support for `git restore -p`.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
52628f94fc
commit
cee6cb7300
@ -28,6 +28,7 @@ enum add_p_mode {
|
|||||||
ADD_P_STASH,
|
ADD_P_STASH,
|
||||||
ADD_P_RESET,
|
ADD_P_RESET,
|
||||||
ADD_P_CHECKOUT,
|
ADD_P_CHECKOUT,
|
||||||
|
ADD_P_WORKTREE,
|
||||||
};
|
};
|
||||||
|
|
||||||
int run_add_p(struct repository *r, enum add_p_mode mode,
|
int run_add_p(struct repository *r, enum add_p_mode mode,
|
||||||
|
50
add-patch.c
50
add-patch.c
@ -176,6 +176,49 @@ static struct patch_mode patch_mode_checkout_nothead = {
|
|||||||
"the file\n"),
|
"the file\n"),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct patch_mode patch_mode_worktree_head = {
|
||||||
|
.diff_cmd = { "diff-index", NULL },
|
||||||
|
.apply_args = { "-R", NULL },
|
||||||
|
.apply_check_args = { "-R", NULL },
|
||||||
|
.is_reverse = 1,
|
||||||
|
.prompt_mode = {
|
||||||
|
N_("Discard mode change from index and worktree [y,n,q,a,d%s,?]? "),
|
||||||
|
N_("Discard deletion from index and worktree [y,n,q,a,d%s,?]? "),
|
||||||
|
N_("Discard this hunk from index and worktree [y,n,q,a,d%s,?]? "),
|
||||||
|
},
|
||||||
|
.edit_hunk_hint = N_("If the patch applies cleanly, the edited hunk "
|
||||||
|
"will immediately be marked for discarding."),
|
||||||
|
.help_patch_text =
|
||||||
|
N_("y - discard this hunk from worktree\n"
|
||||||
|
"n - do not discard this hunk from worktree\n"
|
||||||
|
"q - quit; do not discard this hunk or any of the remaining "
|
||||||
|
"ones\n"
|
||||||
|
"a - discard this hunk and all later hunks in the file\n"
|
||||||
|
"d - do not discard this hunk or any of the later hunks in "
|
||||||
|
"the file\n"),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct patch_mode patch_mode_worktree_nothead = {
|
||||||
|
.diff_cmd = { "diff-index", "-R", NULL },
|
||||||
|
.apply_args = { NULL },
|
||||||
|
.apply_check_args = { NULL },
|
||||||
|
.prompt_mode = {
|
||||||
|
N_("Apply mode change to index and worktree [y,n,q,a,d%s,?]? "),
|
||||||
|
N_("Apply deletion to index and worktree [y,n,q,a,d%s,?]? "),
|
||||||
|
N_("Apply this hunk to index and worktree [y,n,q,a,d%s,?]? "),
|
||||||
|
},
|
||||||
|
.edit_hunk_hint = N_("If the patch applies cleanly, the edited hunk "
|
||||||
|
"will immediately be marked for applying."),
|
||||||
|
.help_patch_text =
|
||||||
|
N_("y - apply this hunk to worktree\n"
|
||||||
|
"n - do not apply this hunk to worktree\n"
|
||||||
|
"q - quit; do not apply this hunk or any of the remaining "
|
||||||
|
"ones\n"
|
||||||
|
"a - apply this hunk and all later hunks in the file\n"
|
||||||
|
"d - do not apply this hunk or any of the later hunks in "
|
||||||
|
"the file\n"),
|
||||||
|
};
|
||||||
|
|
||||||
struct hunk_header {
|
struct hunk_header {
|
||||||
unsigned long old_offset, old_count, new_offset, new_count;
|
unsigned long old_offset, old_count, new_offset, new_count;
|
||||||
/*
|
/*
|
||||||
@ -1551,6 +1594,13 @@ int run_add_p(struct repository *r, enum add_p_mode mode,
|
|||||||
s.mode = &patch_mode_checkout_head;
|
s.mode = &patch_mode_checkout_head;
|
||||||
else
|
else
|
||||||
s.mode = &patch_mode_checkout_nothead;
|
s.mode = &patch_mode_checkout_nothead;
|
||||||
|
} else if (mode == ADD_P_WORKTREE) {
|
||||||
|
if (!revision)
|
||||||
|
s.mode = &patch_mode_checkout_index;
|
||||||
|
else if (!strcmp(revision, "HEAD"))
|
||||||
|
s.mode = &patch_mode_worktree_head;
|
||||||
|
else
|
||||||
|
s.mode = &patch_mode_worktree_nothead;
|
||||||
} else
|
} else
|
||||||
s.mode = &patch_mode_add;
|
s.mode = &patch_mode_add;
|
||||||
s.revision = revision;
|
s.revision = revision;
|
||||||
|
@ -208,6 +208,8 @@ int run_add_interactive(const char *revision, const char *patch_mode,
|
|||||||
mode = ADD_P_RESET;
|
mode = ADD_P_RESET;
|
||||||
else if (!strcmp(patch_mode, "--patch=checkout"))
|
else if (!strcmp(patch_mode, "--patch=checkout"))
|
||||||
mode = ADD_P_CHECKOUT;
|
mode = ADD_P_CHECKOUT;
|
||||||
|
else if (!strcmp(patch_mode, "--patch=worktree"))
|
||||||
|
mode = ADD_P_WORKTREE;
|
||||||
else
|
else
|
||||||
die("'%s' not supported", patch_mode);
|
die("'%s' not supported", patch_mode);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user