fsck: Fix up any broken links and misplaced content caused by the directory hash calculation bug fixed in the last release.
This commit is contained in:
parent
468fecc315
commit
5ab82230f7
2 changed files with 36 additions and 1 deletions
|
@ -10,6 +10,7 @@ module Command.Fsck where
|
|||
import Common.Annex
|
||||
import Command
|
||||
import qualified Annex
|
||||
import qualified Annex.Queue
|
||||
import qualified Remote
|
||||
import qualified Types.Backend
|
||||
import qualified Types.Key
|
||||
|
@ -51,7 +52,8 @@ start from file (key, backend) = do
|
|||
perform :: Key -> FilePath -> Backend -> Maybe Int -> CommandPerform
|
||||
perform key file backend numcopies = check
|
||||
-- order matters
|
||||
[ verifyLocationLog key file
|
||||
[ fixLink key file
|
||||
, verifyLocationLog key file
|
||||
, checkKeySize key
|
||||
, checkBackend backend key
|
||||
, checkKeyNumCopies key file numcopies
|
||||
|
@ -129,6 +131,32 @@ check = sequence >=> dispatch
|
|||
| all (== True) vs = next $ return True
|
||||
| otherwise = stop
|
||||
|
||||
|
||||
{- Checks that the file's symlink points correctly to the content. -}
|
||||
fixLink :: Key -> FilePath -> Annex Bool
|
||||
fixLink key file = do
|
||||
want <- calcGitLink file key
|
||||
have <- liftIO $ readSymbolicLink file
|
||||
when (want /= have) $ do
|
||||
{- Version 3.20120227 had a bug that could cause content
|
||||
- to be stored in the wrong hash directory. Clean up
|
||||
- after the bug by moving the content.
|
||||
-}
|
||||
whenM (liftIO $ doesFileExist file) $
|
||||
unlessM (inAnnex key) $ do
|
||||
showNote $ "fixing content location"
|
||||
dir <- liftIO $ parentDir <$> absPath file
|
||||
let content = absPathFrom dir have
|
||||
liftIO $ allowWrite (parentDir content)
|
||||
moveAnnex key content
|
||||
|
||||
showNote $ "fixing link"
|
||||
liftIO $ createDirectoryIfMissing True (parentDir file)
|
||||
liftIO $ removeFile file
|
||||
liftIO $ createSymbolicLink want file
|
||||
Annex.Queue.add "add" [Param "--force", Param "--"] [file]
|
||||
return True
|
||||
|
||||
{- Checks that the location log reflects the current status of the key,
|
||||
in this repository only. -}
|
||||
verifyLocationLog :: Key -> String -> Annex Bool
|
||||
|
|
7
debian/changelog
vendored
7
debian/changelog
vendored
|
@ -1,3 +1,10 @@
|
|||
git-annex (3.20120310) UNRELEASED; urgency=low
|
||||
|
||||
* fsck: Fix up any broken links and misplaced content caused by the
|
||||
directory hash calculation bug fixed in the last release.
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Sat, 10 Mar 2012 14:03:22 -0400
|
||||
|
||||
git-annex (3.20120309) unstable; urgency=low
|
||||
|
||||
* Fix key directory hash calculation code to behave as it did before
|
||||
|
|
Loading…
Reference in a new issue