On Wed, Jul 26, 2017 at 4:39 PM, Michael Haggerty <mhagger@xxxxxxxxxxxx> wrote: > One of the tricks that `contrib/workdir/git-new-workdir` plays is to > making `packed-refs` in the new workdir a symlink to the `packed-refs` > file in the original repository. Before > 42dfa7ecef ("commit_packed_refs(): use a staging file separate from > the lockfile", 2017-06-23), a lockfile was used as the staging file, > and because the `LOCK_NO_DEREF` was not used, the pointed-to file was > locked and modified. > > But after that commit, the staging file was created using a tempfile, > with the end result that rewriting the `packed-refs` file in the > workdir overwrote the symlink rather than the original `packed-refs` > file. > > Change `commit_packed_refs()` to use `get_locked_file_path()` to find > the path of the file that it should overwrite. Since that path was > properly resolved when the lockfile was created, this restores the > pre-42dfa7ecef behavior. > > Also add a test case to document this use case and prevent a > regression like this from recurring. > > Signed-off-by: Michael Haggerty <mhagger@xxxxxxxxxxxx> > --- > Sorry for the slow response; I've been traveling and very busy. > > I didn't even know that a symlinked `packed-refs` file is a thing. The > attached patch should fix the problem. It applies on top of v3 of > mh/packed-ref-store [1] (which is already in next). Thanks for providing a fix. Code looks good to me, I wonder if the test needs SYMLINKS special treatment though? Stefan