0831e18372
Wrote nice pure transition calculator, and ugly code to stage its results into the git-annex branch. Also had to split up several Log modules that Annex.Branch needed to use, but that themselves used Annex.Branch. The transition calculator is limited to looking at and changing one file at a time. While this made the implementation relatively easy, it precludes transitions that do stuff like deleting old url log files for keys that are being removed because they are no longer present anywhere.
36 lines
982 B
Haskell
36 lines
982 B
Haskell
{- git-annex trust log, pure operations
|
|
-
|
|
- Copyright 2010-2013 Joey Hess <joey@kitenet.net>
|
|
-
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
-}
|
|
|
|
module Logs.Trust.Pure where
|
|
|
|
import Common.Annex
|
|
import Types.TrustLevel
|
|
import Logs.UUIDBased
|
|
|
|
calcTrustMap :: String -> TrustMap
|
|
calcTrustMap = simpleMap . parseLog (Just . parseTrustLog)
|
|
|
|
{- The trust.log used to only list trusted repos, without a field for the
|
|
- trust status, which is why this defaults to Trusted. -}
|
|
parseTrustLog :: String -> TrustLevel
|
|
parseTrustLog s = maybe Trusted parse $ headMaybe $ words s
|
|
where
|
|
parse "1" = Trusted
|
|
parse "0" = UnTrusted
|
|
parse "X" = DeadTrusted
|
|
parse _ = SemiTrusted
|
|
|
|
showTrustLog :: TrustLevel -> String
|
|
showTrustLog Trusted = "1"
|
|
showTrustLog UnTrusted = "0"
|
|
showTrustLog DeadTrusted = "X"
|
|
showTrustLog SemiTrusted = "?"
|
|
|
|
prop_parse_show_TrustLog :: Bool
|
|
prop_parse_show_TrustLog = all check [minBound .. maxBound]
|
|
where
|
|
check l = parseTrustLog (showTrustLog l) == l
|