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:
14
lockfile.c
14
lockfile.c
@ -128,9 +128,17 @@ static int lock_file(struct lock_file *lk, const char *path, int flags)
|
|||||||
path);
|
path);
|
||||||
}
|
}
|
||||||
|
|
||||||
strbuf_add(&lk->filename, path, pathlen);
|
if (flags & LOCK_NO_DEREF) {
|
||||||
if (!(flags & LOCK_NO_DEREF))
|
strbuf_add_absolute_path(&lk->filename, path);
|
||||||
resolve_symlink(&lk->filename);
|
} 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);
|
strbuf_addstr(&lk->filename, LOCK_SUFFIX);
|
||||||
lk->fd = open(lk->filename.buf, O_RDWR | O_CREAT | O_EXCL, 0666);
|
lk->fd = open(lk->filename.buf, O_RDWR | O_CREAT | O_EXCL, 0666);
|
||||||
if (lk->fd < 0) {
|
if (lk->fd < 0) {
|
||||||
|
|||||||
@ -65,4 +65,19 @@ test_expect_success '--cacheinfo mode,sha1,path (new syntax)' '
|
|||||||
test_cmp expect actual
|
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
|
test_done
|
||||||
|
|||||||
Reference in New Issue
Block a user