]> git.ipfire.org Git - thirdparty/git.git/commitdiff
legacy stash -p: respect the add.interactive.usebuiltin setting
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Sat, 21 Dec 2019 21:57:12 +0000 (21:57 +0000)
committerJunio C Hamano <gitster@pobox.com>
Sun, 22 Dec 2019 00:06:21 +0000 (16:06 -0800)
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 <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/add.c
git-legacy-stash.sh

index b0d6891479438c5830f026badf6058289fd775b1..fa8bf6b10a53e819f32b8af4f0d66df166fa5b31 100644 (file)
@@ -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`")),
        OPT_END(),
 };
 
@@ -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,
+                       PATHSPEC_PREFER_FULL |
+                       PATHSPEC_SYMLINK_LEADING_PATH |
+                       PATHSPEC_PREFIX_ORIGIN,
+                       prefix, argv);
+
+               return run_add_interactive(NULL, "--patch=stash", &pathspec);
+       }
 
        if (edit_interactive)
                return(edit_patch(argc, argv, prefix));
index 07ad4a545910da5ff5a591c159da292d5101dec3..ed039dfcbbbf89a88bf62eead1dc7387063ae506 100755 (executable)
@@ -206,7 +206,7 @@ create_stash () {
 
                # find out what the user wants
                GIT_INDEX_FILE="$TMP-index" \
-                       git add--interactive --patch=stash -- "$@" &&
+                       git add --legacy-stash-p -- "$@" &&
 
                # state of the working tree
                w_tree=$(GIT_INDEX_FILE="$TMP-index" git write-tree) ||