LGTM, thanks!

On Tuesday, August 16, 2016 at 1:15:38 PM UTC+1, Brian Foley wrote:
>
> commit d55c7e85ac87be0529d2d84f8ed0f72c18f31e8f 
> Merge: 3a366d6 6a2114c 
> Author: Brian Foley <[email protected]> 
> Date:   Tue Aug 16 13:14:32 2016 +0100 
>
>     Merge branch 'stable-2.16' into stable-2.17 
>     
>     * stable-2.16 
>       Improve error reporting in _VerifyClientCertificates 
>       Simplify some inscrutable map/map/ifilter/zip code 
>       Avoid overuse of operator in watcher *.py 
>       Sprinkle some more list comprehensions 
>       Replace map/partial with list comprehension 
>       Replace uses of map/lambda with more Pythonic code 
>       Replace map(operator.attrgetter, ...) uses 
>       Fix typos in gnt-cluster man page 
>       Hide errors for expected inotify failures in unittest 
>       Add gnt-instance rename --force option 
>       Improve documentation for gnt-instance failover 
>       Allow master failover to ignore offline nodes 
>       Fix LogicalVolume code to work with older /sbin/lvs 
>       Shorten verifyMasterVote failure message 
>       Adding a confirmation before gnt-node --offline no 
>       Removed unnecessary dependency from rpc in cli 
>       Refactor cli exception to its appropriate module 
>       Clean-up of code and fix of pylint warnings 
>       Use fork instead of spawnv in the watcher 
>       Make 'make pep8' happy 
>     
>     Manually fix merge conflicts in src/Ganeti/Utils.py 
>     
>     Signed-off-by: Brian Foley <[email protected]> 
>
> diff --cc src/Ganeti/Utils.hs 
> index 42a8db9,47f65c1..0c2a0ac 
> --- a/src/Ganeti/Utils.hs 
> +++ b/src/Ganeti/Utils.hs 
> @@@ -97,16 -96,10 +97,17 @@@ module Ganeti.Util 
>     , ensurePermissions 
>     , ordNub 
>     , isSubsequenceOf 
>  +  , maxBy 
>  +  , threadDelaySeconds 
>  +  , monotoneFind 
>  +  , iterateJust 
>  +  , partitionM 
> +   , frequency 
>     ) where 
>   
>  -import Control.Applicative 
>  +import Prelude () 
>  +import Ganeti.Prelude 
>  + 
>   import Control.Concurrent 
>   import Control.Exception (try, bracket) 
>   import Control.Monad 
> @@@ -116,17 -110,7 +117,19 @@@ import Data.Char (toUpper, isAlphaNum, 
>   import qualified Data.Either as E 
>   import Data.Function (on) 
>   import Data.IORef 
>  -import Data.List 
>  +#if MIN_VERSION_base(4,8,0) 
>  +import Data.List hiding (isSubsequenceOf) 
>  +#else 
>  +import Data.List ( intercalate 
>  +                 , find 
>  +                 , foldl' 
> ++                 , group 
>  +                 , transpose 
> ++                 , sort 
>  +                 , sortBy 
>  +                 , isPrefixOf 
>  +                 , maximumBy) 
>  +#endif 
>   import qualified Data.Map as M 
>   import Data.Maybe (fromMaybe) 
>   import qualified Data.Set as S 
> @@@ -846,41 -820,7 +849,46 @@@ isSubsequenceOf _     [ 
>   isSubsequenceOf a@(x:a') (y:b) | x == y    = isSubsequenceOf a' b 
>                                  | otherwise = isSubsequenceOf a b 
>   
>  +-- | Compute the maximum of two elements by a given order. 
>  +-- As opposed to using `maximumBy`, is function is guaranteed 
>  +-- to be total, as the signature enforces a non-empty list of 
>  +-- arguments. 
>  +maxBy :: (a -> a -> Ordering) -> a -> a -> a 
>  +maxBy ord a b = maximumBy ord [a, b] 
>  + 
>  +-- | Given a predicate that is monotone on a list, find the 
>  +-- first list entry where it holds, if any. Use the monotonicity 
>  +-- property to evaluate the property at as few places as possible, 
>  +-- guided by the heuristics provided. 
>  +monotoneFind :: ([a] -> Int) -> (a -> Bool) -> [a] -> Maybe a 
>  +monotoneFind heuristics p xs = 
>  +  let count = heuristics xs 
>  +  in case () of 
>  +    _ | x:xs' <- drop count xs 
>  +        -> if p x 
>  +             then (`mplus` Just x) . monotoneFind heuristics p 
>  +                  $ take count xs 
>  +             else monotoneFind heuristics p xs' 
>  +    _ | x:xs' <- xs 
>  +        -> if p x 
>  +             then Just x 
>  +             else monotoneFind heuristics p xs' 
>  +    _ -> Nothing 
>  + 
>  +-- | Iterate a function as long as it returns Just values, collecting 
>  +-- all the Justs that where obtained. 
>  +iterateJust :: (a -> Maybe a) -> a -> [a] 
>  +iterateJust f a = a : maybe [] (iterateJust f) (f a) 
>  + 
>  +-- | A version of partition with a monadic predicate 
>  +-- Implementation taken from David Fox's Extras package. 
>  +partitionM :: (Monad m) => (a -> m Bool) -> [a] -> m ([a], [a]) 
>  +partitionM p xs = foldM f ([], []) xs 
>  +  where f (a, b) x = do 
>  +        pv <- p x 
>  +        return $ if pv then (x : a, b) else (a, x : b) 
> ++ 
> + -- | Returns a list of tuples of elements and the number of times they 
> occur 
> + -- in a list 
> + frequency :: Ord t => [t] -> [(Int, t)] 
> + frequency xs = map (\x -> (length x, head x)) . group . sort $ xs 
>

Reply via email to