fsck --from
Fscking a remote is now supported. It's done by retrieving the contents of the specified files from the remote, and checking them, so can be an expensive operation. (Several optimisations are possible, to speed it up, of course.. This is the slow and stupid remote fsck to start with.) Still, if the remote is a special remote, or a git repository that you cannot run fsck in locally, it's nice to have the ability to fsck it. If you have any directory special remotes, now would be a good time to fsck them, in case you were hit by the data loss bug fixed in the previous release!
This commit is contained in:
parent
d36525e974
commit
90319afa41
8 changed files with 131 additions and 44 deletions
|
@ -9,7 +9,6 @@ module Backend.SHA (backends) where
|
|||
|
||||
import Common.Annex
|
||||
import qualified Annex
|
||||
import Annex.Content
|
||||
import Types.Backend
|
||||
import Types.Key
|
||||
import qualified Build.SysConfig as SysConfig
|
||||
|
@ -97,18 +96,14 @@ keyValueE size file = keyValue size file >>= maybe (return Nothing) addE
|
|||
| otherwise = naiveextension
|
||||
|
||||
{- A key's checksum is checked during fsck. -}
|
||||
checkKeyChecksum :: SHASize -> Key -> Annex Bool
|
||||
checkKeyChecksum size key = do
|
||||
checkKeyChecksum :: SHASize -> Key -> FilePath -> Annex Bool
|
||||
checkKeyChecksum size key file = do
|
||||
fast <- Annex.getState Annex.fast
|
||||
file <- inRepo $ gitAnnexLocation key
|
||||
present <- liftIO $ doesFileExist file
|
||||
if not present || fast
|
||||
then return True
|
||||
else check =<< shaN size file
|
||||
else check <$> shaN size file
|
||||
where
|
||||
check s
|
||||
| s == dropExtension (keyName key) = return True
|
||||
| otherwise = do
|
||||
dest <- moveBad key
|
||||
warning $ "Bad file content; moved to " ++ dest
|
||||
return False
|
||||
| s == dropExtension (keyName key) = True
|
||||
| otherwise = False
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue