Auto-upgrade v3 indirect repos to v5 with no changes. This also fixes a problem when a direct mode repo was somehow set to v3 rather than v4, and so the automatic direct mode upgrade to v5 was not done.

This commit is contained in:
Joey Hess 2013-12-29 13:06:23 -04:00
parent 7f6685c16e
commit b1d7474c1d
9 changed files with 18 additions and 29 deletions

View file

@ -15,24 +15,18 @@ import qualified Annex
type Version = String type Version = String
defaultVersion :: Version supportedVersion :: Version
defaultVersion = "3" supportedVersion = "5"
directModeVersion :: Version
directModeVersion = "5"
supportedVersions :: [Version]
supportedVersions = [defaultVersion, directModeVersion]
upgradableVersions :: [Version] upgradableVersions :: [Version]
#ifndef mingw32_HOST_OS #ifndef mingw32_HOST_OS
upgradableVersions = ["0", "1", "2", "4"] upgradableVersions = ["0", "1", "2", "4"]
#else #else
upgradableVersions = ["2", "4"] upgradableVersions = ["2", "3", "4"]
#endif #endif
autoUpgradeableVersions :: [Version] autoUpgradeableVersions :: [Version]
autoUpgradeableVersions = ["4"] autoUpgradeableVersions = ["3", "4"]
versionField :: ConfigKey versionField :: ConfigKey
versionField = annexConfig "version" versionField = annexConfig "version"

View file

@ -16,7 +16,6 @@ import qualified Git.Command
import qualified Git.LsFiles import qualified Git.LsFiles
import Config import Config
import Annex.Direct import Annex.Direct
import Annex.Version
import Annex.Exception import Annex.Exception
def :: [Command] def :: [Command]
@ -69,5 +68,4 @@ cleanup :: CommandCleanup
cleanup = do cleanup = do
showStart "direct" "" showStart "direct" ""
setDirect True setDirect True
setVersion directModeVersion
return True return True

View file

@ -22,7 +22,6 @@ import Annex.Direct
import Annex.Content import Annex.Content
import Annex.Content.Direct import Annex.Content.Direct
import Annex.CatFile import Annex.CatFile
import Annex.Version
import Annex.Exception import Annex.Exception
import Init import Init
import qualified Command.Add import qualified Command.Add
@ -107,7 +106,6 @@ perform = do
cleanup :: CommandCleanup cleanup :: CommandCleanup
cleanup = do cleanup = do
setVersion defaultVersion
showStart "indirect" "" showStart "indirect" ""
showEndOk showEndOk
return True return True

View file

@ -30,9 +30,7 @@ start = do
liftIO $ do liftIO $ do
showPackageVersion showPackageVersion
info "local repository version" $ fromMaybe "unknown" v info "local repository version" $ fromMaybe "unknown" v
info "default repository version" defaultVersion info "supported repository version" supportedVersion
info "supported repository versions" $
unwords supportedVersions
info "upgrade supported from repository versions" $ info "upgrade supported from repository versions" $
unwords upgradableVersions unwords upgradableVersions
stop stop

View file

