git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #1320 from hdgarrood/psc-publish-dotcmd

psc-publish: Try "bower.cmd" if "bower" is not found

commit67e388e686f238a644a94691f3b3c78d3d2cd86c authorGary Burgess <gary.burgess@gmail.com> dateMon 3 Aug 2015, 22:18 (11 years ago) parent464af8e8e6a455
2 files changed+23−3
src/Language/PureScript/Publish.hs+14−2 src/Language/PureScript/Publish/ErrorsWarnings.hs+9−1
src/Language/PureScript/Publish.hs+14−2
@@ -36,14 +36,16 @@ import Control.Applicative
3636import Control.Category ((>>>))
3737import Control.Arrow ((***))
3838import Control.Exception (catch, try)
39+import Control.Monad.Trans.Maybe (MaybeT(..), runMaybeT)
3940import Control.Monad.Trans.Except
4041import Control.Monad.Error.Class (MonadError(..))
4142import Control.Monad.Writer
4243
43−import System.Directory (doesFileExist)
44+import System.Directory (doesFileExist, findExecutable)
4445import System.Process (readProcess)
4546import System.Exit (exitFailure)
4647import qualified System.FilePath.Glob as Glob
48+import qualified System.Info
4749
4850import Web.Bower.PackageMeta (PackageMeta(..), BowerError(..), PackageName,
4951 runPackageName, parsePackageName, Repository(..))
@@ -238,7 +240,8 @@ data DependencyStatus
238240-- appropriate to link to, and we should omit links.
239241getResolvedDependencies :: [PackageName] -> PrepareM [(PackageName, Version)]
240242getResolvedDependencies declaredDeps = do
241− depsBS <- fromString <$> readProcess' "bower" ["list", "--json", "--offline"] ""
243+ bower <- findBowerExecutable
244+ depsBS <- fromString <$> readProcess' bower ["list", "--json", "--offline"] ""
242245
243246 -- Check for undeclared dependencies
244247 toplevels <- catchJSON (parse asToplevelDependencies depsBS)
@@ -250,6 +253,15 @@ getResolvedDependencies declaredDeps = do
250253 where
251254 catchJSON = flip catchLeft (internalError . JSONError FromBowerList)
252255
256+findBowerExecutable :: PrepareM String
257+findBowerExecutable = do
258+ mname <- liftIO . runMaybeT . msum . map (MaybeT . findExecutable) $ names
259+ maybe (userError (BowerExecutableNotFound names)) return mname
260+ where
261+ names = case System.Info.os of
262+ "mingw32" -> ["bower", "bower.cmd"]
263+ _ -> ["bower"]
264+
253265-- | Extracts all dependencies and their versions from
254266-- `bower list --json --offline`
255267asResolvedDependencies :: Parse BowerError [(PackageName, DependencyStatus)]
src/Language/PureScript/Publish/ErrorsWarnings.hs+9−1
@@ -21,7 +21,7 @@ import Data.Version
2121import Data.Maybe
2222import Data.Monoid
2323import Data.Foldable (foldMap)
24−import Data.List (intersperse)
24+import Data.List (intersperse, intercalate)
2525import Data.List.NonEmpty (NonEmpty(..))
2626import qualified Data.List.NonEmpty as NonEmpty
2727
@@ -53,6 +53,7 @@ data PackageWarning
5353-- | An error that should be fixed by the user.
5454data UserError
5555 = BowerJSONNotFound
56+ | BowerExecutableNotFound [String] -- list of executable names tried
5657 | CouldntParseBowerJSON (ParseError BowerError)
5758 | BowerJSONNameMissing
5859 | TagMustBeCheckedOut
@@ -121,6 +122,13 @@ displayUserError e = case e of
121122 [ "The bower.json file was not found. Please create one, or run "
122123 , "`pulp init`."
123124 ])
125+ BowerExecutableNotFound names ->
126+ para (concat
127+ [ "The Bower executable was not found (tried: ", format names, "). Please"
128+ , " ensure that bower is installed and on your PATH."
129+ ])
130+ where
131+ format = intercalate ", " . map show
124132 CouldntParseBowerJSON err ->
125133 vcat
126134 [ successivelyIndented