summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-12-10 16:07:50 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-12-10 16:08:19 -0400
commit23430aeb0b91b10e154e6610d43ae7d40595c2aa (patch)
tree0da13785236c31f0722a58fc66a3c1c96fb4214a
parent4049c257fa88325f6e5496a59536c2bb6fbee8aa (diff)
add generalized linkAnnex'
-rw-r--r--Annex/Content.hs21
-rw-r--r--doc/todo/smudge.mdwn2
2 files changed, 16 insertions, 7 deletions
diff --git a/Annex/Content.hs b/Annex/Content.hs
index 44f1ad0a0..10a59ae95 100644
--- a/Annex/Content.hs
+++ b/Annex/Content.hs
@@ -25,6 +25,7 @@ module Annex.Content (
checkDiskSpace,
moveAnnex,
linkAnnex,
+ linkAnnex',
LinkAnnexResult(..),
sendAnnex,
prepSendAnnex,
@@ -514,15 +515,21 @@ populatePointerFile k obj f = go =<< isPointerFile f
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
diff --git a/doc/todo/smudge.mdwn b/doc/todo/smudge.mdwn
index 6259d4a27..dd990afc7 100644
--- a/doc/todo/smudge.mdwn
+++ b/doc/todo/smudge.mdwn
@@ -325,6 +325,8 @@ files to be unlocked, while the indirect upgrades don't touch the files.
#### 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