diff options
author | Junio C Hamano <gitster@pobox.com> | 2022-01-26 22:22:24 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-01-26 22:22:24 -0800 |
commit | b23dac905bde28da47543484320db16312c87551 (patch) | |
tree | 8d15d93247a153e3e58da7530285679d46420ec0 | |
parent | Start post 2.35 cycle (diff) | |
parent | sequencer, stash: fix running from worktree subdir (diff) | |
download | tgif-b23dac905bde28da47543484320db16312c87551.tar.xz |
Merge branch 'en/keep-cwd'
Fix a regression in 2.35 that roke the use of "rebase" and "stash"
in a secondary worktree.
* en/keep-cwd:
sequencer, stash: fix running from worktree subdir
-rw-r--r-- | builtin/stash.c | 6 | ||||
-rw-r--r-- | sequencer.c | 5 | ||||
-rwxr-xr-x | t/t3400-rebase.sh | 21 |
3 files changed, 30 insertions, 2 deletions
diff --git a/builtin/stash.c b/builtin/stash.c index 1ef2017c59..86cd0b456e 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -1539,8 +1539,12 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q struct child_process cp = CHILD_PROCESS_INIT; cp.git_cmd = 1; - if (startup_info->original_cwd) + if (startup_info->original_cwd) { cp.dir = startup_info->original_cwd; + strvec_pushf(&cp.env_array, "%s=%s", + GIT_WORK_TREE_ENVIRONMENT, + the_repository->worktree); + } strvec_pushl(&cp.args, "clean", "--force", "--quiet", "-d", ":/", NULL); if (include_untracked == INCLUDE_ALL_FILES) diff --git a/sequencer.c b/sequencer.c index 6abd72160c..5213d16e97 100644 --- a/sequencer.c +++ b/sequencer.c @@ -4223,8 +4223,11 @@ static int run_git_checkout(struct repository *r, struct replay_opts *opts, cmd.git_cmd = 1; - if (startup_info->original_cwd) + if (startup_info->original_cwd) { cmd.dir = startup_info->original_cwd; + strvec_pushf(&cmd.env_array, "%s=%s", + GIT_WORK_TREE_ENVIRONMENT, r->worktree); + } strvec_push(&cmd.args, "checkout"); strvec_push(&cmd.args, commit); strvec_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action); diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh index 23dbd3c82e..71b1735e1d 100755 --- a/t/t3400-rebase.sh +++ b/t/t3400-rebase.sh @@ -416,4 +416,25 @@ test_expect_success MINGW,SYMLINKS_WINDOWS 'rebase when .git/logs is a symlink' mv actual_logs .git/logs ' +test_expect_success 'rebase when inside worktree subdirectory' ' + git init main-wt && + ( + cd main-wt && + git commit --allow-empty -m "initial" && + mkdir -p foo/bar && + test_commit foo/bar/baz && + mkdir -p a/b && + test_commit a/b/c && + # create another branch for our other worktree + git branch other && + git worktree add ../other-wt other && + cd ../other-wt && + # create and cd into a subdirectory + mkdir -p random/dir && + cd random/dir && + # now do the rebase + git rebase --onto HEAD^^ HEAD^ # drops the HEAD^ commit + ) +' + test_done |