summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Command/Unlock.hs16
-rw-r--r--debian/changelog2
2 files changed, 12 insertions, 6 deletions
diff --git a/Command/Unlock.hs b/Command/Unlock.hs
index 0070410a6..8cc72f3a3 100644
--- a/Command/Unlock.hs
+++ b/Command/Unlock.hs
@@ -26,15 +26,17 @@ seek = withFilesInGit $ whenAnnexed start
{- The unlock subcommand replaces the symlink with a copy of the file's
- content. -}
start :: FilePath -> Key -> CommandStart
-start file key = do
+start file key = stopUnless (inAnnex key) $ do
showStart "unlock" file
- next $ perform file key
+ ifM (checkDiskSpace Nothing key 0)
+ ( next $ perform file key
+ , do
+ warning "not enough disk space to copy file"
+ next $ next $ return False
+ )
perform :: FilePath -> Key -> CommandPerform
perform dest key = do
- unlessM (inAnnex key) $ error "content not present"
- unlessM (checkDiskSpace Nothing key 0) $ error "cannot unlock"
-
src <- calcRepo $ gitAnnexLocation key
tmpdest <- fromRepo $ gitAnnexTmpObjectLocation key
liftIO $ createDirectoryIfMissing True (parentDir tmpdest)
@@ -46,5 +48,7 @@ perform dest key = do
moveFile tmpdest dest
thawContent dest
next $ return True
- , error "copy failed!"
+ , do
+ warning "copy failed!"
+ next $ return False
)
diff --git a/debian/changelog b/debian/changelog
index 3a8ab302e..ed52e7ad9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -25,6 +25,8 @@ git-annex (5.20140718) UNRELEASED; urgency=medium
* Dropping an object from a bup special remote now deletes the git branch
for the object, although of course the object's content cannot be deleted
due to the nature of bup.
+ * unlock: Better error handling; continue past files that are not available
+ or cannot be unlocked due to disk space, and try all specified files.
-- Joey Hess <joeyh@debian.org> Mon, 21 Jul 2014 14:41:26 -0400