fsck distribution key

This commit is contained in:
Joey Hess 2013-11-23 21:58:39 -04:00
parent b429ea0cea
commit e563c7e6f4
3 changed files with 34 additions and 7 deletions

View file

@ -30,6 +30,7 @@ module Annex.Content (
freezeContent, freezeContent,
thawContent, thawContent,
dirKeys, dirKeys,
withObjectLoc,
) where ) where
import System.IO.Unsafe (unsafeInterleaveIO) import System.IO.Unsafe (unsafeInterleaveIO)

View file

@ -12,9 +12,14 @@ import Assistant.Restart
import qualified Annex import qualified Annex
import Assistant.Alert import Assistant.Alert
import Assistant.DaemonStatus import Assistant.DaemonStatus
import Utility.Url
import Utility.Env import Utility.Env
import Types.Distribution import Types.Distribution
import Logs.Transfer
import Logs.Web
import Annex.Content
import qualified Backend
import qualified Types.Backend
import qualified Types.Key
{- Upgrade without interaction in the webapp. -} {- Upgrade without interaction in the webapp. -}
unattendedUpgrade :: Assistant () unattendedUpgrade :: Assistant ()
@ -40,3 +45,29 @@ checkSuccessfulUpgrade = isJust <$> getEnv upgradedEnv
upgradedEnv :: String upgradedEnv :: String
upgradedEnv = "GIT_ANNEX_UPGRADED" upgradedEnv = "GIT_ANNEX_UPGRADED"
{- Fsck the key to verify the download. -}
distributionDownloadComplete :: GitAnnexDistribution -> Transfer -> Assistant ()
distributionDownloadComplete d t
| transferDirection t == Download = do
maybe noop upgradeToDistribution
=<< liftAnnex (withObjectLoc k fsckit (getM fsckit))
liftAnnex $ setUrlMissing k (distributionUrl d)
| otherwise = noop
where
k = distributionKey d
fsckit f = case Backend.maybeLookupBackendName (Types.Key.keyBackendName k) of
Nothing -> return $ Just f
Just b -> case Types.Backend.fsckKey b of
Nothing -> return $ Just f
Just a -> ifM (a k f)
( return $ Just f
, do
-- unlikely to resume a bad
-- download from web
liftIO $ nukeFile f
return Nothing
)
upgradeToDistribution :: FilePath -> Assistant ()
upgradeToDistribution f = error "TODO"

View file

@ -38,7 +38,7 @@ getConfigStartUpgradeR d = do
let k = distributionKey d let k = distributionKey d
let u = distributionUrl d let u = distributionUrl d
liftAnnex $ setUrlPresent k u liftAnnex $ setUrlPresent k u
hook <- asIO1 $ downloadComplete d hook <- asIO1 $ distributionDownloadComplete d
modifyDaemonStatus_ $ \status -> status modifyDaemonStatus_ $ \status -> status
{ transferHook = M.insert k hook (transferHook status) } { transferHook = M.insert k hook (transferHook status) }
let t = Transfer let t = Transfer
@ -53,11 +53,6 @@ getConfigStartUpgradeR d = do
redirect DashboardR redirect DashboardR
#endif #endif
downloadComplete :: GitAnnexDistribution -> Transfer -> Assistant ()
downloadComplete d t = do
error "TODO"
liftAnnex $ setUrlMissing (distributionKey d) (distributionUrl d)
{- Finish upgrade by starting the new assistant in the same repository this {- Finish upgrade by starting the new assistant in the same repository this
- one is running in, and redirecting to it. -} - one is running in, and redirecting to it. -}
getConfigFinishUpgradeR :: Handler Html getConfigFinishUpgradeR :: Handler Html