summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2022-01-29 00:45:39 (GMT)
committerJunio C Hamano <gitster@pobox.com>2022-01-29 00:45:52 (GMT)
commitf120b65cd41c0e93432af1a36c82fd3a8d39ccd4 (patch)
tree0657b197543b8eedd733aac032e9587c25d0a614
parent89bece5c8c96f0b962cfc89e63f82d603fd60bed (diff)
parentff5b7913f0af62c26682b0376d0aa2d7f5d74b2e (diff)
downloadgit-f120b65cd41c0e93432af1a36c82fd3a8d39ccd4.zip
git-f120b65cd41c0e93432af1a36c82fd3a8d39ccd4.tar.gz
git-f120b65cd41c0e93432af1a36c82fd3a8d39ccd4.tar.bz2
Merge branch 'en/keep-cwd' into maint
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.c6
-rw-r--r--sequencer.c5
-rwxr-xr-xt/t3400-rebase.sh21
3 files changed, 30 insertions, 2 deletions
diff --git a/builtin/stash.c b/builtin/stash.c
index 1ef2017..86cd0b4 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 6abd721..5213d16 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 23dbd3c..71b1735 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