diff --git a/gren.cabal b/gren.cabal index 73fe7a03..290dd69a 100644 --- a/gren.cabal +++ b/gren.cabal @@ -59,6 +59,7 @@ Common gren-common Package Package.Install Package.Uninstall + Package.Outdated Package.Bump Package.Diff Package.Validate diff --git a/terminal/src/Package.hs b/terminal/src/Package.hs index 0a2912a4..3994331f 100644 --- a/terminal/src/Package.hs +++ b/terminal/src/Package.hs @@ -9,6 +9,7 @@ import Data.List qualified as List import Package.Bump qualified as Bump import Package.Diff qualified as Diff import Package.Install qualified as Install +import Package.Outdated qualified as Outdated import Package.Uninstall qualified as Uninstall import Package.Validate qualified as Validate import Terminal @@ -25,6 +26,7 @@ run = P.empty [ install, uninstall, + outdated, bump, diff, validate @@ -107,6 +109,35 @@ uninstall = |-- onOff "yes" "Assume yes for all interactive prompts." in Terminal.Command "uninstall" Uncommon details example uninstallArgs uninstallFlags Uninstall.run +-- OUTDATED + +outdated :: Terminal.Command +outdated = + let details = + "The `outdated` command lists the latest version of your dependencies, if you're\ + \ not already using them:" + + example = + stack + [ reflow + "For example, if you want to list any outdated dependencies in your project,\ + \ you would say:", + P.indent 4 $ + P.green $ + P.vcat $ + [ "gren package outdated" + ] + ] + + outdatedArgs = + require0 Outdated.NoArgs + + outdatedFlags = + flags Outdated.Flags + |-- onOff "yes" "Assume yes for all interactive prompts." + |-- onOff "unsafe" "Show latest version, even if it contains breaking changes." + in Terminal.Command "outdated" Uncommon details example outdatedArgs outdatedFlags Outdated.run + -- VALIDATE validate :: Terminal.Command diff --git a/terminal/src/Package/Outdated.hs b/terminal/src/Package/Outdated.hs new file mode 100644 index 00000000..1d8923b8 --- /dev/null +++ b/terminal/src/Package/Outdated.hs @@ -0,0 +1,49 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Package.Outdated + ( Args (..), + Flags (..), + run, + ) +where + +import Deps.Solver qualified as Solver +import Directories qualified as Dirs +import Gren.Outline qualified as Outline +import Reporting qualified +import Reporting.Exit qualified as Exit +import Reporting.Task qualified as Task + +-- RUN + +data Args + = NoArgs + +data Flags = Flags + { _skipPrompts :: Bool + , _unsafe :: Bool + } + +run :: Args -> Flags -> IO () +run _ (Flags _skipPrompts _unafe) = + Reporting.attempt Exit.installToReport $ + do + maybeRoot <- Dirs.findRoot + case maybeRoot of + Nothing -> + return (Left Exit.InstallNoOutline) + Just root -> + Task.run $ + do + env <- Task.io Solver.initEnv + oldOutline <- Task.eio Exit.InstallBadOutline $ Outline.read root + installDependencies env oldOutline + +-- LIST OUTDATED + +type Task = Task.Task Exit.Install + +installDependencies :: Solver.Env -> Outline.Outline -> Task () +installDependencies (Solver.Env _) _ = + return () +