On 11/25/2021 3:39 AM, Elijah Newren via GitGitGadget wrote: > From: Elijah Newren <newren@xxxxxxxxx> > > When running commands such as `git reset --hard` from a subdirectory, if > that subdirectory is in the way of adding needed files, bail with an > error message. ... > -test_expect_failure 'reset --hard fails if cwd needs to be removed' ' > +test_expect_success 'reset --hard fails if cwd needs to be removed' ' > git checkout foo/bar/baz && > test_when_finished "git clean -fdx" && This test doesn't include any condition on the final state of the worktree. I could imagine that an implementation could be writing to the worktree incrementally and then bail halfway through. A clean "git status" would give us some confidence that the worktree and index are in a good state after the command fails. > + if (o->reset == UNPACK_RESET_OVERWRITE_UNTRACKED) { > + /* Avoid nuking startup_info->original_cwd... */ > + if (startup_info->original_cwd && > + !strcmp(startup_info->original_cwd, ce->name)) > + return add_rejected_path(o, ERROR_CWD_IN_THE_WAY, > + ce->name); > + /* ...but nuke anything else. */ > + return 0; > + } > + This implementation appears to do the right thing in the case I'm describing: we check which entries would need to change and we reject them before doing any real work. Thanks, -Stolee