Support VCS clone configuration
This commit is contained in:
63
src/Main.hs
63
src/Main.hs
@ -32,6 +32,7 @@ import System.Console.ANSI
|
||||
, ConsoleLayer(..)
|
||||
)
|
||||
import Data.Maybe (fromJust, mapMaybe)
|
||||
import qualified Text.URI as URI
|
||||
|
||||
findUpdatable :: Text -> [PackageSettings] -> DownloaderSettings
|
||||
findUpdatable packageName = getField @"downloader" . fromJust
|
||||
@ -40,33 +41,39 @@ findUpdatable packageName = getField @"downloader" . fromJust
|
||||
githubAutoUpdatables :: [PackageSettings] -> [PackageDescription]
|
||||
githubAutoUpdatables = mapMaybe go
|
||||
where
|
||||
go PackageSettings{ downloader = setting }
|
||||
| Just githubSettings <- getField @"github" setting = Just
|
||||
$ PackageDescription
|
||||
{ latest =
|
||||
let ghArguments = uncurry PackageOwner githubSettings
|
||||
template = Package.DownloadTemplate $ getField @"template" setting
|
||||
in Package.Updater
|
||||
{ detectLatest = latestGitHub ghArguments (getField @"version" setting)
|
||||
, getVersion = repackageWithTemplate (getField @"repackage" setting) template
|
||||
, is64 = getField @"is64" setting
|
||||
}
|
||||
go PackageSettings{ downloader = setting, downloaders } = do
|
||||
latest' <- packageUpdaterFromSettings setting
|
||||
pure $ PackageDescription
|
||||
{ latest = latest'
|
||||
, name = getField @"name" setting
|
||||
, downloaders = mempty
|
||||
}
|
||||
| Just packagistSettings <- getField @"packagist" setting = Just
|
||||
$ PackageDescription
|
||||
{ latest =
|
||||
let packagistArguments = uncurry PackageOwner packagistSettings
|
||||
template = Package.DownloadTemplate $ getField @"template" setting
|
||||
in Package.Updater
|
||||
{ detectLatest = latestPackagist packagistArguments
|
||||
, getVersion = repackageWithTemplate (getField @"repackage" setting) template
|
||||
, is64 = getField @"is64" setting
|
||||
}
|
||||
, name = getField @"name" setting
|
||||
, downloaders = mempty
|
||||
, downloaders = Map.fromList $ mapMaybe forDownloader downloaders
|
||||
}
|
||||
forDownloader downloaderSettings@DownloaderSettings{ name } =
|
||||
(name,) <$> packageUpdaterFromSettings downloaderSettings
|
||||
|
||||
packageUpdaterFromSettings :: DownloaderSettings -> Maybe Package.Updater
|
||||
packageUpdaterFromSettings DownloaderSettings{..} = do
|
||||
getVersion' <- getVersionSettings
|
||||
detectLatest' <- detectLatestSettings
|
||||
Just Package.Updater
|
||||
{ detectLatest = detectLatest'
|
||||
, getVersion = getVersion'
|
||||
, is64 = is64
|
||||
}
|
||||
where
|
||||
detectLatestSettings
|
||||
| Just githubSettings <- github =
|
||||
let ghArguments = uncurry PackageOwner githubSettings
|
||||
in Just $ latestGitHub ghArguments version
|
||||
| Just packagistSettings <- packagist =
|
||||
let packagistArguments = uncurry PackageOwner packagistSettings
|
||||
in Just $ latestPackagist packagistArguments
|
||||
| otherwise = Nothing
|
||||
getVersionSettings
|
||||
| Just template' <- template =
|
||||
Just $ repackageWithTemplate repackage $ Package.DownloadTemplate template'
|
||||
| Just CloneSettings{..} <- clone =
|
||||
flip cloneFromGit tagTemplate <$> URI.mkURI remote
|
||||
| otherwise = Nothing
|
||||
|
||||
autoUpdatable :: [PackageSettings] -> [PackageDescription]
|
||||
@ -75,7 +82,7 @@ autoUpdatable packageSettings = githubAutoUpdatables packageSettings ++
|
||||
{ latest =
|
||||
let setting = findUpdatable "webex" packageSettings
|
||||
textArguments = uncurry TextArguments $ fromJust $ getField @"text" setting
|
||||
template = Package.DownloadTemplate $ getField @"template" setting
|
||||
template = Package.DownloadTemplate $ fromJust $ getField @"template" setting
|
||||
in Package.Updater
|
||||
{ detectLatest = latestText textArguments (getField @"version" setting)
|
||||
, getVersion = repackageWithTemplate (getField @"repackage" setting) template
|
||||
@ -88,7 +95,7 @@ autoUpdatable packageSettings = githubAutoUpdatables packageSettings ++
|
||||
{ latest =
|
||||
let setting = findUpdatable "dmd" packageSettings
|
||||
textArguments = uncurry TextArguments $ fromJust $ getField @"text" setting
|
||||
template = Package.DownloadTemplate $ getField @"template" setting
|
||||
template = Package.DownloadTemplate $ fromJust $ getField @"template" setting
|
||||
in Package.Updater
|
||||
{ detectLatest = latestText textArguments (getField @"version" setting)
|
||||
, getVersion = repackageWithTemplate (getField @"repackage" setting) template
|
||||
@ -101,7 +108,7 @@ autoUpdatable packageSettings = githubAutoUpdatables packageSettings ++
|
||||
{ latest =
|
||||
let setting = findUpdatable "d-tools" packageSettings
|
||||
textArguments = uncurry TextArguments $ fromJust $ getField @"text" setting
|
||||
template = Package.DownloadTemplate $ getField @"template" setting
|
||||
template = Package.DownloadTemplate $ fromJust $ getField @"template" setting
|
||||
in Package.Updater
|
||||
{ detectLatest = latestText textArguments (getField @"version" setting)
|
||||
, getVersion = repackageWithTemplate (getField @"repackage" setting) template
|
||||
|
Reference in New Issue
Block a user