mirror of
https://github.com/nmattia/niv.git
synced 2024-09-19 11:27:40 +03:00
Document commands
This commit is contained in:
parent
6e48f731c8
commit
db273fdcd8
109
Main.hs
109
Main.hs
@ -10,8 +10,6 @@
|
|||||||
|
|
||||||
module Main (main) where
|
module Main (main) where
|
||||||
|
|
||||||
-- TODO: document commands
|
|
||||||
|
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
@ -33,8 +31,26 @@ import qualified Data.Text as T
|
|||||||
import qualified GitHub as GH
|
import qualified GitHub as GH
|
||||||
import qualified GitHub.Data.Name as GH
|
import qualified GitHub.Data.Name as GH
|
||||||
import qualified Options.Applicative as Opts
|
import qualified Options.Applicative as Opts
|
||||||
|
import qualified Options.Applicative.Help.Pretty as Opts
|
||||||
import qualified System.Directory as Dir
|
import qualified System.Directory as Dir
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = join $ Opts.execParser opts
|
||||||
|
where
|
||||||
|
opts = Opts.info (parseCommand <**> Opts.helper) $ mconcat desc
|
||||||
|
desc =
|
||||||
|
[ Opts.fullDesc
|
||||||
|
, Opts.header "NIV - Version manager for Nix projects"
|
||||||
|
]
|
||||||
|
|
||||||
|
parseCommand :: Opts.Parser (IO ())
|
||||||
|
parseCommand = Opts.subparser (
|
||||||
|
Opts.command "init" parseCmdInit <>
|
||||||
|
Opts.command "add" parseCmdAdd <>
|
||||||
|
Opts.command "show" parseCmdShow <>
|
||||||
|
Opts.command "update" parseCmdUpdate <>
|
||||||
|
Opts.command "drop" parseCmdDrop )
|
||||||
|
|
||||||
newtype VersionsSpec = VersionsSpec
|
newtype VersionsSpec = VersionsSpec
|
||||||
{ unVersionsSpec :: HMap.HashMap PackageName PackageSpec }
|
{ unVersionsSpec :: HMap.HashMap PackageName PackageSpec }
|
||||||
deriving newtype (FromJSON, ToJSON)
|
deriving newtype (FromJSON, ToJSON)
|
||||||
@ -77,7 +93,13 @@ parsePackageSpec =
|
|||||||
( Opts.long "attribute" <>
|
( Opts.long "attribute" <>
|
||||||
Opts.short 'a' <>
|
Opts.short 'a' <>
|
||||||
Opts.metavar "KEY=VAL"
|
Opts.metavar "KEY=VAL"
|
||||||
)
|
) <|>
|
||||||
|
(("url_template",) <$> Opts.strOption
|
||||||
|
( Opts.long "template" <>
|
||||||
|
Opts.short 't' <>
|
||||||
|
Opts.metavar "URL" <>
|
||||||
|
Opts.help "foo"
|
||||||
|
))
|
||||||
|
|
||||||
-- Parse "key=val" into ("key", "val")
|
-- Parse "key=val" into ("key", "val")
|
||||||
parseKeyVal :: String -> Maybe (String, String)
|
parseKeyVal :: String -> Maybe (String, String)
|
||||||
@ -88,7 +110,7 @@ parsePackageSpec =
|
|||||||
-- Shortcuts for common attributes
|
-- Shortcuts for common attributes
|
||||||
shortcutAttributes :: Opts.Parser (String, String)
|
shortcutAttributes :: Opts.Parser (String, String)
|
||||||
shortcutAttributes = foldr (<|>) empty $ mkShortcutAttribute <$>
|
shortcutAttributes = foldr (<|>) empty $ mkShortcutAttribute <$>
|
||||||
[ "branch", "owner", "repo" ]
|
[ "branch", "owner", "repo", "version" ]
|
||||||
|
|
||||||
mkShortcutAttribute :: String -> Opts.Parser (String, String)
|
mkShortcutAttribute :: String -> Opts.Parser (String, String)
|
||||||
mkShortcutAttribute = \case
|
mkShortcutAttribute = \case
|
||||||
@ -226,7 +248,13 @@ packageSpecStringValues (PackageSpec m) = mapMaybe toVal (HMap.toList m)
|
|||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
parseCmdInit :: Opts.ParserInfo (IO ())
|
parseCmdInit :: Opts.ParserInfo (IO ())
|
||||||
parseCmdInit = (Opts.info (pure cmdInit <**> Opts.helper)) Opts.fullDesc
|
parseCmdInit = Opts.info (pure cmdInit <**> Opts.helper) $ mconcat desc
|
||||||
|
where
|
||||||
|
desc =
|
||||||
|
[ Opts.fullDesc
|
||||||
|
, Opts.progDesc
|
||||||
|
"Initialize a Nix project. Existing files won't be modified."
|
||||||
|
]
|
||||||
|
|
||||||
cmdInit :: IO ()
|
cmdInit :: IO ()
|
||||||
cmdInit = do
|
cmdInit = do
|
||||||
@ -265,8 +293,8 @@ cmdInit = do
|
|||||||
|
|
||||||
parseCmdAdd :: Opts.ParserInfo (IO ())
|
parseCmdAdd :: Opts.ParserInfo (IO ())
|
||||||
parseCmdAdd =
|
parseCmdAdd =
|
||||||
Opts.info ((cmdAdd <$> parsePackage <*> optName) <**> Opts.helper)
|
Opts.info ((cmdAdd <$> parsePackage <*> optName) <**> Opts.helper) $
|
||||||
Opts.fullDesc
|
mconcat desc
|
||||||
where
|
where
|
||||||
optName :: Opts.Parser (Maybe PackageName)
|
optName :: Opts.Parser (Maybe PackageName)
|
||||||
optName = Opts.optional $ PackageName <$> Opts.strOption
|
optName = Opts.optional $ PackageName <$> Opts.strOption
|
||||||
@ -274,6 +302,16 @@ parseCmdAdd =
|
|||||||
Opts.short 'n' <>
|
Opts.short 'n' <>
|
||||||
Opts.metavar "NAME"
|
Opts.metavar "NAME"
|
||||||
)
|
)
|
||||||
|
desc =
|
||||||
|
[ Opts.fullDesc
|
||||||
|
, Opts.progDesc "Add dependency"
|
||||||
|
, Opts.headerDoc $ Just $
|
||||||
|
"Examples:" Opts.<$$>
|
||||||
|
"" Opts.<$$>
|
||||||
|
" niv add stedolan/jq" Opts.<$$>
|
||||||
|
" niv add NixOS/nixpkgs-channel -n nixpkgs -b nixos-18.09" Opts.<$$>
|
||||||
|
" niv add my-package -v alpha-0.1 -t http://example.com/archive/<version>.zip"
|
||||||
|
]
|
||||||
|
|
||||||
cmdAdd :: (PackageName, PackageSpec) -> Maybe PackageName -> IO ()
|
cmdAdd :: (PackageName, PackageSpec) -> Maybe PackageName -> IO ()
|
||||||
cmdAdd (PackageName str, spec) mPackageName = do
|
cmdAdd (PackageName str, spec) mPackageName = do
|
||||||
@ -329,8 +367,19 @@ cmdShow = do
|
|||||||
parseCmdUpdate :: Opts.ParserInfo (IO ())
|
parseCmdUpdate :: Opts.ParserInfo (IO ())
|
||||||
parseCmdUpdate =
|
parseCmdUpdate =
|
||||||
Opts.info
|
Opts.info
|
||||||
((cmdUpdate <$> Opts.optional parsePackage) <**> Opts.helper)
|
((cmdUpdate <$> Opts.optional parsePackage) <**> Opts.helper) $
|
||||||
Opts.fullDesc
|
mconcat desc
|
||||||
|
where
|
||||||
|
desc =
|
||||||
|
[ Opts.fullDesc
|
||||||
|
, Opts.progDesc "Update dependencies"
|
||||||
|
, Opts.headerDoc $ Just $
|
||||||
|
"Examples:" Opts.<$$>
|
||||||
|
"" Opts.<$$>
|
||||||
|
" niv update" Opts.<$$>
|
||||||
|
" niv update nixpkgs" Opts.<$$>
|
||||||
|
" niv update my-package -v beta-0.2"
|
||||||
|
]
|
||||||
|
|
||||||
cmdUpdate :: Maybe (PackageName, PackageSpec) -> IO ()
|
cmdUpdate :: Maybe (PackageName, PackageSpec) -> IO ()
|
||||||
cmdUpdate = \case
|
cmdUpdate = \case
|
||||||
@ -365,8 +414,17 @@ cmdUpdate = \case
|
|||||||
parseCmdDrop :: Opts.ParserInfo (IO ())
|
parseCmdDrop :: Opts.ParserInfo (IO ())
|
||||||
parseCmdDrop =
|
parseCmdDrop =
|
||||||
Opts.info
|
Opts.info
|
||||||
((cmdDrop <$> parsePackageName) <**> Opts.helper)
|
((cmdDrop <$> parsePackageName) <**> Opts.helper) $
|
||||||
Opts.fullDesc
|
mconcat desc
|
||||||
|
where
|
||||||
|
desc =
|
||||||
|
[ Opts.fullDesc
|
||||||
|
, Opts.progDesc "Drop dependency"
|
||||||
|
, Opts.headerDoc $ Just $
|
||||||
|
"Examples:" Opts.<$$>
|
||||||
|
"" Opts.<$$>
|
||||||
|
" niv drop jq"
|
||||||
|
]
|
||||||
|
|
||||||
cmdDrop :: PackageName -> IO ()
|
cmdDrop :: PackageName -> IO ()
|
||||||
cmdDrop packageName = do
|
cmdDrop packageName = do
|
||||||
@ -379,28 +437,6 @@ cmdDrop packageName = do
|
|||||||
setVersionsSpec $ VersionsSpec $
|
setVersionsSpec $ VersionsSpec $
|
||||||
HMap.delete packageName versionsSpec
|
HMap.delete packageName versionsSpec
|
||||||
|
|
||||||
parseCommand :: Opts.Parser (IO ())
|
|
||||||
parseCommand = Opts.subparser (
|
|
||||||
Opts.command "init" parseCmdInit <>
|
|
||||||
Opts.command "add" parseCmdAdd <>
|
|
||||||
Opts.command "show" parseCmdShow <>
|
|
||||||
Opts.command "update" parseCmdUpdate <>
|
|
||||||
Opts.command "drop" parseCmdDrop )
|
|
||||||
|
|
||||||
main :: IO ()
|
|
||||||
main = join $ Opts.execParser opts
|
|
||||||
where
|
|
||||||
opts = Opts.info (parseCommand <**> Opts.helper)
|
|
||||||
( Opts.fullDesc
|
|
||||||
<> Opts.header "NIV - Nix Version manager" )
|
|
||||||
|
|
||||||
nixPrefetchURL :: String -> IO String
|
|
||||||
nixPrefetchURL url =
|
|
||||||
lines <$> readProcess "nix-prefetch-url" ["--unpack", url] "" >>=
|
|
||||||
\case
|
|
||||||
(l:_) -> pure l
|
|
||||||
_ -> abortNixPrefetchExpectedOutput
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
-- Aux
|
-- Aux
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
@ -477,6 +513,13 @@ abort msg = do
|
|||||||
putStrLn msg
|
putStrLn msg
|
||||||
exitFailure
|
exitFailure
|
||||||
|
|
||||||
|
nixPrefetchURL :: String -> IO String
|
||||||
|
nixPrefetchURL url =
|
||||||
|
lines <$> readProcess "nix-prefetch-url" ["--unpack", url] "" >>=
|
||||||
|
\case
|
||||||
|
(l:_) -> pure l
|
||||||
|
_ -> abortNixPrefetchExpectedOutput
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
-- Files and their content
|
-- Files and their content
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user