Merge branch 'monday-improvements'
This commit is contained in:
commit
b1106985ec
8
.github/workflows/release.yaml
vendored
8
.github/workflows/release.yaml
vendored
@ -322,7 +322,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: testfiles
|
name: testfiles
|
||||||
path: |
|
path: |
|
||||||
./test/golden/unix/GHCupInfo*json
|
./test/ghcup-test/golden/unix/GHCupInfo*json
|
||||||
|
|
||||||
test-arm:
|
test-arm:
|
||||||
name: Test ARM
|
name: Test ARM
|
||||||
@ -389,7 +389,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: testfiles
|
name: testfiles
|
||||||
path: |
|
path: |
|
||||||
./test/golden/unix/GHCupInfo*json
|
./test/ghcup-test/golden/unix/GHCupInfo*json
|
||||||
|
|
||||||
test-macwin:
|
test-macwin:
|
||||||
name: Test Mac/Win
|
name: Test Mac/Win
|
||||||
@ -458,7 +458,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: testfiles
|
name: testfiles
|
||||||
path: |
|
path: |
|
||||||
./test/golden/windows/GHCupInfo*json
|
./test/ghcup-test/golden/windows/GHCupInfo*json
|
||||||
|
|
||||||
- if: failure() && runner.os != 'Windows'
|
- if: failure() && runner.os != 'Windows'
|
||||||
name: Upload artifact
|
name: Upload artifact
|
||||||
@ -466,7 +466,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: testfiles
|
name: testfiles
|
||||||
path: |
|
path: |
|
||||||
./test/golden/unix/GHCupInfo*json
|
./test/ghcup-test/golden/unix/GHCupInfo*json
|
||||||
hls:
|
hls:
|
||||||
name: hls
|
name: hls
|
||||||
needs: build-linux
|
needs: build-linux
|
||||||
|
@ -683,7 +683,7 @@ settings' = unsafePerformIO $ do
|
|||||||
newIORef $ AppState defaultSettings
|
newIORef $ AppState defaultSettings
|
||||||
dirs
|
dirs
|
||||||
defaultKeyBindings
|
defaultKeyBindings
|
||||||
(GHCupInfo mempty mempty mempty)
|
(GHCupInfo mempty mempty Nothing)
|
||||||
(PlatformRequest A_64 Darwin Nothing)
|
(PlatformRequest A_64 Darwin Nothing)
|
||||||
loggerConfig
|
loggerConfig
|
||||||
|
|
||||||
|
@ -261,7 +261,7 @@ Report bugs at <https://github.com/haskell/ghcup-hs/issues>|]
|
|||||||
Just _ -> pure ()
|
Just _ -> pure ()
|
||||||
|
|
||||||
-- TODO: always run for windows
|
-- TODO: always run for windows
|
||||||
siletRunLogger (flip runReaderT s' $ runE ensureGlobalTools) >>= \case
|
siletRunLogger (flip runReaderT s' $ runE ensureShimGen) >>= \case
|
||||||
VRight _ -> pure ()
|
VRight _ -> pure ()
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger
|
runLogger
|
||||||
|
@ -158,7 +158,7 @@ getDownloadsF pfreq@(PlatformRequest arch plat _) = do
|
|||||||
catchE @JSONError (\(JSONDecodeError _) -> do
|
catchE @JSONError (\(JSONDecodeError _) -> do
|
||||||
logDebug $ "Couldn't decode " <> T.pack base <> " as GHCupInfo, trying as SetupInfo: "
|
logDebug $ "Couldn't decode " <> T.pack base <> " as GHCupInfo, trying as SetupInfo: "
|
||||||
Right <$> decodeMetadata @Stack.SetupInfo base)
|
Right <$> decodeMetadata @Stack.SetupInfo base)
|
||||||
$ fmap Left $ decodeMetadata @GHCupInfo base
|
$ fmap Left (decodeMetadata @GHCupInfo base >>= \gI -> warnOnMetadataUpdate uri gI >> pure gI)
|
||||||
|
|
||||||
fromStackSetupInfo :: MonadThrow m
|
fromStackSetupInfo :: MonadThrow m
|
||||||
=> Stack.SetupInfo
|
=> Stack.SetupInfo
|
||||||
@ -170,7 +170,7 @@ getDownloadsF pfreq@(PlatformRequest arch plat _) = do
|
|||||||
(ghcupInfo' :: M.Map GHCTargetVersion DownloadInfo) <-
|
(ghcupInfo' :: M.Map GHCTargetVersion DownloadInfo) <-
|
||||||
M.mapKeys mkTVer <$> M.traverseMaybeWithKey (\_ a -> pure $ fromStackDownloadInfo a) ghcVersions
|
M.mapKeys mkTVer <$> M.traverseMaybeWithKey (\_ a -> pure $ fromStackDownloadInfo a) ghcVersions
|
||||||
let ghcupDownloads' = M.singleton GHC (M.map fromDownloadInfo ghcupInfo')
|
let ghcupDownloads' = M.singleton GHC (M.map fromDownloadInfo ghcupInfo')
|
||||||
pure (GHCupInfo mempty ghcupDownloads' mempty)
|
pure (GHCupInfo mempty ghcupDownloads' Nothing)
|
||||||
where
|
where
|
||||||
fromDownloadInfo :: DownloadInfo -> VersionInfo
|
fromDownloadInfo :: DownloadInfo -> VersionInfo
|
||||||
fromDownloadInfo dli = let aspec = M.singleton arch (M.singleton plat (M.singleton Nothing dli))
|
fromDownloadInfo dli = let aspec = M.singleton arch (M.singleton plat (M.singleton Nothing dli))
|
||||||
@ -189,9 +189,8 @@ getDownloadsF pfreq@(PlatformRequest arch plat _) = do
|
|||||||
mergeGhcupInfo [] = fail "mergeGhcupInfo: internal error: need at least one GHCupInfo"
|
mergeGhcupInfo [] = fail "mergeGhcupInfo: internal error: need at least one GHCupInfo"
|
||||||
mergeGhcupInfo xs@(GHCupInfo{}: _) =
|
mergeGhcupInfo xs@(GHCupInfo{}: _) =
|
||||||
let newDownloads = M.unionsWith (M.unionWith (\_ b2 -> b2)) (_ghcupDownloads <$> xs)
|
let newDownloads = M.unionsWith (M.unionWith (\_ b2 -> b2)) (_ghcupDownloads <$> xs)
|
||||||
newGlobalTools = M.unionsWith (\_ a2 -> a2 ) (_globalTools <$> xs)
|
|
||||||
newToolReqs = M.unionsWith (M.unionWith (\_ b2 -> b2)) (_toolRequirements <$> xs)
|
newToolReqs = M.unionsWith (M.unionWith (\_ b2 -> b2)) (_toolRequirements <$> xs)
|
||||||
in pure $ GHCupInfo newToolReqs newDownloads newGlobalTools
|
in pure $ GHCupInfo newToolReqs newDownloads Nothing
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -308,6 +307,36 @@ getBase uri = do
|
|||||||
|
|
||||||
pure f
|
pure f
|
||||||
|
|
||||||
|
warnOnMetadataUpdate ::
|
||||||
|
( MonadReader env m
|
||||||
|
, MonadIO m
|
||||||
|
, HasLog env
|
||||||
|
, HasDirs env
|
||||||
|
)
|
||||||
|
=> URI
|
||||||
|
-> GHCupInfo
|
||||||
|
-> m ()
|
||||||
|
warnOnMetadataUpdate uri (GHCupInfo { _metadataUpdate = Just newUri })
|
||||||
|
| scheme' uri == "file"
|
||||||
|
, urlBase' uri /= urlBase' newUri = do
|
||||||
|
confFile <- getConfigFilePath'
|
||||||
|
logWarn $ "New metadata version detected"
|
||||||
|
<> "\n old URI: " <> (decUTF8Safe . serializeURIRef') uri
|
||||||
|
<> "\n new URI: " <> (decUTF8Safe . serializeURIRef') newUri
|
||||||
|
<> "\nYou might need to update your " <> T.pack confFile
|
||||||
|
| scheme' uri /= "file"
|
||||||
|
, uri /= newUri = do
|
||||||
|
confFile <- getConfigFilePath'
|
||||||
|
logWarn $ "New metadata version detected"
|
||||||
|
<> "\n old URI: " <> (decUTF8Safe . serializeURIRef') uri
|
||||||
|
<> "\n new URI: " <> (decUTF8Safe . serializeURIRef') newUri
|
||||||
|
<> "\nYou might need to update your " <> T.pack confFile
|
||||||
|
where
|
||||||
|
scheme' = view (uriSchemeL' % schemeBSL')
|
||||||
|
urlBase' = T.unpack . decUTF8Safe . urlBaseName . view pathL'
|
||||||
|
warnOnMetadataUpdate _ _ = pure ()
|
||||||
|
|
||||||
|
|
||||||
decodeMetadata :: forall j m env .
|
decodeMetadata :: forall j m env .
|
||||||
( MonadReader env m
|
( MonadReader env m
|
||||||
, HasDirs env
|
, HasDirs env
|
||||||
|
@ -209,7 +209,6 @@ instance HFErrorProject NoCompatiblePlatform where
|
|||||||
|
|
||||||
-- | Unable to find a download for the requested version/distro.
|
-- | Unable to find a download for the requested version/distro.
|
||||||
data NoDownload = NoDownload GHCTargetVersion Tool (Maybe PlatformRequest)
|
data NoDownload = NoDownload GHCTargetVersion Tool (Maybe PlatformRequest)
|
||||||
| NoDownload' GlobalTool
|
|
||||||
deriving Show
|
deriving Show
|
||||||
|
|
||||||
instance Pretty NoDownload where
|
instance Pretty NoDownload where
|
||||||
@ -227,7 +226,6 @@ instance Pretty NoDownload where
|
|||||||
<> T.unpack (prettyVer vv)
|
<> T.unpack (prettyVer vv)
|
||||||
<> "'"
|
<> "'"
|
||||||
| otherwise = text $ "Unable to find a download for " <> T.unpack (tVerToText tver)
|
| otherwise = text $ "Unable to find a download for " <> T.unpack (tVerToText tver)
|
||||||
pPrint (NoDownload' globalTool) = text $ "Unable to find a download for " <> prettyShow globalTool
|
|
||||||
|
|
||||||
instance HFErrorProject NoDownload where
|
instance HFErrorProject NoDownload where
|
||||||
eBase _ = 10
|
eBase _ = 10
|
||||||
|
@ -763,7 +763,8 @@ rmGHCVer ver = do
|
|||||||
|
|
||||||
Dirs {..} <- lift getDirs
|
Dirs {..} <- lift getDirs
|
||||||
|
|
||||||
lift $ hideError doesNotExistErrorType $ rmDirectoryLink (fromGHCupPath baseDir </> "share")
|
when isSetGHC $ do
|
||||||
|
lift $ hideError doesNotExistErrorType $ rmDirectoryLink (fromGHCupPath baseDir </> "share")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -387,7 +387,7 @@ rmLink fp
|
|||||||
--
|
--
|
||||||
-- This overwrites previously existing files.
|
-- This overwrites previously existing files.
|
||||||
--
|
--
|
||||||
-- On windows, this requires that 'ensureGlobalTools' was run beforehand.
|
-- On windows, this requires that 'ensureShimGen' was run beforehand.
|
||||||
createLink :: ( MonadMask m
|
createLink :: ( MonadMask m
|
||||||
, MonadThrow m
|
, MonadThrow m
|
||||||
, HasLog env
|
, HasLog env
|
||||||
|
@ -74,7 +74,7 @@ data KeyCombination = KeyCombination { key :: Key, mods :: [Modifier] }
|
|||||||
data GHCupInfo = GHCupInfo
|
data GHCupInfo = GHCupInfo
|
||||||
{ _toolRequirements :: ToolRequirements
|
{ _toolRequirements :: ToolRequirements
|
||||||
, _ghcupDownloads :: GHCupDownloads
|
, _ghcupDownloads :: GHCupDownloads
|
||||||
, _globalTools :: Map GlobalTool DownloadInfo
|
, _metadataUpdate :: Maybe URI
|
||||||
}
|
}
|
||||||
deriving (Show, GHC.Generic, Eq)
|
deriving (Show, GHC.Generic, Eq)
|
||||||
|
|
||||||
@ -136,14 +136,6 @@ instance Pretty Tool where
|
|||||||
|
|
||||||
instance NFData Tool
|
instance NFData Tool
|
||||||
|
|
||||||
data GlobalTool = ShimGen
|
|
||||||
deriving (Eq, GHC.Generic, Ord, Show, Enum, Bounded)
|
|
||||||
|
|
||||||
instance NFData GlobalTool
|
|
||||||
|
|
||||||
instance Pretty GlobalTool where
|
|
||||||
pPrint ShimGen = text "shimgen"
|
|
||||||
|
|
||||||
|
|
||||||
-- | All necessary information of a tool version, including
|
-- | All necessary information of a tool version, including
|
||||||
-- source download and per-architecture downloads.
|
-- source download and per-architecture downloads.
|
||||||
|
@ -59,7 +59,6 @@ deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''Chunk
|
|||||||
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''Release
|
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''Release
|
||||||
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''SemVer
|
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''SemVer
|
||||||
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''Tool
|
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''Tool
|
||||||
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''GlobalTool
|
|
||||||
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''KeepDirs
|
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''KeepDirs
|
||||||
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''Downloader
|
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''Downloader
|
||||||
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''GPGSetting
|
deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''GPGSetting
|
||||||
@ -158,12 +157,6 @@ instance ToJSONKey Tool where
|
|||||||
instance FromJSONKey Tool where
|
instance FromJSONKey Tool where
|
||||||
fromJSONKey = genericFromJSONKey defaultJSONKeyOptions
|
fromJSONKey = genericFromJSONKey defaultJSONKeyOptions
|
||||||
|
|
||||||
instance ToJSONKey GlobalTool where
|
|
||||||
toJSONKey = genericToJSONKey defaultJSONKeyOptions
|
|
||||||
|
|
||||||
instance FromJSONKey GlobalTool where
|
|
||||||
fromJSONKey = genericFromJSONKey defaultJSONKeyOptions
|
|
||||||
|
|
||||||
instance ToJSON TarDir where
|
instance ToJSON TarDir where
|
||||||
toJSON (RealDir p) = toJSON p
|
toJSON (RealDir p) = toJSON p
|
||||||
toJSON (RegexDir r) = object ["RegexDir" .= r]
|
toJSON (RegexDir r) = object ["RegexDir" .= r]
|
||||||
@ -288,9 +281,9 @@ deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''Versio
|
|||||||
instance FromJSON GHCupInfo where
|
instance FromJSON GHCupInfo where
|
||||||
parseJSON = withObject "GHCupInfo" $ \o -> do
|
parseJSON = withObject "GHCupInfo" $ \o -> do
|
||||||
toolRequirements' <- o .:? "toolRequirements"
|
toolRequirements' <- o .:? "toolRequirements"
|
||||||
globalTools' <- o .:? "globalTools"
|
metadataUpdate <- o .:? "metadataUpdate"
|
||||||
ghcupDownloads' <- o .: "ghcupDownloads"
|
ghcupDownloads' <- o .: "ghcupDownloads"
|
||||||
pure (GHCupInfo (fromMaybe mempty toolRequirements') ghcupDownloads' (fromMaybe mempty globalTools'))
|
pure (GHCupInfo (fromMaybe mempty toolRequirements') ghcupDownloads' metadataUpdate)
|
||||||
|
|
||||||
deriveToJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''GHCupInfo
|
deriveToJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''GHCupInfo
|
||||||
|
|
||||||
|
@ -1199,24 +1199,22 @@ getVersionInfo v' tool =
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
ensureGlobalTools :: ( MonadMask m
|
ensureShimGen :: ( MonadMask m
|
||||||
, MonadThrow m
|
, MonadThrow m
|
||||||
, HasLog env
|
, HasLog env
|
||||||
, MonadIO m
|
, MonadIO m
|
||||||
, MonadReader env m
|
, MonadReader env m
|
||||||
, HasDirs env
|
, HasDirs env
|
||||||
, HasSettings env
|
, HasSettings env
|
||||||
, HasGHCupInfo env
|
, HasGHCupInfo env
|
||||||
, MonadUnliftIO m
|
, MonadUnliftIO m
|
||||||
, MonadFail m
|
, MonadFail m
|
||||||
)
|
)
|
||||||
=> Excepts '[GPGError, DigestError, ContentLengthError, DownloadFailed, NoDownload] m ()
|
=> Excepts '[GPGError, DigestError, ContentLengthError, DownloadFailed, NoDownload] m ()
|
||||||
ensureGlobalTools
|
ensureShimGen
|
||||||
| isWindows = do
|
| isWindows = do
|
||||||
(GHCupInfo _ _ gTools) <- lift getGHCupInfo
|
|
||||||
dirs <- lift getDirs
|
dirs <- lift getDirs
|
||||||
shimDownload <- liftE $ lE @_ @'[NoDownload]
|
let shimDownload = DownloadInfo shimGenURL Nothing shimGenSHA Nothing Nothing
|
||||||
$ maybe (Left (NoDownload' ShimGen)) Right $ Map.lookup ShimGen gTools
|
|
||||||
let dl = downloadCached' shimDownload (Just "gs.exe") Nothing
|
let dl = downloadCached' shimDownload (Just "gs.exe") Nothing
|
||||||
void $ (\DigestError{} -> do
|
void $ (\DigestError{} -> do
|
||||||
lift $ logWarn "Digest doesn't match, redownloading gs.exe..."
|
lift $ logWarn "Digest doesn't match, redownloading gs.exe..."
|
||||||
|
@ -29,6 +29,7 @@ module GHCup.Utils.Dirs
|
|||||||
, relativeSymlink
|
, relativeSymlink
|
||||||
, withGHCupTmpDir
|
, withGHCupTmpDir
|
||||||
, getConfigFilePath
|
, getConfigFilePath
|
||||||
|
, getConfigFilePath'
|
||||||
, useXDG
|
, useXDG
|
||||||
, cleanupTrash
|
, cleanupTrash
|
||||||
|
|
||||||
@ -360,6 +361,12 @@ getConfigFilePath = do
|
|||||||
confDir <- liftIO ghcupConfigDir
|
confDir <- liftIO ghcupConfigDir
|
||||||
pure $ fromGHCupPath confDir </> "config.yaml"
|
pure $ fromGHCupPath confDir </> "config.yaml"
|
||||||
|
|
||||||
|
getConfigFilePath' :: (MonadReader env m, HasDirs env) => m FilePath
|
||||||
|
getConfigFilePath' = do
|
||||||
|
Dirs {..} <- getDirs
|
||||||
|
pure $ fromGHCupPath confDir </> "config.yaml"
|
||||||
|
|
||||||
|
|
||||||
ghcupConfigFile :: (MonadIO m)
|
ghcupConfigFile :: (MonadIO m)
|
||||||
=> Excepts '[JSONError] m UserSettings
|
=> Excepts '[JSONError] m UserSettings
|
||||||
ghcupConfigFile = do
|
ghcupConfigFile = do
|
||||||
|
@ -39,6 +39,12 @@ ghcupURL = [uri|https://raw.githubusercontent.com/haskell/ghcup-metadata/master/
|
|||||||
stackSetupURL :: URI
|
stackSetupURL :: URI
|
||||||
stackSetupURL = [uri|https://raw.githubusercontent.com/commercialhaskell/stackage-content/master/stack/stack-setup-2.yaml|]
|
stackSetupURL = [uri|https://raw.githubusercontent.com/commercialhaskell/stackage-content/master/stack/stack-setup-2.yaml|]
|
||||||
|
|
||||||
|
shimGenURL :: URI
|
||||||
|
shimGenURL = [uri|https://downloads.haskell.org/~ghcup/shimgen/shim-2.exe|]
|
||||||
|
|
||||||
|
shimGenSHA :: T.Text
|
||||||
|
shimGenSHA = T.pack "7c55e201f71860c5babea886007c8fa44b861abf50d1c07e5677eb0bda387a70"
|
||||||
|
|
||||||
-- | The current ghcup version.
|
-- | The current ghcup version.
|
||||||
ghcUpVer :: V.PVP
|
ghcUpVer :: V.PVP
|
||||||
ghcUpVer = V.PVP . NE.fromList . fmap fromIntegral $ versionBranch version
|
ghcUpVer = V.PVP . NE.fromList . fmap fromIntegral $ versionBranch version
|
||||||
|
8
scripts/dev/update-shell-completions.sh
Executable file
8
scripts/dev/update-shell-completions.sh
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -xue
|
||||||
|
|
||||||
|
cabal --verbose=0 run ghcup:exe:ghcup -- --bash-completion-script ghcup > scripts/shell-completions/bash
|
||||||
|
cabal --verbose=0 run ghcup:exe:ghcup -- --zsh-completion-script ghcup > scripts/shell-completions/zsh
|
||||||
|
cabal --verbose=0 run ghcup:exe:ghcup -- --fish-completion-script ghcup > scripts/shell-completions/fish
|
||||||
|
|
@ -175,10 +175,6 @@ instance Arbitrary Tool where
|
|||||||
arbitrary = genericArbitrary
|
arbitrary = genericArbitrary
|
||||||
shrink = genericShrink
|
shrink = genericShrink
|
||||||
|
|
||||||
instance Arbitrary GlobalTool where
|
|
||||||
arbitrary = genericArbitrary
|
|
||||||
shrink = genericShrink
|
|
||||||
|
|
||||||
instance Arbitrary GHCupInfo where
|
instance Arbitrary GHCupInfo where
|
||||||
arbitrary = genericArbitrary
|
arbitrary = genericArbitrary
|
||||||
shrink = genericShrink
|
shrink = genericShrink
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -4116,17 +4116,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"globalTools": {
|
"metadataUpdate": "https:ixnnceymgu",
|
||||||
"ShimGen": {
|
|
||||||
"dlCSize": -1,
|
|
||||||
"dlHash": "xrocmtsmjzgmemxrenf",
|
|
||||||
"dlOutput": null,
|
|
||||||
"dlSubdir": {
|
|
||||||
"RegexDir": "\u0013tt\u0013m-"
|
|
||||||
},
|
|
||||||
"dlUri": "https:wjmqkzflmlzetqdcxed"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"toolRequirements": {
|
"toolRequirements": {
|
||||||
"GHCup": {
|
"GHCup": {
|
||||||
"3.8.8": {
|
"3.8.8": {
|
||||||
@ -9309,17 +9299,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"globalTools": {
|
"metadataUpdate": "https:cxnnfovqllcccybmllaikuvluhp",
|
||||||
"ShimGen": {
|
|
||||||
"dlCSize": -18,
|
|
||||||
"dlHash": "wbpx",
|
|
||||||
"dlOutput": null,
|
|
||||||
"dlSubdir": {
|
|
||||||
"RegexDir": "[u3"
|
|
||||||
},
|
|
||||||
"dlUri": "https:"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"toolRequirements": {
|
"toolRequirements": {
|
||||||
"HLS": {
|
"HLS": {
|
||||||
"2.6.9": {
|
"2.6.9": {
|
||||||
@ -11308,15 +11288,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"globalTools": {
|
"metadataUpdate": "http:fbptvnonarkxeszcsn",
|
||||||
"ShimGen": {
|
|
||||||
"dlCSize": null,
|
|
||||||
"dlHash": "yfwka",
|
|
||||||
"dlOutput": "c5q",
|
|
||||||
"dlSubdir": "M/|",
|
|
||||||
"dlUri": "https:yolsdtmmo"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"toolRequirements": {
|
"toolRequirements": {
|
||||||
"Cabal": {
|
"Cabal": {
|
||||||
"7.7.4": {
|
"7.7.4": {
|
||||||
@ -13648,15 +13620,7 @@
|
|||||||
"GHCup": {},
|
"GHCup": {},
|
||||||
"Stack": {}
|
"Stack": {}
|
||||||
},
|
},
|
||||||
"globalTools": {
|
"metadataUpdate": null,
|
||||||
"ShimGen": {
|
|
||||||
"dlCSize": null,
|
|
||||||
"dlHash": "hoegok",
|
|
||||||
"dlOutput": null,
|
|
||||||
"dlSubdir": "\u0005]?9\u0001Q:𭲎8ᙣ𑐛'oD\u001a(𛆎\u0004\\𢨓[\u001e",
|
|
||||||
"dlUri": "https:nimu"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"toolRequirements": {
|
"toolRequirements": {
|
||||||
"Cabal": {
|
"Cabal": {
|
||||||
"3.5.4": {
|
"3.5.4": {
|
||||||
@ -18153,17 +18117,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"globalTools": {
|
"metadataUpdate": "http:ntkddscbgdrjmwymnvpqpmgr",
|
||||||
"ShimGen": {
|
|
||||||
"dlCSize": null,
|
|
||||||
"dlHash": "mpljxguikoebuynzv",
|
|
||||||
"dlOutput": "Q@i\"%\u0014gb0/PPYE\u001f\u0014KC`-wL",
|
|
||||||
"dlSubdir": {
|
|
||||||
"RegexDir": ".`_\u0005&\u0014^1Fml\u001e>oG"
|
|
||||||
},
|
|
||||||
"dlUri": "http:tmcnu"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"toolRequirements": {
|
"toolRequirements": {
|
||||||
"GHC": {
|
"GHC": {
|
||||||
"6.3.1": {
|
"6.3.1": {
|
||||||
@ -19958,4 +19912,4 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"seed": 89490121
|
"seed": 89490121
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user