summaryrefslogtreecommitdiff
path: root/Locations.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-01-28 16:01:19 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-01-28 16:43:11 -0400
commitb037f324aa531201a8ef6d1b4dc56efed622a12e (patch)
treeb0ad70c3772c4663048f044062e8e0cd5d4d8238 /Locations.hs
parentbbbc725c45f0b25c8da92d002a0ca3ffd2b8efdc (diff)
rework annexed object locking in direct mode & support Windows
Seems that locking of annexed objects when they're being dropped was broken in direct mode: * When taking the lock before dropping, it created the .git/annex/objects file, as an empty file. It seems that the dropping code deleted that, but that is not right, and for all I know could in some situation cause a corrupted object to leak out. * When the lock was checked, it actually tried to open each direct mode file, and checked if it was locked. Not the same lock used above, and could also fail if some consumer of the file locked it. Fixed this, and added windows support by switching direct mode to lock a .lck file.
Diffstat (limited to 'Locations.hs')
-rw-r--r--Locations.hs7
1 files changed, 7 insertions, 0 deletions
diff --git a/Locations.hs b/Locations.hs
index 47a009590..1173677cf 100644
--- a/Locations.hs
+++ b/Locations.hs
@@ -14,6 +14,7 @@ module Locations (
objectDir,
gitAnnexLocation,
gitAnnexLink,
+ gitAnnexContentLock,
gitAnnexMapping,
gitAnnexInodeCache,
gitAnnexInodeSentinal,
@@ -142,6 +143,12 @@ gitAnnexLink file key r = do
where
whoops = error $ "unable to normalize " ++ file
+{- File used to lock a key's content. -}
+gitAnnexContentLock :: Key -> Git.Repo -> GitConfig -> IO FilePath
+gitAnnexContentLock key r config = do
+ loc <- gitAnnexLocation key r config
+ return $ loc ++ ".lck"
+
{- File that maps from a key to the file(s) in the git repository.
- Used in direct mode. -}
gitAnnexMapping :: Key -> Git.Repo -> GitConfig -> IO FilePath