mirror of
https://github.com/git/git
synced 2024-10-01 06:05:20 +00:00
Add 'preserve' subcommand to 'git stash'
In this patch, we introduce a new subcommand preserve to git stash. The purpose of this subcommand is to save the current changes into the stash and then immediately re-apply those changes to the working directory. Implementation-wise, this is achieved by adding a new branch to the conditional in the cmd_stash function, where we check if argv[0] is "preserve". If it is, we push_stash with the new argument that we added to it preserve=1. In all other cases we call push_stack/do_push_stack preserve=0 Signed-off-by: Nadav Goldstein <nadav.goldstein96@gmail.com>
This commit is contained in:
parent
d7d8841f67
commit
bcdb6cf977
|
@ -1498,7 +1498,7 @@ static int create_stash(int argc, const char **argv, const char *prefix UNUSED)
|
|||
}
|
||||
|
||||
static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int quiet,
|
||||
int keep_index, int patch_mode, int include_untracked, int only_staged)
|
||||
int keep_index, int patch_mode, int include_untracked, int only_staged, int preserve)
|
||||
{
|
||||
int ret = 0;
|
||||
struct stash_info info = STASH_INFO_INIT;
|
||||
|
@ -1643,7 +1643,7 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q
|
|||
ret = -1;
|
||||
goto done;
|
||||
}
|
||||
} else {
|
||||
} else if (!preserve) {
|
||||
struct child_process cp = CHILD_PROCESS_INIT;
|
||||
cp.git_cmd = 1;
|
||||
/* BUG: this nukes untracked files in the way */
|
||||
|
@ -1709,7 +1709,7 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q
|
|||
}
|
||||
|
||||
static int push_stash(int argc, const char **argv, const char *prefix,
|
||||
int push_assumed)
|
||||
int push_assumed, int preserve)
|
||||
{
|
||||
int force_assume = 0;
|
||||
int keep_index = -1;
|
||||
|
@ -1780,14 +1780,19 @@ static int push_stash(int argc, const char **argv, const char *prefix,
|
|||
}
|
||||
|
||||
ret = do_push_stash(&ps, stash_msg, quiet, keep_index, patch_mode,
|
||||
include_untracked, only_staged);
|
||||
include_untracked, only_staged, preserve);
|
||||
clear_pathspec(&ps);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int push_stash_unassumed(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
return push_stash(argc, argv, prefix, 0);
|
||||
return push_stash(argc, argv, prefix, 0, 0);
|
||||
}
|
||||
|
||||
static int preserve_stash(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
return push_stash(argc, argv, prefix, 0, 1);
|
||||
}
|
||||
|
||||
static int save_stash(int argc, const char **argv, const char *prefix)
|
||||
|
@ -1827,7 +1832,7 @@ static int save_stash(int argc, const char **argv, const char *prefix)
|
|||
|
||||
memset(&ps, 0, sizeof(ps));
|
||||
ret = do_push_stash(&ps, stash_msg, quiet, keep_index,
|
||||
patch_mode, include_untracked, only_staged);
|
||||
patch_mode, include_untracked, only_staged, 0);
|
||||
|
||||
strbuf_release(&stash_msg_buf);
|
||||
return ret;
|
||||
|
@ -1850,6 +1855,7 @@ int cmd_stash(int argc, const char **argv, const char *prefix)
|
|||
OPT_SUBCOMMAND("store", &fn, store_stash),
|
||||
OPT_SUBCOMMAND("create", &fn, create_stash),
|
||||
OPT_SUBCOMMAND("push", &fn, push_stash_unassumed),
|
||||
OPT_SUBCOMMAND("preserve", &fn, preserve_stash),
|
||||
OPT_SUBCOMMAND_F("save", &fn, save_stash, PARSE_OPT_NOCOMPLETE),
|
||||
OPT_END()
|
||||
};
|
||||
|
@ -1876,5 +1882,5 @@ int cmd_stash(int argc, const char **argv, const char *prefix)
|
|||
/* Assume 'stash push' */
|
||||
strvec_push(&args, "push");
|
||||
strvec_pushv(&args, argv);
|
||||
return !!push_stash(args.nr, args.v, prefix, 1);
|
||||
return !!push_stash(args.nr, args.v, prefix, 1, 0);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue