Merge branch 'nd/lockfile-absolute'
The lockfile API can get confused which file to clean up when the process moved the $cwd after creating a lockfile. * nd/lockfile-absolute: lockfile.c: store absolute path
This commit is contained in:
commit
bb86a40e06
14
lockfile.c
14
lockfile.c
@ -128,9 +128,17 @@ static int lock_file(struct lock_file *lk, const char *path, int flags)
|
||||
path);
|
||||
}
|
||||
|
||||
strbuf_add(&lk->filename, path, pathlen);
|
||||
if (!(flags & LOCK_NO_DEREF))
|
||||
resolve_symlink(&lk->filename);
|
||||
if (flags & LOCK_NO_DEREF) {
|
||||
strbuf_add_absolute_path(&lk->filename, path);
|
||||
} else {
|
||||
struct strbuf resolved_path = STRBUF_INIT;
|
||||
|
||||
strbuf_add(&resolved_path, path, pathlen);
|
||||
resolve_symlink(&resolved_path);
|
||||
strbuf_add_absolute_path(&lk->filename, resolved_path.buf);
|
||||
strbuf_release(&resolved_path);
|
||||
}
|
||||
|
||||
strbuf_addstr(&lk->filename, LOCK_SUFFIX);
|
||||
lk->fd = open(lk->filename.buf, O_RDWR | O_CREAT | O_EXCL, 0666);
|
||||
if (lk->fd < 0) {
|
||||
|
@ -65,4 +65,19 @@ test_expect_success '--cacheinfo mode,sha1,path (new syntax)' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '.lock files cleaned up' '
|
||||
mkdir cleanup &&
|
||||
(
|
||||
cd cleanup &&
|
||||
mkdir worktree &&
|
||||
git init repo &&
|
||||
cd repo &&
|
||||
git config core.worktree ../../worktree &&
|
||||
# --refresh triggers late setup_work_tree,
|
||||
# active_cache_changed is zero, rollback_lock_file fails
|
||||
git update-index --refresh &&
|
||||
! test -f .git/index.lock
|
||||
)
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user