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:
Junio C Hamano
2015-01-07 12:56:01 -08:00
2 changed files with 26 additions and 3 deletions

View File

@ -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) {

View File

@ -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