Revision 21839f47 htools/htools.hs

b/htools/htools.hs
4 4

  
5 5
{-
6 6

  
7
Copyright (C) 2011 Google Inc.
7
Copyright (C) 2011, 2012 Google Inc.
8 8

  
9 9
This program is free software; you can redistribute it and/or modify
10 10
it under the terms of the GNU General Public License as published by
......
31 31
import System.IO
32 32

  
33 33
import Ganeti.HTools.Utils
34
import Ganeti.HTools.CLI (OptType, Options, parseOpts)
34 35
import qualified Ganeti.HTools.Program.Hail as Hail
35 36
import qualified Ganeti.HTools.Program.Hbal as Hbal
36 37
import qualified Ganeti.HTools.Program.Hscan as Hscan
37 38
import qualified Ganeti.HTools.Program.Hspace as Hspace
38 39

  
39 40
-- | Supported binaries.
40
personalities :: [(String, IO ())]
41
personalities = [ ("hail", Hail.main)
42
                , ("hbal", Hbal.main)
43
                , ("hscan", Hscan.main)
44
                , ("hspace", Hspace.main)
41
personalities :: [(String, (Options -> [String] -> IO (), [OptType]))]
42
personalities = [ ("hail",   (Hail.main,   Hail.options))
43
                , ("hbal",   (Hbal.main,   Hbal.options))
44
                , ("hscan",  (Hscan.main,  Hscan.options))
45
                , ("hspace", (Hspace.main, Hspace.options))
45 46
                ]
46 47

  
47 48
-- | Display usage and exit.
......
59 60
main = do
60 61
  binary <- getEnv "HTOOLS" `catch` const getProgName
61 62
  let name = map toLower binary
62
      boolnames = map (\(x, y) -> (x == name, y)) personalities
63
  select (usage name) boolnames
63
      boolnames = map (\(x, y) -> (x == name, Just y)) personalities
64
  case select Nothing boolnames of
65
    Nothing -> usage name
66
    Just (fn, options) -> do
67
         cmd_args <- getArgs
68
         (opts, args) <- parseOpts cmd_args name options
69
         fn opts args

Also available in: Unified diff