Skip to content
Snippets Groups Projects
Upgrade.hs 1.91 KiB
Newer Older
Joey Hess's avatar
Joey Hess committed
{- git-annex upgrade support
 -
 - Copyright 2010, 2013 Joey Hess <id@joeyh.name>
Joey Hess's avatar
Joey Hess committed
 -
 - Licensed under the GNU GPL version 3 or higher.
 -}

{-# LANGUAGE CPP #-}

Joey Hess's avatar
Joey Hess committed
module Upgrade where

Joey Hess's avatar
Joey Hess committed
import Annex.Version
Joey Hess's avatar
v7  
Joey Hess committed
import Types.RepoVersion
#ifndef mingw32_HOST_OS
Joey Hess's avatar
Joey Hess committed
import qualified Upgrade.V0
import qualified Upgrade.V1
Joey Hess's avatar
Joey Hess committed
import qualified Upgrade.V2
import qualified Upgrade.V4
import qualified Upgrade.V5
Joey Hess's avatar
v7  
Joey Hess committed
import qualified Upgrade.V6
Joey Hess's avatar
Joey Hess committed

import qualified Data.Map as M

Joey Hess's avatar
v7  
Joey Hess committed
checkUpgrade :: RepoVersion -> Annex ()
checkUpgrade = maybe noop giveup <=< needsUpgrade
Joey Hess's avatar
v7  
Joey Hess committed
needsUpgrade :: RepoVersion -> Annex (Maybe String)
Joey Hess's avatar
Joey Hess committed
needsUpgrade v
	| v `elem` supportedVersions = ok
	| otherwise = case M.lookup v autoUpgradeableVersions of
		Nothing
			| v `elem` upgradableVersions ->
				err "Upgrade this repository: git-annex upgrade"
			| otherwise ->
				err "Upgrade git-annex."
		Just newv -> ifM (upgrade True newv)
			( ok
			, err "Automatic upgrade failed!"
			)
Joey Hess's avatar
v7  
Joey Hess committed
	err msg = return $ Just $ "Repository version " ++
		show (fromRepoVersion v) ++
		" is not supported. " ++ msg
Joey Hess's avatar
Joey Hess committed
	ok = return Nothing
Joey Hess's avatar
v7  
Joey Hess committed
upgrade :: Bool -> RepoVersion -> Annex Bool
	upgraded <- go =<< getVersion
	when upgraded $
Joey Hess's avatar
Joey Hess committed
  where
#ifndef mingw32_HOST_OS
Joey Hess's avatar
v7  
Joey Hess committed
	go (Just (RepoVersion 0)) = Upgrade.V0.upgrade
	go (Just (RepoVersion 1)) = Upgrade.V1.upgrade
Joey Hess's avatar
v7  
Joey Hess committed
	go (Just (RepoVersion 0)) = giveup "upgrade from V0 on Windows not supported"
	go (Just (RepoVersion 1)) = giveup "upgrade from V1 on Windows not supported"
Joey Hess's avatar
v7  
Joey Hess committed
	go (Just (RepoVersion 2)) = Upgrade.V2.upgrade
	go (Just (RepoVersion 3)) = Upgrade.V3.upgrade automatic
	go (Just (RepoVersion 4)) = Upgrade.V4.upgrade automatic
	go (Just (RepoVersion 5)) = Upgrade.V5.upgrade automatic
	go (Just (RepoVersion 6)) = Upgrade.V6.upgrade automatic
Joey Hess's avatar
Joey Hess committed
	go _ = return True