diff --git a/CHANGELOG b/CHANGELOG index 0db6d1e567..f67afb497b 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 Fri, 27 May 2016 13:12:48 -0400 diff --git a/Command/Lock.hs b/Command/Lock.hs index 1cd50de7bb..f9d9036221 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 2fe1175a8b..4dc02642e5 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 ddf86f44b3..89bf043959 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]]