summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-06-09 14:40:44 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-06-09 14:40:44 -0400
commit3be798cc348c0869e76c02c972126403927f4475 (patch)
treef748aee098be4d1e072f867b57d045b4d1c4e503
parentacc29b6b9759794a27a0c81315fd0bd5a7f1a052 (diff)
Make lock and unlock work in v6 repos on files whose content is not present.
-rw-r--r--CHANGELOG2
-rw-r--r--Command/Lock.hs2
-rw-r--r--Command/Unlock.hs26
-rw-r--r--doc/bugs/content_not_present__58___cannot_lock.mdwn3
4 files changed, 18 insertions, 15 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 0db6d1e56..f67afb497 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -28,6 +28,8 @@ git-annex (6.20160528) UNRELEASED; urgency=medium
that had not been synced back to master.
(This bug caused broken tree objects to get built by a later git annex
sync.)
+ * Make lock and unlock work in v6 repos on files whose content is not
+ present.
-- Joey Hess <id@joeyh.name> Fri, 27 May 2016 13:12:48 -0400
diff --git a/Command/Lock.hs b/Command/Lock.hs
index 1cd50de7b..f9d903622 100644
--- a/Command/Lock.hs
+++ b/Command/Lock.hs
@@ -45,7 +45,7 @@ startNew file key = ifM (isJust <$> isAnnexLink file)
)
where
go (Just key')
- | key' == key = error "content not present; cannot lock"
+ | key' == key = cont True
| otherwise = errorModified
go Nothing =
ifM (isUnmodified key file)
diff --git a/Command/Unlock.hs b/Command/Unlock.hs
index 2fe1175a8..4dc02642e 100644
--- a/Command/Unlock.hs
+++ b/Command/Unlock.hs
@@ -37,14 +37,9 @@ start :: FilePath -> Key -> CommandStart
start file key = ifM (isJust <$> isAnnexLink file)
( do
showStart "unlock" file
- ifM (inAnnex key)
- ( ifM versionSupportsUnlockedPointers
- ( next $ performNew file key
- , startOld file key
- )
- , do
- warning "content not present; cannot unlock"
- next $ next $ return False
+ ifM versionSupportsUnlockedPointers
+ ( next $ performNew file key
+ , startOld file key
)
, stop
)
@@ -52,11 +47,16 @@ start file key = ifM (isJust <$> isAnnexLink file)
performNew :: FilePath -> Key -> CommandPerform
performNew dest key = do
destmode <- liftIO $ catchMaybeIO $ fileMode <$> getFileStatus dest
- replaceFile dest $ \tmp -> do
- r <- linkFromAnnex key tmp destmode
- case r of
- LinkAnnexOk -> return ()
- _ -> error "unlock failed"
+ replaceFile dest $ \tmp ->
+ ifM (inAnnex key)
+ ( do
+ r <- linkFromAnnex key tmp destmode
+ case r of
+ LinkAnnexOk -> return ()
+ LinkAnnexNoop -> return ()
+ _ -> error "unlock failed"
+ , liftIO $ writePointerFile tmp key destmode
+ )
next $ cleanupNew dest key destmode
cleanupNew :: FilePath -> Key -> Maybe FileMode -> CommandCleanup
diff --git a/doc/bugs/content_not_present__58___cannot_lock.mdwn b/doc/bugs/content_not_present__58___cannot_lock.mdwn
index ddf86f44b..89bf04395 100644
--- a/doc/bugs/content_not_present__58___cannot_lock.mdwn
+++ b/doc/bugs/content_not_present__58___cannot_lock.mdwn
@@ -22,4 +22,5 @@ lock git/bup.git/bupindex.hlink git-annex: content not present; cannot lock
### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)
-
+> Well, that was simply not implemented, but I've done so now. (unlocking
+> too). [[done]] --[[Joey]]