Skip to content

Commit 43891df

Browse files
straxjustinwoo
authored andcommitted
Add support for adding bower packages from branches to package set (#104)
* Add support for adding bower packages from branches to package set * Exclude separator from version part of package specifier * Refactor maybeE -> Control.Error.Util.note * Use Bifunctor.second instead of arrows * Refactor addFromBower argument parsing
1 parent c1c8d42 commit 43891df

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

app/Main.hs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ module Main where
1111

1212
import qualified Control.Foldl as Foldl
1313
import Control.Concurrent.Async (forConcurrently_, mapConcurrently)
14+
import Control.Error.Util (note)
1415
import qualified Data.Aeson as Aeson
1516
import Data.Aeson.Types (fieldLabelModifier)
1617
import Data.Aeson.Encode.Pretty
@@ -497,7 +498,7 @@ data BowerInfo = BowerInfo
497498
{ bower_name :: Text
498499
, bower_repository :: BowerInfoRepo
499500
, bower_dependencies :: Map.Map Text Text
500-
, bower_version :: Text
501+
, bower_version :: Maybe Text
501502
} deriving (Show, Eq, Generic)
502503
instance Aeson.FromJSON BowerInfo where
503504
parseJSON = Aeson.genericParseJSON Aeson.defaultOptions
@@ -509,22 +510,25 @@ data BowerOutput = BowerOutput
509510
} deriving (Show, Eq, Generic, Aeson.FromJSON)
510511

511512
addFromBower :: String -> IO ()
512-
addFromBower name = do
513-
let bowerProc = inproc "bower" [ "info", T.pack name, "--json", "-l=error" ] empty
513+
addFromBower arg = do
514+
echoT $ "Adding package " <> name <> " at " <> (fromMaybe "latest" version) <> " from Bower..."
515+
let bowerProc = inproc "bower" [ "info", T.pack arg, "--json", "-l=error" ] empty
514516
result <- fold <$> shellToIOText bowerProc
515517
if T.null result
516518
then exitWithErr "Error: Does the package exist on Bower?"
517519
else do
518520
let result' = do
519-
bowerOutput <- Aeson.eitherDecodeStrict $ encodeUtf8 result
520-
let bowerInfo = latest bowerOutput
521+
bowerInfo <- case version of
522+
Just _ -> Aeson.eitherDecodeStrict (encodeUtf8 result) :: Either String BowerInfo
523+
Nothing -> latest <$> Aeson.eitherDecodeStrict (encodeUtf8 result) :: Either String BowerInfo
524+
version' <- note "Unable to infer the package version" $ ("v" <>) <$> bower_version bowerInfo <|> version
521525
pkgName <- mkPackageName' $ bower_name bowerInfo
522526
packageNames <- traverse mkPackageName' $ Map.keys (bower_dependencies bowerInfo)
523527
pure $
524528
( pkgName
525529
, PackageInfo
526530
(T.replace "git:" "https:" . url $ bower_repository bowerInfo)
527-
("v" <> bower_version bowerInfo)
531+
version'
528532
packageNames
529533
)
530534
case result' of
@@ -536,6 +540,10 @@ addFromBower name = do
536540
where
537541
stripBowerNamePrefix s = fromMaybe s $ T.stripPrefix "purescript-" s
538542
mkPackageName' = Bifunctor.first show . mkPackageName . stripBowerNamePrefix
543+
parseVersion' s = case s of
544+
"" -> Nothing
545+
s' -> Just $ T.tail s'
546+
(name, version) = Bifunctor.second parseVersion' $ T.breakOn "#" $ T.pack arg
539547

540548
formatPackageFile :: IO ()
541549
formatPackageFile =

psc-package.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ executable psc-package
2525
process -any,
2626
system-filepath -any,
2727
text -any,
28+
errors -any,
2829
turtle <1.6
2930
main-is: Main.hs
3031
other-modules: Paths_psc_package

0 commit comments

Comments
 (0)