Merge pull request #246 from carlosmn/keep-lock Keep the lockfile if we fail to lock it
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
diff --git a/src/filebuf.c b/src/filebuf.c
index d0579b1..ca13e61 100644
--- a/src/filebuf.c
+++ b/src/filebuf.c
@@ -75,7 +75,7 @@ void git_filebuf_cleanup(git_filebuf *file)
if (file->fd >= 0)
gitfo_close(file->fd);
- if (file->path_lock && gitfo_exists(file->path_lock) == GIT_SUCCESS)
+ if (file->fd >= 0 && file->path_lock && gitfo_exists(file->path_lock) == GIT_SUCCESS)
gitfo_unlink(file->path_lock);
if (file->digest)
diff --git a/tests/t00-core.c b/tests/t00-core.c
index 9498178..5cd4025 100644
--- a/tests/t00-core.c
+++ b/tests/t00-core.c
@@ -26,6 +26,7 @@
#include "vector.h"
#include "fileops.h"
+#include "filebuf.h"
BEGIN_TEST(string0, "compare prefixes")
must_be_true(git__prefixcmp("", "") == 0);
@@ -661,6 +662,15 @@ BEGIN_TEST(dirent4, "make sure that strange looking filenames ('..c') are traver
must_pass(knockdown(&odd));
END_TEST
+BEGIN_TEST(filebuf0, "make sure git_filebuf_open doesn't delete an existing lock")
+ git_filebuf file;
+ char test[] = "test", testlock[] = "test.lock";
+
+ must_pass(gitfo_creat(testlock, 0744));
+ must_fail(git_filebuf_open(&file, test, 0));
+ must_pass(gitfo_exists(testlock));
+ must_pass(gitfo_unlink(testlock));
+END_TEST
BEGIN_SUITE(core)
ADD_TEST(string0);
@@ -683,4 +693,6 @@ BEGIN_SUITE(core)
ADD_TEST(dirent2);
ADD_TEST(dirent3);
ADD_TEST(dirent4);
+
+ ADD_TEST(filebuf0);
END_SUITE