path: root/builtin/add.c
diff options
authorJohannes Schindelin <>2019-12-21 21:57:12 (GMT)
committerJunio C Hamano <>2019-12-22 00:06:21 (GMT)
commit90a6bb98d11a664f729dbb86c90d9c7a38ea825a (patch)
tree48d3d5ce4f9499176010e327a84c26c1bfc3d9ff /builtin/add.c
parent36bae1dc0ee777aa529dd955f2e619281265f262 (diff)
legacy stash -p: respect the add.interactive.usebuiltin setting
As `git add` traditionally did not expose the `--patch=<mode>` modes via command-line options, the scripted version of `git stash` had to call `git add--interactive` directly. But this prevents the built-in `add -p` from kicking in, as `add--interactive` is the scripted version (which does not have a "fall-back" to the built-in version). So let's introduce support for internal switch for `git add` that the scripted `git stash` can use to call the appropriate backend (scripted or built-in, depending on `add.interactive.useBuiltin`). Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'builtin/add.c')
1 files changed, 14 insertions, 0 deletions
diff --git a/builtin/add.c b/builtin/add.c
index b0d6891..fa8bf6b 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -29,6 +29,7 @@ static const char * const builtin_add_usage[] = {
static int patch_interactive, add_interactive, edit_interactive;
static int take_worktree_changes;
static int add_renormalize;
+static int legacy_stash_p; /* support for the scripted `git stash` */
struct update_callback_data {
int flags;
@@ -335,6 +336,8 @@ static struct option builtin_add_options[] = {
N_("override the executable bit of the listed files")),
OPT_HIDDEN_BOOL(0, "warn-embedded-repo", &warn_on_embedded_repo,
N_("warn when adding an embedded repository")),
+ OPT_HIDDEN_BOOL(0, "legacy-stash-p", &legacy_stash_p,
+ N_("backend for `git stash -p`")),
@@ -431,6 +434,17 @@ int cmd_add(int argc, const char **argv, const char *prefix)
add_interactive = 1;
if (add_interactive)
exit(interactive_add(argc - 1, argv + 1, prefix, patch_interactive));
+ if (legacy_stash_p) {
+ struct pathspec pathspec;
+ parse_pathspec(&pathspec, 0,
+ prefix, argv);
+ return run_add_interactive(NULL, "--patch=stash", &pathspec);
+ }
if (edit_interactive)
return(edit_patch(argc, argv, prefix));