diff options
author | Junio C Hamano <junkio@cox.net> | 2006-10-19 01:28:47 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-10-19 01:28:47 -0700 |
commit | 3b463c3f02f83ef0bce2d5daa193459418e5258f (patch) | |
tree | b9be594d708d5a343deece2f9f572f852e40bab7 | |
parent | a9cb3c6ecb97c4734423045f47899e03f135d3bd (diff) | |
download | git-3b463c3f02f83ef0bce2d5daa193459418e5258f.tar.gz |
ref-log: fix D/F conflict coming from deleted refs.
After deleting a branch l/k, you should be able to create a
branch l. Earlier we added remove_empty_directories() on the
ref creation side to remove leftover .git/refs/l directory but
we also need a matching code to remove .git/logs/refs/l
directory.
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | refs.c | 14 | ||||
-rwxr-xr-x | t/t3210-pack-refs.sh | 2 |
2 files changed, 14 insertions, 2 deletions
@@ -733,8 +733,18 @@ static int log_ref_write(struct ref_lock *lock, if (logfd < 0) { if (!(oflags & O_CREAT) && errno == ENOENT) return 0; - return error("Unable to append to %s: %s", - lock->log_file, strerror(errno)); + + if ((oflags & O_CREAT) && errno == EISDIR) { + if (remove_empty_directories(lock->log_file)) { + return error("There are still logs under '%s'", + lock->log_file); + } + logfd = open(lock->log_file, oflags, 0666); + } + + if (logfd < 0) + return error("Unable to append to %s: %s", + lock->log_file, strerror(errno)); } committer = git_committer_info(1); diff --git a/t/t3210-pack-refs.sh b/t/t3210-pack-refs.sh index a4fbfda467..b1e9f2eed2 100755 --- a/t/t3210-pack-refs.sh +++ b/t/t3210-pack-refs.sh @@ -11,6 +11,8 @@ semantic is still the same. ' . ./test-lib.sh +echo '[core] logallrefupdates = true' >>.git/config + test_expect_success \ 'prepare a trivial repository' \ 'echo Hello > A && |