summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Command/Unused.hs9
-rw-r--r--Test.hs15
-rw-r--r--debian/changelog3
3 files changed, 17 insertions, 10 deletions
diff --git a/Command/Unused.hs b/Command/Unused.hs
index 4353bd075..a643cf8e0 100644
--- a/Command/Unused.hs
+++ b/Command/Unused.hs
@@ -26,6 +26,7 @@ import qualified Git.LsFiles as LsFiles
import qualified Git.DiffTree as DiffTree
import qualified Remote
import qualified Annex.Branch
+import Annex.Link
import Annex.CatFile
import Types.Key
import Types.RefSpec
@@ -214,8 +215,12 @@ withKeysReferenced' mdir initial a = do
Just dir -> inRepo $ LsFiles.inRepo [dir]
go v [] = return v
go v (f:fs) = do
- x <- lookupFile f
- case x of
+ mk <- getM id
+ [ isAnnexLink f
+ , liftIO (isPointerFile f)
+ , catKeyFile f
+ ]
+ case mk of
Nothing -> go v fs
Just k -> do
!v' <- a k f v
diff --git a/Test.hs b/Test.hs
index 7918ff0c1..ba491f3d8 100644
--- a/Test.hs
+++ b/Test.hs
@@ -705,8 +705,8 @@ test_fsck_basic = intmpclonerepo $ do
git_annex "get" [f] @? "get of file failed"
Utility.FileMode.allowWrite f
writeFile f (changedcontent f)
- ifM (annexeval Config.isDirect)
- ( git_annex "fsck" [] @? "fsck failed in direct mode with changed file content"
+ ifM (annexeval Config.isDirect <||> unlockedFiles <$> getTestMode)
+ ( git_annex "fsck" [] @? "fsck failed on unlocked file with changed file content"
, not <$> git_annex "fsck" [] @? "fsck failed to fail with corrupted file content"
)
git_annex "fsck" [] @? "fsck unexpectedly failed again; previous one did not fix problem with " ++ f
@@ -828,7 +828,7 @@ test_unused = intmpclonerepoInDirect $ do
checkunused [unusedfilekey] "with renamed link deleted"
-- unused used to miss symlinks that were deleted or modified
- -- manually, but commited as such.
+ -- manually
writeFile "unusedfile" "unusedcontent"
git_annex "add" ["unusedfile"] @? "add of unusedfile failed"
boolSystem "git" [Param "add", File "unusedfile"] @? "git add failed"
@@ -837,15 +837,14 @@ test_unused = intmpclonerepoInDirect $ do
boolSystem "git" [Param "rm", Param "-qf", File "unusedfile"] @? "git rm failed"
checkunused [unusedfilekey'] "with staged link deleted"
- -- unused used to miss symlinks that were deleted or modified
- -- manually, but not staged as such.
+ -- unused used to false positive on symlinks that were
+ -- deleted or modified manually, but not staged as such
writeFile "unusedfile" "unusedcontent"
git_annex "add" ["unusedfile"] @? "add of unusedfile failed"
boolSystem "git" [Param "add", File "unusedfile"] @? "git add failed"
- unusedfilekey'' <- annexeval $ findkey "unusedfile"
- checkunused [] "with unstaged deleted link"
+ checkunused [] "with staged file"
removeFile "unusedfile"
- checkunused [unusedfilekey''] "with unstaged link deleted"
+ checkunused [] "with staged deleted file"
where
checkunused expectedkeys desc = do
diff --git a/debian/changelog b/debian/changelog
index cab3bc8d4..e5d968d9b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -40,6 +40,9 @@ git-annex (6.20151219) UNRELEASED; urgency=medium
This may break existing parsers of this json output, if there were any.
* whereis --json: Make url list be included in machine-parseable form.
* test: Added --keep-failures option.
+ * unused: Bug fix when a new file was added to the annex, and then
+ removed (but not git rmed). git still has the add staged in this case,
+ so the content should not be unused and was wrongly treated as such.
-- Joey Hess <id@joeyh.name> Sat, 19 Dec 2015 13:31:17 -0400