@ -65,13 +65,12 @@ initialize mdescription = do
checkCrippledFileSystem checkCrippledFileSystem
unlessM isBare $ unlessM isBare $
hookWrite preCommitHook hookWrite preCommitHook
setVersion supportedVersion
ifM (crippledFileSystem <&&> not <$> isBare) ifM (crippledFileSystem <&&> not <$> isBare)
( do ( do
enableDirectMode enableDirectMode
setDirect True setDirect True
setVersion directModeVersion
, do , do
setVersion defaultVersion
-- Handle case where this repo was cloned from a -- Handle case where this repo was cloned from a
-- direct mode repo. -- direct mode repo.
unlessM isBare unlessM isBare

View file

@ -11,12 +11,12 @@ module Upgrade where
import Common.Annex import Common.Annex
import Annex.Version import Annex.Version
import Config
#ifndef mingw32_HOST_OS #ifndef mingw32_HOST_OS
import qualified Upgrade.V0 import qualified Upgrade.V0
import qualified Upgrade.V1 import qualified Upgrade.V1
#endif #endif
import qualified Upgrade.V2 import qualified Upgrade.V2
import qualified Upgrade.V3
import qualified Upgrade.V4 import qualified Upgrade.V4
checkUpgrade :: Version -> Annex () checkUpgrade :: Version -> Annex ()
@ -24,7 +24,7 @@ checkUpgrade = maybe noop error <=< needsUpgrade
needsUpgrade :: Version -> Annex (Maybe String) needsUpgrade :: Version -> Annex (Maybe String)
needsUpgrade v needsUpgrade v
| v `elem` supportedVersions = ok | v == supportedVersion = ok
| v `elem` autoUpgradeableVersions = ifM (upgrade True) | v `elem` autoUpgradeableVersions = ifM (upgrade True)
( ok ( ok
, err "Automatic upgrade failed!" , err "Automatic upgrade failed!"
@ -40,10 +40,7 @@ upgrade :: Bool -> Annex Bool
upgrade automatic = do upgrade automatic = do
upgraded <- go =<< getVersion upgraded <- go =<< getVersion
when upgraded $ when upgraded $
ifM isDirect setVersion supportedVersion
( setVersion directModeVersion
, setVersion defaultVersion
)
return upgraded return upgraded
where where
#ifndef mingw32_HOST_OS #ifndef mingw32_HOST_OS
@ -54,5 +51,6 @@ upgrade automatic = do
go (Just "1") = error "upgrade from v1 on Windows not supported" go (Just "1") = error "upgrade from v1 on Windows not supported"
#endif #endif
go (Just "2") = Upgrade.V2.upgrade go (Just "2") = Upgrade.V2.upgrade
go (Just "3") = Upgrade.V3.upgrade automatic
go (Just "4") = Upgrade.V4.upgrade automatic go (Just "4") = Upgrade.V4.upgrade automatic
go _ = return True go _ = return True

View file

@ -53,14 +53,14 @@ upgrade = do
ifM (fromRepo Git.repoIsLocalBare) ifM (fromRepo Git.repoIsLocalBare)
( do ( do
moveContent moveContent
setVersion defaultVersion setVersion supportedVersion
, do , do
moveContent moveContent
updateSymlinks updateSymlinks
moveLocationLogs moveLocationLogs
Annex.Queue.flush Annex.Queue.flush
setVersion defaultVersion setVersion supportedVersion
) )
Upgrade.V2.upgrade Upgrade.V2.upgrade

View file

@ -11,7 +11,7 @@ import Common.Annex
import Config import Config
import Annex.Direct import Annex.Direct
{- Direct mode only upgrade. -} {- Direct mode only upgrade. v4 to v5 indirect update is a no-op -}
upgrade :: Bool -> Annex Bool upgrade :: Bool -> Annex Bool
upgrade automatic = ifM isDirect upgrade automatic = ifM isDirect
( do ( do
@ -19,5 +19,5 @@ upgrade automatic = ifM isDirect
showAction "v4 to v5" showAction "v4 to v5"
setDirect True setDirect True
return True return True
, return False , return True
) )

4
debian/changelog vendored
View file

@ -10,6 +10,10 @@ git-annex (5.20131222) UNRELEASED; urgency=medium
* Added new external special remote interface. * Added new external special remote interface.
* addurl, importfeed: Sanitize | and some other symbols and special * addurl, importfeed: Sanitize | and some other symbols and special
characters. characters.
* Auto-upgrade v3 indirect repos to v5 with no changes.
This also fixes a problem when a direct mode repo was somehow set to v3
rather than v4, and so the automatic direct mode upgrade to v5 was not
done.
-- Joey Hess <joeyh@debian.org> Tue, 24 Dec 2013 13:54:32 -0400 -- Joey Hess <joeyh@debian.org> Tue, 24 Dec 2013 13:54:32 -0400