diff options
author | Joey Hess <joey@kitenet.net> | 2011-06-22 18:07:45 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-06-22 18:07:45 -0400 |
commit | 944c51ba26efc39416c5f148b6ec36151dc7f42e (patch) | |
tree | badbf7ca754618df5c2e045c4ac3aed12664b0d6 /Version.hs | |
parent | c7a1690f0247fefedc9b735bee1273660fc94e77 (diff) |
improve version checking for v3
Do not set annex.version whenever any command is run. Just do it in init.
This ensures that, if a repo has annex.version=3, it has a git-annex
branch, so we don't have to run a command every time to check for the
branch.
Remove the old ad-hoc logic for v0 and v1, to simplify version checking.
Diffstat (limited to 'Version.hs')
-rw-r--r-- | Version.hs | 37 |
1 files changed, 10 insertions, 27 deletions
diff --git a/Version.hs b/Version.hs index 72d06f663..690e693e2 100644 --- a/Version.hs +++ b/Version.hs @@ -7,14 +7,11 @@ module Version where -import Control.Monad.State (liftIO) import Control.Monad (unless) -import System.Directory import Types import qualified Annex import qualified GitRepo as Git -import Locations import Config type Version = String @@ -31,40 +28,26 @@ upgradableVersions = ["0", "1", "2"] versionField :: String versionField = "annex.version" -getVersion :: Annex Version +getVersion :: Annex (Maybe Version) getVersion = do g <- Annex.gitRepo let v = Git.configGet g versionField "" if not $ null v - then return v - else do - -- version 0 was not recorded in .git/config; - -- such a repo should have an gitAnnexDir but no - -- gitAnnexObjectDir. - -- - -- version 1 may not be recorded if the user - -- forgot to init. Such a repo should have a - -- gitAnnexObjectDir already. - d <- liftIO $ doesDirectoryExist $ gitAnnexDir g - o <- liftIO $ doesDirectoryExist $ gitAnnexObjectDir g - case (d, o) of - (True, False) -> return "0" - (True, True) -> return "1" - _ -> do - setVersion - return defaultVersion + then return $ Just v + else return Nothing setVersion :: Annex () setVersion = setConfig versionField defaultVersion checkVersion :: Annex () -checkVersion = do - v <- getVersion - unless (v `elem` supportedVersions) $ do - error $ "Repository version " ++ v ++ - " is not supported. " ++ - msg v +checkVersion = getVersion >>= handle where + handle Nothing = error "First run: git-annex init" + handle (Just v) = do + unless (v `elem` supportedVersions) $ do + error $ "Repository version " ++ v ++ + " is not supported. " ++ + msg v msg v | v `elem` upgradableVersions = "Upgrade this repository: git-annex upgrade" | otherwise = "Upgrade git-annex." |