diff options
Diffstat (limited to 'Types/Distribution.hs')
-rw-r--r-- | Types/Distribution.hs | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/Types/Distribution.hs b/Types/Distribution.hs index d4de7a79b..a7e2f4c95 100644 --- a/Types/Distribution.hs +++ b/Types/Distribution.hs @@ -1,16 +1,22 @@ {- Data type for a distribution of git-annex - - - Copyright 2013 Joey Hess <id@joeyh.name> + - Copyright 2013, 2017 Joey Hess <id@joeyh.name> - - Licensed under the GNU GPL version 3 or higher. -} module Types.Distribution where +import Utility.PartialPrelude import Types.Key +import Key import Data.Time.Clock import Git.Config (isTrue, boolConfig) +import Data.String.Utils + +type GitAnnexVersion = String + data GitAnnexDistribution = GitAnnexDistribution { distributionUrl :: String , distributionKey :: Key @@ -20,7 +26,39 @@ data GitAnnexDistribution = GitAnnexDistribution } deriving (Read, Show, Eq) -type GitAnnexVersion = String +{- The first line of the info file is in the format old versions of + - git-annex expect to read a GitAnnexDistribution. + - The remainder of the file is in the new format. + - This works because old versions of git-annex used readish to parse + - the file, and that ignores the second line. + -} +formatInfoFile :: GitAnnexDistribution -> String +formatInfoFile d = replace "keyVariant = " "keyBackendName = " (show d) ++ + "\n" ++ formatGitAnnexDistribution d + +parseInfoFile :: String -> Maybe GitAnnexDistribution +parseInfoFile s = case lines s of + (_oldformat:rest) -> parseGitAnnexDistribution (unlines rest) + _ -> Nothing + +formatGitAnnexDistribution :: GitAnnexDistribution -> String +formatGitAnnexDistribution d = unlines + [ distributionUrl d + , key2file (distributionKey d) + , distributionVersion d + , show (distributionReleasedate d) + , maybe "" show (distributionUrgentUpgrade d) + ] + +parseGitAnnexDistribution :: String -> Maybe GitAnnexDistribution +parseGitAnnexDistribution s = case lines s of + (u:k:v:d:uu:_) -> GitAnnexDistribution + <$> pure u + <*> file2key k + <*> pure v + <*> readish d + <*> pure (readish uu) + _ -> Nothing data AutoUpgrade = AskUpgrade | AutoUpgrade | NoAutoUpgrade deriving (Eq) |