summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Command/Unlock.hs9
-rw-r--r--debian/changelog1
-rw-r--r--test.hs10
3 files changed, 16 insertions, 4 deletions
diff --git a/Command/Unlock.hs b/Command/Unlock.hs
index 0e55585ae..7c1625bf0 100644
--- a/Command/Unlock.hs
+++ b/Command/Unlock.hs
@@ -12,6 +12,7 @@ import System.Directory hiding (copyFile)
import Command
import qualified Annex
+import qualified Backend
import Types
import Messages
import Locations
@@ -31,8 +32,12 @@ seek = [withFilesInGit start]
- content. -}
start :: CommandStartString
start file = isAnnexed file $ \(key, _) -> do
- showStart "unlock" file
- return $ Just $ perform file key
+ inbackend <- Backend.hasKey key
+ if not inbackend
+ then return Nothing
+ else do
+ showStart "unlock" file
+ return $ Just $ perform file key
perform :: FilePath -> Key -> CommandPerform
perform dest key = do
diff --git a/debian/changelog b/debian/changelog
index ed0b8923e..b899fc4b4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,6 +5,7 @@ git-annex (0.18) UNRELEASED; urgency=low
(Did not affect ssh remotes.)
* fsck: Fix bug in moving of corrupted files to .git/annex/bad/
* migrate: Fix support for --backend option.
+ * unlock: Fix behavior when file content is not present.
* Test suite improvements. Current top-level test coverage: 80%
-- Joey Hess <joeyh@debian.org> Tue, 11 Jan 2011 16:05:25 -0400
diff --git a/test.hs b/test.hs
index 326fa549f..ee29855b4 100644
--- a/test.hs
+++ b/test.hs
@@ -215,6 +215,12 @@ test_copy = "git-annex copy" ~: TestCase $ intmpclonerepo $ do
test_lock :: Test
test_lock = "git-annex unlock/lock" ~: intmpclonerepo $ do
+ -- regression test: unlock of not present file should skip it
+ annexed_notpresent annexedfile
+ r <- git_annex "unlock" ["-q", annexedfile]
+ r @? "unlock failed with not present file"
+ annexed_notpresent annexedfile
+
git_annex "get" ["-q", annexedfile] @? "get of file failed"
annexed_present annexedfile
git_annex "unlock" ["-q", annexedfile] @? "unlock failed"
@@ -232,8 +238,8 @@ test_lock = "git-annex unlock/lock" ~: intmpclonerepo $ do
runchecks [checklink, checkunwritable] annexedfile
c <- readFile annexedfile
assertEqual ("content of modified file") c (changedcontent annexedfile)
- r <- git_annex "drop" ["-q", annexedfile]
- (not r) @? "drop wrongly succeeded with no known copy of modified file"
+ r' <- git_annex "drop" ["-q", annexedfile]
+ not r' @? "drop wrongly succeeded with no known copy of modified file"
test_edit :: Test
test_edit = "git-annex edit/commit" ~: TestList [t False, t True]