summaryrefslogtreecommitdiff
path: root/Annex/Content.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Annex/Content.hs')
-rw-r--r--Annex/Content.hs21
1 files changed, 17 insertions, 4 deletions
diff --git a/Annex/Content.hs b/Annex/Content.hs
index f4daa3813..e99dfb1dd 100644
--- a/Annex/Content.hs
+++ b/Annex/Content.hs
@@ -27,6 +27,7 @@ module Annex.Content (
linkAnnex,
linkAnnex',
LinkAnnexResult(..),
+ unlinkAnnex,
checkedCopyFile,
sendAnnex,
prepSendAnnex,
@@ -512,7 +513,6 @@ populatePointerFile k obj f = go =<< isPointerFile f
liftIO $ writeFile f (formatPointer k)
go _ = return ()
-
{- Hard links a file into .git/annex/objects/, falling back to a copy
- if necessary. Does nothing if the object file already exists.
-
@@ -527,17 +527,22 @@ linkAnnex key src = do
modifyContent dest $ linkAnnex' key src dest
{- Hard links (or copies) src to dest, one of which should be the
- - annex object. -}
+ - annex object. Updates inode cache for src and for dest when it's
+ - changed. -}
linkAnnex' :: Key -> FilePath -> FilePath -> Annex LinkAnnexResult
linkAnnex' key src dest =
ifM (liftIO $ doesFileExist dest)
- ( return LinkAnnexNoop
+ ( do
+ Database.Keys.storeInodeCaches key [src]
+ return LinkAnnexNoop
, ifM (linkAnnex'' key src dest)
( do
thawContent dest
Database.Keys.storeInodeCaches key [dest, src]
return LinkAnnexOk
- , return LinkAnnexFailed
+ , do
+ Database.Keys.storeInodeCaches key [src]
+ return LinkAnnexFailed
)
)
@@ -560,6 +565,14 @@ linkAnnex'' key src dest = catchBoolIO $ do
copy
#endif
+{- Removes the annex object file for a key. Lowlevel. -}
+unlinkAnnex :: Key -> Annex ()
+unlinkAnnex key = do
+ obj <- calcRepo $ gitAnnexLocation key
+ modifyContent obj $ do
+ secureErase obj
+ liftIO $ nukeFile obj
+
{- Checks disk space before copying. -}
checkedCopyFile :: Key -> FilePath -> FilePath -> Annex Bool
checkedCopyFile key src dest = catchBoolIO $