checkDiskSpace,
moveAnnex,
linkAnnex,
+ linkAnnex',
LinkAnnexResult(..),
sendAnnex,
prepSendAnnex,
linkAnnex :: Key -> FilePath -> Annex LinkAnnexResult
linkAnnex key src = do
dest <- calcRepo (gitAnnexLocation key)
+ modifyContent dest $ linkAnnex' key src dest
+
+{- Hard links (or copies) src to dest, one of which should be the
+ - annex object. -}
+linkAnnex' :: Key -> FilePath -> FilePath -> Annex LinkAnnexResult
+linkAnnex' key src dest =
ifM (liftIO $ doesFileExist dest)
( return LinkAnnexNoop
- , modifyContent dest $
- ifM (liftIO $ createLinkOrCopy src dest)
- ( do
- Database.Keys.storeInodeCaches key [dest, src]
- return LinkAnnexOk
- , return LinkAnnexFailed
- )
+ , ifM (liftIO $ createLinkOrCopy src dest)
+ ( do
+ thawContent dest
+ Database.Keys.storeInodeCaches key [dest, src]
+ return LinkAnnexOk
+ , return LinkAnnexFailed
+ )
)
data LinkAnnexResult = LinkAnnexOk | LinkAnnexFailed | LinkAnnexNoop
#### implementation todo list
+* linkAnnex should check disk reserve when it falls back to copying the
+ file.
* Reconcile staged changes into the associated files database, whenever
the database is queried.
* See if the cases where the Keys database is not used can be