Merge branch 'nd/lockfile-absolute'
authorJunio C Hamano <gitster@pobox.com>
Wed, 7 Jan 2015 20:56:01 +0000 (12:56 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 7 Jan 2015 20:56:01 +0000 (12:56 -0800)
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

lockfile.c
t/t2107-update-index-basic.sh
index 4f16ee78ce3dbc263a762a8800dfe9ddfcfaecd5..988927775169487df7677a17465b512a567488dd 100644 (file)
@@ -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) {
index 1bafb9098c7fae33969e9231fbdee1c0370830a1..dfe02f48183ad77a93d72c0f5e952380b63a9229 100755 (executable)
@@ -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