From 5286a7154290eceeb4a9ab4fe4df30b121288d1f Mon Sep 17 00:00:00 2001 From: Peter Becich <peter@simspace.com> Date: Fri, 20 Aug 2021 22:49:20 -1000 Subject: [PATCH] more type annotations --- .../src/Distribution/Client/Dependency.hs | 18 ++++++++++++++++++ cabal-install/src/Distribution/Client/Fetch.hs | 1 + .../src/Distribution/Client/FetchUtils.hs | 2 ++ .../src/Distribution/Client/Freeze.hs | 2 ++ .../src/Distribution/Client/HttpUtils.hs | 1 + .../src/Distribution/Client/ProjectBuilding.hs | 11 +++++++++++ .../src/Distribution/Client/ProjectPlanning.hs | 13 ++++++++++--- 7 files changed, 45 insertions(+), 3 deletions(-) diff --git a/cabal-install/src/Distribution/Client/Dependency.hs b/cabal-install/src/Distribution/Client/Dependency.hs index 14025d74d8..50c08076b6 100644 --- a/cabal-install/src/Distribution/Client/Dependency.hs +++ b/cabal-install/src/Distribution/Client/Dependency.hs @@ -13,6 +13,7 @@ -- Top level interface to dependency resolution. ----------------------------------------------------------------------------- module Distribution.Client.Dependency ( + DepResolverParams, -- * The main package dependency resolver chooseSolver, resolveDependencies, @@ -464,6 +465,7 @@ removeBounds relKind relDeps params = depResolverSourcePkgIndex = sourcePkgIndex' } where + sourcePkgIndex' :: PackageIndex.PackageIndex UnresolvedSourcePackage sourcePkgIndex' = fmap relaxDeps $ depResolverSourcePkgIndex params relaxDeps :: UnresolvedSourcePackage -> UnresolvedSourcePackage @@ -735,6 +737,7 @@ resolveDependencies platform comp pkgConfigDB solver params = then params else dontUpgradeNonUpgradeablePackages params + preferences :: PackageName -> PackagePreferences preferences = interpretPackagesPreference targets defpref prefs @@ -750,12 +753,14 @@ interpretPackagesPreference selected defaultPref prefs = (installPref pkgname) (stanzasPref pkgname) where + versionPref :: PackageName -> [VersionRange] versionPref pkgname = fromMaybe [anyVersion] (Map.lookup pkgname versionPrefs) versionPrefs = Map.fromListWith (++) [(pkgname, [pref]) | PackageVersionPreference pkgname pref <- prefs] + installPref :: PackageName -> InstalledPreference installPref pkgname = fromMaybe (installPrefDefault pkgname) (Map.lookup pkgname installPrefs) installPrefs = Map.fromList @@ -770,6 +775,7 @@ interpretPackagesPreference selected defaultPref prefs = if pkgname `Set.member` selected then PreferLatest else PreferInstalled + stanzasPref :: PackageName -> [OptionalStanza] stanzasPref pkgname = fromMaybe [] (Map.lookup pkgname stanzasPrefs) stanzasPrefs = Map.fromListWith (\a b -> nub (a ++ b)) @@ -797,9 +803,12 @@ validateSolverResult platform comp indepGoals pkgs = problems -> error (formatPkgProblems problems) where + graph :: Graph.Graph (ResolverPackage UnresolvedPkgLoc) graph = Graph.fromDistinctList pkgs + formatPkgProblems :: [PlanPackageProblem] -> String formatPkgProblems = formatProblemMessage . map showPlanPackageProblem + formatPlanProblems :: [SolverInstallPlan.SolverPlanProblem] -> String formatPlanProblems = formatProblemMessage . map SolverInstallPlan.showPlanProblem formatProblemMessage problems = @@ -894,6 +903,7 @@ configuredPackageProblems platform cinfo , not (packageSatisfiesDependency pkgid dep) ] -- TODO: sanity tests on executable deps where + thisPkgName :: PackageName thisPkgName = packageName (srcpkgDescription pkg) specifiedDeps1 :: ComponentDeps [PackageId] @@ -902,10 +912,12 @@ configuredPackageProblems platform cinfo specifiedDeps :: [PackageId] specifiedDeps = CD.flatDeps specifiedDeps1 + mergedFlags :: [MergeResult PD.FlagName PD.FlagName] mergedFlags = mergeBy compare (sort $ map PD.flagName (PD.genPackageFlags (srcpkgDescription pkg))) (sort $ map fst (PD.unFlagAssignment specifiedFlags)) -- TODO + packageSatisfiesDependency :: PackageIdentifier -> Dependency -> Bool packageSatisfiesDependency (PackageIdentifier name version) (Dependency name' versionRange _) = assert (name == name') $ @@ -991,7 +1003,9 @@ resolveWithoutDependencies (DepResolverParams targets constraints where -- Constraints + requiredVersions :: VersionRange requiredVersions = packageConstraints pkgname + choices :: [UnresolvedSourcePackage] choices = PackageIndex.lookupDependency sourcePkgIndex pkgname requiredVersions @@ -1000,20 +1014,24 @@ resolveWithoutDependencies (DepResolverParams targets constraints PackagePreferences preferredVersions preferInstalled _ = packagePreferences pkgname + bestByPrefs :: UnresolvedSourcePackage -> UnresolvedSourcePackage -> Ordering bestByPrefs = comparing $ \pkg -> (installPref pkg, versionPref pkg, packageVersion pkg) + installPref :: UnresolvedSourcePackage -> Bool installPref = case preferInstalled of PreferLatest -> const False PreferInstalled -> not . null . InstalledPackageIndex.lookupSourcePackageId installedPkgIndex . packageId + versionPref :: Package a => a -> Int versionPref pkg = length . filter (packageVersion pkg `withinRange`) $ preferredVersions packageConstraints :: PackageName -> VersionRange packageConstraints pkgname = Map.findWithDefault anyVersion pkgname packageVersionConstraintMap + packageVersionConstraintMap :: Map PackageName VersionRange packageVersionConstraintMap = let pcs = map unlabelPackageConstraint constraints in Map.fromList [ (scopeToPackageName scope, range) diff --git a/cabal-install/src/Distribution/Client/Fetch.hs b/cabal-install/src/Distribution/Client/Fetch.hs index 21d5318000..8e9496c8dc 100644 --- a/cabal-install/src/Distribution/Client/Fetch.hs +++ b/cabal-install/src/Distribution/Client/Fetch.hs @@ -147,6 +147,7 @@ planPackages verbosity comp platform fetchFlags resolveWithoutDependencies resolverParams where + resolverParams :: DepResolverParams resolverParams = setMaxBackjumps (if maxBackjumps < 0 then Nothing diff --git a/cabal-install/src/Distribution/Client/FetchUtils.hs b/cabal-install/src/Distribution/Client/FetchUtils.hs index b087867f5d..e632147d58 100644 --- a/cabal-install/src/Distribution/Client/FetchUtils.hs +++ b/cabal-install/src/Distribution/Client/FetchUtils.hs @@ -146,6 +146,7 @@ fetchPackage verbosity repoCtxt loc = case loc of RemoteSourceRepoPackage _repo Nothing -> die' verbosity "fetchPackage: source repos not supported" where + downloadTarballPackage :: URI -> IO FilePath downloadTarballPackage uri = do transport <- repoContextGetTransport repoCtxt transportCheckHttps verbosity transport uri @@ -173,6 +174,7 @@ fetchRepoTarball verbosity' repoCtxt repo pkgid = do -- whether we download or not is non-deterministic verbosity = verboseUnmarkOutput verbosity' + downloadRepoPackage :: IO FilePath downloadRepoPackage = case repo of RepoLocalNoIndex{} -> return (packageFile repo pkgid) diff --git a/cabal-install/src/Distribution/Client/Freeze.hs b/cabal-install/src/Distribution/Client/Freeze.hs index 1856ddad12..4b4ea1f31d 100644 --- a/cabal-install/src/Distribution/Client/Freeze.hs +++ b/cabal-install/src/Distribution/Client/Freeze.hs @@ -121,6 +121,7 @@ getFreezePkgs verbosity packageDBs repoCtxt comp platform progdb verbosity comp platform freezeFlags installedPkgIndex sourcePkgDb pkgConfigDb pkgSpecifiers where + sanityCheck :: [PackageSpecifier UnresolvedSourcePackage] -> IO () sanityCheck pkgSpecifiers = do when (not . null $ [n | n@(NamedPackage _ _) <- pkgSpecifiers]) $ die' verbosity $ "internal error: 'resolveUserTargets' returned " @@ -154,6 +155,7 @@ planPackages verbosity comp platform freezeFlags return $ pruneInstallPlan installPlan pkgSpecifiers where + resolverParams :: DepResolverParams resolverParams = setMaxBackjumps (if maxBackjumps < 0 then Nothing diff --git a/cabal-install/src/Distribution/Client/HttpUtils.hs b/cabal-install/src/Distribution/Client/HttpUtils.hs index 6de14f3c66..e5708c87d0 100644 --- a/cabal-install/src/Distribution/Client/HttpUtils.hs +++ b/cabal-install/src/Distribution/Client/HttpUtils.hs @@ -143,6 +143,7 @@ downloadURI transport verbosity uri path = do NeedsDownload hash -> makeDownload transport' hash Nothing where + makeDownload :: HttpTransport -> Maybe BS8.ByteString -> Maybe String -> IO DownloadResult makeDownload transport' sha256 etag = withTempFileName (takeDirectory path) (takeFileName path) $ \tmpFile -> do result <- getHttp transport' verbosity uri etag tmpFile [] diff --git a/cabal-install/src/Distribution/Client/ProjectBuilding.hs b/cabal-install/src/Distribution/Client/ProjectBuilding.hs index 6e96c459fe..fd5a99ae92 100644 --- a/cabal-install/src/Distribution/Client/ProjectBuilding.hs +++ b/cabal-install/src/Distribution/Client/ProjectBuilding.hs @@ -230,6 +230,7 @@ rebuildTargetsDryRun distDirLayout@DistDirLayout{..} shared = then dryRunLocalPkg pkg depsBuildStatus srcdir else return (BuildStatusUnpack tarball) where + srcdir :: FilePath srcdir = distUnpackedSrcDirectory (packageId pkg) dryRunLocalPkg :: ElaboratedConfiguredPackage @@ -250,6 +251,7 @@ rebuildTargetsDryRun distDirLayout@DistDirLayout{..} shared = Right buildResult -> return (BuildStatusUpToDate buildResult) where + packageFileMonitor :: PackageFileMonitor packageFileMonitor = newPackageFileMonitor shared distDirLayout (elabDistDirParams shared pkg) @@ -295,6 +297,7 @@ improveInstallPlanWithUpToDatePackages :: BuildStatusMap improveInstallPlanWithUpToDatePackages pkgsBuildStatus = InstallPlan.installed canPackageBeImproved where + canPackageBeImproved :: ElaboratedConfiguredPackage -> Bool canPackageBeImproved pkg = case Map.lookup (installedUnitId pkg) pkgsBuildStatus of Just BuildStatusUpToDate {} -> True @@ -376,6 +379,7 @@ packageFileMonitorKeyValues elab = -- do not affect the configure step need to be nulled out. Those parts are -- the specific targets that we're going to build. -- + elab_config :: ElaboratedConfiguredPackage elab_config = elab { elabBuildTargets = [], @@ -390,6 +394,7 @@ packageFileMonitorKeyValues elab = -- more or less the opposite of the first part, as it's just the info about -- what targets we're going to build. -- + buildComponents :: Set ComponentName buildComponents = elabBuildTargetWholeComponents elab -- | Do all the checks on whether a package has changed and thus needs either @@ -464,6 +469,7 @@ checkPackageFileMonitorChanged PackageFileMonitor{..} (docsResult, testsResult) = buildResult where (pkgconfig, buildComponents) = packageFileMonitorKeyValues pkg + changedToMaybe :: MonitorChanged a b -> Maybe b changedToMaybe (MonitorChanged _) = Nothing changedToMaybe (MonitorUnchanged x _) = Just x @@ -681,6 +687,7 @@ rebuildTarget verbosity where unexpectedState = error "rebuildTarget: unexpected package status" + downloadPhase :: IO BuildResult downloadPhase = do downsrcloc <- annotateFailureNoLog DownloadFailed $ waitAsyncPackageDownload verbosity downloadMap pkg @@ -888,6 +895,7 @@ unpackPackageTarball verbosity tarball parentdir pkgid pkgTextOverride = writeFileAtomic cabalFile pkgtxt where + cabalFile :: FilePath cabalFile = parentdir </> pkgsubdir </> prettyShow pkgname <.> "cabal" pkgsubdir = prettyShow pkgid @@ -1081,12 +1089,14 @@ buildAndInstallUnpackedPackage verbosity uid = installedUnitId rpkg compid = compilerId compiler + dispname :: String dispname = case elabPkgOrComp pkg of ElabPackage _ -> prettyShow pkgid ++ " (all, legacy fallback)" ElabComponent comp -> prettyShow pkgid ++ " (" ++ maybe "custom" prettyShow (compComponentName comp) ++ ")" + noticeProgress :: ProgressPhase -> IO () noticeProgress phase = when isParallelBuild $ progressMessage verbosity phase dispname @@ -1467,6 +1477,7 @@ withTempInstalledPackageInfoFile verbosity tempdir action = "Couldn't parse the output of 'setup register --gen-pkg-config':" ++ show perror + readPkgConf :: FilePath -> FilePath -> IO InstalledPackageInfo readPkgConf pkgConfDir pkgConfFile = do pkgConfStr <- BS.readFile (pkgConfDir </> pkgConfFile) (warns, ipkg) <- case Installed.parseInstalledPackageInfo pkgConfStr of diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index 45ea7c9ecc..4113f5f1fb 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -338,10 +338,12 @@ rebuildProjectConfig verbosity ProjectConfigShared { projectConfigConfigFile } = projectConfigShared cliConfig + fileMonitorProjectConfig :: + FileMonitor + (FilePath, FilePath) + (ProjectConfig, [PackageSpecifier UnresolvedSourcePackage]) fileMonitorProjectConfig = - newFileMonitor (distProjectCacheFile "config") :: FileMonitor - (FilePath, FilePath) - (ProjectConfig, [PackageSpecifier UnresolvedSourcePackage]) + newFileMonitor (distProjectCacheFile "config") -- Read the cabal.project (or implicit config) and combine it with -- arguments from the command line @@ -964,6 +966,7 @@ planPackages verbosity comp platform solver SolverSettings{..} --TODO: [nice to have] disable multiple instances restriction in -- the solver, but then make sure we can cope with that in the -- output. + resolverParams :: DepResolverParams resolverParams = setMaxBackjumps solverSettingMaxBackjumps @@ -1074,6 +1077,7 @@ planPackages verbosity comp platform solver SolverSettings{..} $ stdResolverParams + stdResolverParams :: DepResolverParams stdResolverParams = -- Note: we don't use the standardInstallPolicy here, since that uses -- its own addDefaultSetupDependencies that is not appropriate for us. @@ -1286,6 +1290,7 @@ elaborateInstallPlan verbosity platform compiler compilerprogdb pkgConfigDB pkgConfigReplOptions = mempty } + preexistingInstantiatedPkgs :: Map UnitId FullUnitId preexistingInstantiatedPkgs = Map.fromList (mapMaybe f (SolverInstallPlan.toList solverPlan)) where @@ -1297,6 +1302,8 @@ elaborateInstallPlan verbosity platform compiler compilerprogdb pkgConfigDB (Map.fromList (IPI.instantiatedWith ipkg)))) f _ = Nothing + elaboratedInstallPlan :: + LogProgress (InstallPlan.GenericInstallPlan IPI.InstalledPackageInfo ElaboratedConfiguredPackage) elaboratedInstallPlan = flip InstallPlan.fromSolverInstallPlanWithProgress solverPlan $ \mapDep planpkg -> case planpkg of -- GitLab