status: Include all special remotes in the list of repositories.

Special remotes do not always have a description listed in uuid.log,
and such ones were not listed before.
This commit is contained in:
Joey Hess 2011-11-18 13:22:48 -04:00
parent 1326bb8635
commit c50a5fbeb4
5 changed files with 24 additions and 19 deletions

View file

@ -102,7 +102,7 @@ supported_remote_types = stat "supported remote types" $
remote_list :: TrustLevel -> String -> Stat remote_list :: TrustLevel -> String -> Stat
remote_list level desc = stat n $ lift $ do remote_list level desc = stat n $ lift $ do
us <- uuidList us <- M.keys <$> (M.union <$> uuidMap <*> remoteMap)
rs <- fst <$> trustPartition level us rs <- fst <$> trustPartition level us
s <- prettyPrintUUIDs n rs s <- prettyPrintUUIDs n rs
return $ if null s then "0" else show (length rs) ++ "\n" ++ init s return $ if null s then "0" else show (length rs) ++ "\n" ++ init s

View file

@ -20,20 +20,30 @@ import Types.TrustLevel
import qualified Annex.Branch import qualified Annex.Branch
import qualified Annex import qualified Annex
import Logs.UUIDBased import Logs.UUIDBased
import Logs.UUID
{- Filename of trust.log. -} {- Filename of trust.log. -}
trustLog :: FilePath trustLog :: FilePath
trustLog = "trust.log" trustLog = "trust.log"
{- Returns a list of UUIDs at the specified trust level. -} {- Returns a list of UUIDs that the trustLog indicates have the
- specified trust level.
- Note that the list can be incomplete for SemiTrusted, since that's
- the default. -}
trustGet :: TrustLevel -> Annex [UUID] trustGet :: TrustLevel -> Annex [UUID]
trustGet SemiTrusted = do -- special case; trustMap does not contain all these
others <- M.keys . M.filter (/= SemiTrusted) <$> trustMap
alluuids <- uuidList
return $ alluuids \\ others
trustGet level = M.keys . M.filter (== level) <$> trustMap trustGet level = M.keys . M.filter (== level) <$> trustMap
{- Partitions a list of UUIDs to those matching a TrustLevel and not. -}
trustPartition :: TrustLevel -> [UUID] -> Annex ([UUID], [UUID])
trustPartition level ls
| level == SemiTrusted = do
t <- trustGet Trusted
u <- trustGet UnTrusted
let uncandidates = t ++ u
return $ partition (`notElem` uncandidates) ls
| otherwise = do
candidates <- trustGet level
return $ partition (`elem` candidates) ls
{- Read the trustLog into a map, overriding with any {- Read the trustLog into a map, overriding with any
- values from forcetrust. The map is cached for speed. -} - values from forcetrust. The map is cached for speed. -}
trustMap :: Annex TrustMap trustMap :: Annex TrustMap
@ -72,9 +82,3 @@ trustSet uuid@(UUID _) level = do
showLog showTrust . changeLog ts uuid level . parseLog parseTrust showLog showTrust . changeLog ts uuid level . parseLog parseTrust
Annex.changeState $ \s -> s { Annex.trustmap = Nothing } Annex.changeState $ \s -> s { Annex.trustmap = Nothing }
trustSet NoUUID _ = error "unknown UUID; cannot modify trust level" trustSet NoUUID _ = error "unknown UUID; cannot modify trust level"
{- Partitions a list of UUIDs to those matching a TrustLevel and not. -}
trustPartition :: TrustLevel -> [UUID] -> Annex ([UUID], [UUID])
trustPartition level ls = do
candidates <- trustGet level
return $ partition (`elem` candidates) ls

View file

@ -16,8 +16,7 @@
module Logs.UUID ( module Logs.UUID (
describeUUID, describeUUID,
recordUUID, recordUUID,
uuidMap, uuidMap
uuidList
) where ) where
import qualified Data.Map as M import qualified Data.Map as M
@ -88,6 +87,3 @@ uuidMap = do
return $ M.insertWith' preferold u "" m return $ M.insertWith' preferold u "" m
where where
preferold = flip const preferold = flip const
uuidList :: Annex [UUID]
uuidList = M.keys <$> uuidMap

View file

@ -16,6 +16,7 @@ module Remote (
hasKeyCheap, hasKeyCheap,
remoteTypes, remoteTypes,
remoteMap,
byName, byName,
prettyPrintUUIDs, prettyPrintUUIDs,
remotesWithUUID, remotesWithUUID,
@ -83,6 +84,10 @@ genList = do
u <- getRepoUUID r u <- getRepoUUID r
generate t r u (M.lookup u m) generate t r u (M.lookup u m)
{- Map of UUIDs of Remotes and their names. -}
remoteMap :: Annex (M.Map UUID String)
remoteMap = M.fromList . map (\r -> (uuid r, name r)) <$> genList
{- Looks up a remote by name. (Or by UUID.) Only finds currently configured {- Looks up a remote by name. (Or by UUID.) Only finds currently configured
- git remotes. -} - git remotes. -}
byName :: String -> Annex (Remote Annex) byName :: String -> Annex (Remote Annex)
@ -139,7 +144,6 @@ prettyPrintUUIDs desc uuids = do
| d == n = d | d == n = d
| null d = n | null d = n
| otherwise = n ++ " (" ++ d ++ ")" | otherwise = n ++ " (" ++ d ++ ")"
remoteMap = M.fromList . map (\r -> (uuid r, name r)) <$> genList
findlog m u = M.findWithDefault "" u m findlog m u = M.findWithDefault "" u m
prettify m hereu u prettify m hereu u
| not (null d) = fromUUID u ++ " -- " ++ d | not (null d) = fromUUID u ++ " -- " ++ d

1
debian/changelog vendored
View file

@ -10,6 +10,7 @@ git-annex (3.20111112) UNRELEASED; urgency=low
in constant space. in constant space.
* status: Now displays trusted, untrusted, and semitrusted repositories * status: Now displays trusted, untrusted, and semitrusted repositories
separately. separately.
* status: Include all special remotes in the list of repositories.
* status: Fix --json mode (only the repository lists are currently * status: Fix --json mode (only the repository lists are currently
displayed) displayed)
* status: --fast is back * status: --fast is back