2013-11-21 21:49:56 +00:00
|
|
|
{- Data type for a distribution of git-annex
|
|
|
|
-
|
2017-02-24 22:51:57 +00:00
|
|
|
- Copyright 2013, 2017 Joey Hess <id@joeyh.name>
|
2013-11-21 21:49:56 +00:00
|
|
|
-
|
|
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
|
|
-}
|
|
|
|
|
|
|
|
module Types.Distribution where
|
|
|
|
|
2017-02-24 22:51:57 +00:00
|
|
|
import Utility.PartialPrelude
|
2017-05-16 03:32:17 +00:00
|
|
|
import Utility.Split
|
2013-11-22 04:26:24 +00:00
|
|
|
import Types.Key
|
2017-02-24 22:51:57 +00:00
|
|
|
import Key
|
2013-11-21 21:49:56 +00:00
|
|
|
import Data.Time.Clock
|
2013-11-22 20:04:20 +00:00
|
|
|
import Git.Config (isTrue, boolConfig)
|
2013-11-21 21:49:56 +00:00
|
|
|
|
2017-02-28 16:44:33 +00:00
|
|
|
import Control.Applicative
|
|
|
|
import Prelude
|
2017-02-24 22:51:57 +00:00
|
|
|
|
|
|
|
type GitAnnexVersion = String
|
|
|
|
|
2013-11-21 21:49:56 +00:00
|
|
|
data GitAnnexDistribution = GitAnnexDistribution
|
|
|
|
{ distributionUrl :: String
|
2013-11-22 04:26:24 +00:00
|
|
|
, distributionKey :: Key
|
2013-11-21 21:49:56 +00:00
|
|
|
, distributionVersion :: GitAnnexVersion
|
|
|
|
, distributionReleasedate :: UTCTime
|
|
|
|
, distributionUrgentUpgrade :: Maybe GitAnnexVersion
|
|
|
|
}
|
|
|
|
deriving (Read, Show, Eq)
|
|
|
|
|
2017-02-24 22:51:57 +00:00
|
|
|
{- 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
|
2013-11-22 20:04:20 +00:00
|
|
|
|
|
|
|
data AutoUpgrade = AskUpgrade | AutoUpgrade | NoAutoUpgrade
|
|
|
|
deriving (Eq)
|
|
|
|
|
2015-04-11 04:10:34 +00:00
|
|
|
toAutoUpgrade :: Maybe String -> AutoUpgrade
|
2013-11-22 20:04:20 +00:00
|
|
|
toAutoUpgrade Nothing = AskUpgrade
|
|
|
|
toAutoUpgrade (Just s)
|
|
|
|
| s == "ask" = AskUpgrade
|
|
|
|
| isTrue s == Just True = AutoUpgrade
|
|
|
|
| otherwise = NoAutoUpgrade
|
|
|
|
|
|
|
|
fromAutoUpgrade :: AutoUpgrade -> String
|
|
|
|
fromAutoUpgrade AskUpgrade = "ask"
|
|
|
|
fromAutoUpgrade AutoUpgrade = boolConfig True
|
|
|
|
fromAutoUpgrade NoAutoUpgrade = boolConfig False
|