diff options
-rw-r--r-- | kiki.hs | 20 |
1 files changed, 15 insertions, 5 deletions
@@ -997,17 +997,20 @@ flattenKeys isPublic db = Message $ concatMap (map packet . flattenTop "" isPubl | |||
997 | isSecret _ = False | 997 | isSecret _ = False |
998 | 998 | ||
999 | 999 | ||
1000 | concatSort fname getp f = concat . sortByHint fname getp . map f | ||
1001 | |||
1000 | flattenTop :: FilePath -> Bool -> KeyData -> [MappedPacket] | 1002 | flattenTop :: FilePath -> Bool -> KeyData -> [MappedPacket] |
1001 | flattenTop fname ispub (KeyData key sigs uids subkeys) = | 1003 | flattenTop fname ispub (KeyData key sigs uids subkeys) = |
1002 | unk ispub key : ( concatMap (flattenUid fname ispub (snd uids)) (Map.assocs (fst uids)) | 1004 | unk ispub key : |
1003 | ++ concatMap (flattenSub fname ispub) (Map.elems subkeys)) | 1005 | ( concatSort fname head (flattenUid fname ispub (snd uids)) (Map.assocs (fst uids)) |
1006 | ++ concatSort fname head (flattenSub fname ispub) (Map.elems subkeys)) | ||
1004 | 1007 | ||
1005 | flattenUid :: FilePath -> Bool -> OriginMap -> (String,[SigAndTrust]) -> [MappedPacket] | 1008 | flattenUid :: FilePath -> Bool -> OriginMap -> (String,[SigAndTrust]) -> [MappedPacket] |
1006 | flattenUid fname ispub om (str,sigs) = | 1009 | flattenUid fname ispub om (str,sigs) = |
1007 | MappedPacket (UserIDPacket str) om : concatMap (unsig fname ispub) sigs | 1010 | MappedPacket (UserIDPacket str) om : concatSort fname head (unsig fname ispub) sigs |
1008 | 1011 | ||
1009 | flattenSub :: FilePath -> Bool -> SubKey -> [MappedPacket] | 1012 | flattenSub :: FilePath -> Bool -> SubKey -> [MappedPacket] |
1010 | flattenSub fname ispub (SubKey key sigs) = unk ispub key: concatMap (unsig fname ispub) sigs | 1013 | flattenSub fname ispub (SubKey key sigs) = unk ispub key: concatSort fname head (unsig fname ispub) sigs |
1011 | 1014 | ||
1012 | unk :: Bool -> MappedPacket -> MappedPacket | 1015 | unk :: Bool -> MappedPacket -> MappedPacket |
1013 | unk isPublic = if isPublic then toPacket secretToPublic else id | 1016 | unk isPublic = if isPublic then toPacket secretToPublic else id |
@@ -1032,6 +1035,13 @@ showPacket p | isKey p = (if is_subkey p | |||
1032 | | otherwise = showPacket0 p | 1035 | | otherwise = showPacket0 p |
1033 | showPacket0 p = concat . take 1 $ words (show p) | 1036 | showPacket0 p = concat . take 1 $ words (show p) |
1034 | 1037 | ||
1038 | sortByHint fname f = sortBy (comparing gethint) | ||
1039 | where | ||
1040 | gethint = maybe defnum originalNum . Map.lookup fname . locations . f | ||
1041 | defnum = -1 | ||
1042 | |||
1043 | keyPacket (KeyData k _ _ _) = k | ||
1044 | |||
1035 | writeOutKeyrings db = do | 1045 | writeOutKeyrings db = do |
1036 | let ks = Map.elems db | 1046 | let ks = Map.elems db |
1037 | fs = Map.keys (foldr unionfiles Map.empty ks) | 1047 | fs = Map.keys (foldr unionfiles Map.empty ks) |
@@ -1041,7 +1051,7 @@ writeOutKeyrings db = do | |||
1041 | let s = do | 1051 | let s = do |
1042 | f <- fs | 1052 | f <- fs |
1043 | let x = do | 1053 | let x = do |
1044 | d@(KeyData p _ _ _) <- filter (fromfile f) ks | 1054 | d@(KeyData p _ _ _) <- filter (fromfile f) (sortByHint f keyPacket ks) |
1045 | n <- maybeToList $ Map.lookup f (locations p) | 1055 | n <- maybeToList $ Map.lookup f (locations p) |
1046 | flattenTop f (originallyPublic n) d | 1056 | flattenTop f (originallyPublic n) d |
1047 | changes = filter notnew x | 1057 | changes = filter notnew x |