Skip to content

Commit

Permalink
Merge branch 'en/keep-cwd' into maint
Browse files Browse the repository at this point in the history
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
  • Loading branch information
gitster committed Jan 29, 2022
2 parents 89bece5 + ff5b791 commit f120b65
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
6 changes: 5 additions & 1 deletion builtin/stash.c
Expand Up @@ -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)
Expand Down
5 changes: 4 additions & 1 deletion sequencer.c
Expand Up @@ -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);
Expand Down
21 changes: 21 additions & 0 deletions t/t3400-rebase.sh
Expand Up @@ -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

0 comments on commit f120b65

Please sign in to comment.