summaryrefslogtreecommitdiff
path: root/lockfile.c
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2015-01-07 12:56:01 -0800
committerLibravatar Junio C Hamano <gitster@pobox.com>2015-01-07 12:56:01 -0800
commitbb86a40e06ce1caafd74cc9fc87db4d5da8e3d07 (patch)
tree30ca25a9391bafdd9041e6ba9e6a7448b0838123 /lockfile.c
parentMerge branch 'jc/merge-bases' (diff)
parentlockfile.c: store absolute path (diff)
downloadtgif-bb86a40e06ce1caafd74cc9fc87db4d5da8e3d07.tar.xz
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
Diffstat (limited to 'lockfile.c')
-rw-r--r--lockfile.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/lockfile.c b/lockfile.c
index 4f16ee78ce..9889277751 100644
--- a/lockfile.c
+++ b/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) {