summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-10-06 15:55:50 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-10-06 15:55:50 -0400
commitf929d0229c05ebf0fe2c26d443fe6f843f270983 (patch)
treec37167c6f62e9f92492e7a2ada7f2e1e3925a107
parent3e0d2a080333f3566312da0e1982739873603457 (diff)
Add timestamps to trust.log.
-rw-r--r--Trust.hs38
-rw-r--r--debian/changelog1
-rw-r--r--doc/bugs/uuid.log_trust.log_and_remote.log_merge_wackiness.mdwn1
3 files changed, 18 insertions, 22 deletions
diff --git a/Trust.hs b/Trust.hs
index 1920bc617..2971256a4 100644
--- a/Trust.hs
+++ b/Trust.hs
@@ -7,29 +7,29 @@
module Trust (
TrustLevel(..),
- trustLog,
trustGet,
trustSet,
trustPartition
) where
import qualified Data.Map as M
+import Data.Time.Clock.POSIX
import Common.Annex
import Types.TrustLevel
import qualified Annex.Branch
-import UUID
import qualified Annex
+import UUID
+import UUIDLog
+
{- Filename of trust.log. -}
trustLog :: FilePath
trustLog = "trust.log"
{- Returns a list of UUIDs at the specified trust level. -}
trustGet :: TrustLevel -> Annex [UUID]
-trustGet level = do
- m <- trustMap
- return $ M.keys $ M.filter (== level) m
+trustGet level = M.keys . M.filter (== level) <$> trustMap
{- Read the trustLog into a map, overriding with any
- values from forcetrust. The map is cached for speed. -}
@@ -39,35 +39,29 @@ trustMap = do
case cached of
Just m -> return m
Nothing -> do
- overrides <- Annex.getState Annex.forcetrust
- l <- Annex.Branch.get trustLog
- let m = M.fromList $ trustMapParse l ++ overrides
+ overrides <- M.fromList <$> Annex.getState Annex.forcetrust
+ m <- (M.union overrides . simpleMap . parseLog parseTrust) <$>
+ Annex.Branch.get trustLog
Annex.changeState $ \s -> s { Annex.trustmap = Just m }
return m
-{- Trust map parser. -}
-trustMapParse :: String -> [(UUID, TrustLevel)]
-trustMapParse s = map pair $ filter (not . null) $ lines s
+parseTrust :: String -> Maybe TrustLevel
+parseTrust s
+ | length w > 0 = readMaybe $ head w
+ -- back-compat; the trust.log used to only list trusted repos
+ | otherwise = Just Trusted
where
- pair l
- | length w > 1 = (w !! 0, read (w !! 1) :: TrustLevel)
- -- for back-compat; the trust log used to only
- -- list trusted uuids
- | otherwise = (w !! 0, Trusted)
- where
- w = words l
+ w = words s
{- Changes the trust level for a uuid in the trustLog. -}
trustSet :: UUID -> TrustLevel -> Annex ()
trustSet uuid level = do
when (null uuid) $
error "unknown UUID; cannot modify trust level"
+ ts <- liftIO $ getPOSIXTime
Annex.Branch.change trustLog $
- serialize . M.insert uuid level . M.fromList . trustMapParse
+ showLog show . changeLog ts uuid level . parseLog parseTrust
Annex.changeState $ \s -> s { Annex.trustmap = Nothing }
- where
- serialize m = unlines $ map showpair $ M.toList m
- showpair (u, t) = u ++ " " ++ show t
{- Partitions a list of UUIDs to those matching a TrustLevel and not. -}
trustPartition :: TrustLevel -> [UUID] -> Annex ([UUID], [UUID])
diff --git a/debian/changelog b/debian/changelog
index 5eb7870ef..e5f74bec5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -12,6 +12,7 @@ git-annex (3.20110929) UNRELEASED; urgency=low
has been merged.
* Note that older versions of git-annex will display the timestamp as part
of the repository description, which is ugly but otherwise harmless.
+ * Add timestamps to trust.log.
-- Joey Hess <joeyh@debian.org> Thu, 29 Sep 2011 18:58:53 -0400
diff --git a/doc/bugs/uuid.log_trust.log_and_remote.log_merge_wackiness.mdwn b/doc/bugs/uuid.log_trust.log_and_remote.log_merge_wackiness.mdwn
index 5a703b2cb..f300d8708 100644
--- a/doc/bugs/uuid.log_trust.log_and_remote.log_merge_wackiness.mdwn
+++ b/doc/bugs/uuid.log_trust.log_and_remote.log_merge_wackiness.mdwn
@@ -24,6 +24,7 @@ would keep working, ignoring the timestamp.
> update: converted! --[[Joey]]
- trust.log: "uuid trustlevel timestamp" would work; old git-annex
ignores trailing words
+ > update: converted! --[[Joey]]
- remote.log: "uuid key=value ... timestamp" is on the edge but does work
(old git-annex will include the timestamp in the key/value map it builds,
but that should not break anything really)