Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Include component name in unit-id #6547

Merged
merged 1 commit into from
Feb 19, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 47 additions & 38 deletions cabal-install/Distribution/Client/PackageHash.hs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,6 @@ import Distribution.Simple.Compiler
import Distribution.Simple.InstallDirs
( PathTemplate, fromPathTemplate )
import Distribution.Pretty (prettyShow)
import Distribution.Deprecated.Text
( display )
import Distribution.Types.PkgconfigVersion (PkgconfigVersion)
import Distribution.Client.HashValue
import Distribution.Client.Types
Expand Down Expand Up @@ -76,11 +74,22 @@ hashedInstalledPackageId
-- without significant path length limitations (ie not Windows).
--
hashedInstalledPackageIdLong :: PackageHashInputs -> InstalledPackageId
hashedInstalledPackageIdLong pkghashinputs@PackageHashInputs{pkgHashPkgId} =
mkComponentId $
display pkgHashPkgId -- to be a bit user friendly
++ "-"
++ showHashValue (hashPackageHashInputs pkghashinputs)
hashedInstalledPackageIdLong
pkghashinputs@PackageHashInputs{pkgHashPkgId,pkgHashComponent}
= mkComponentId $
prettyShow pkgHashPkgId -- to be a bit user friendly
++ maybe "" displayComponent pkgHashComponent
++ "-"
++ showHashValue (hashPackageHashInputs pkghashinputs)
where
displayComponent :: CD.Component -> String
displayComponent CD.ComponentLib = ""
displayComponent (CD.ComponentSubLib s) = "-l-" ++ prettyShow s
displayComponent (CD.ComponentFLib s) = "-f-" ++ prettyShow s
displayComponent (CD.ComponentExe s) = "-e-" ++ prettyShow s
displayComponent (CD.ComponentTest s) = "-t-" ++ prettyShow s
displayComponent (CD.ComponentBench s) = "-b-" ++ prettyShow s
displayComponent CD.ComponentSetup = "-setup"

-- | On Windows we have serious problems with path lengths. Windows imposes a
-- maximum path length of 260 chars, and even if we can use the windows long
Expand All @@ -105,8 +114,8 @@ hashedInstalledPackageIdShort pkghashinputs@PackageHashInputs{pkgHashPkgId} =
mkComponentId $
intercalate "-"
-- max length now 64
[ truncateStr 14 (display name)
, truncateStr 8 (display version)
[ truncateStr 14 (prettyShow name)
, truncateStr 8 (prettyShow version)
, showHashValue (truncateHash 20 (hashPackageHashInputs pkghashinputs))
]
where
Expand Down Expand Up @@ -143,8 +152,8 @@ hashedInstalledPackageIdVeryShort :: PackageHashInputs -> InstalledPackageId
hashedInstalledPackageIdVeryShort pkghashinputs@PackageHashInputs{pkgHashPkgId} =
mkComponentId $
intercalate "-"
[ filter (not . flip elem "aeiou") (display name)
, display version
[ filter (not . flip elem "aeiou") (prettyShow name)
, prettyShow version
, showHashValue (truncateHash 4 (hashPackageHashInputs pkghashinputs))
]
where
Expand Down Expand Up @@ -250,56 +259,56 @@ renderPackageHashInputs PackageHashInputs{
-- into the ghc-pkg db. At that point this should probably be changed to
-- use the config file infrastructure so it can be read back in again.
LBS.pack $ unlines $ catMaybes $
[ entry "pkgid" display pkgHashPkgId
[ entry "pkgid" prettyShow pkgHashPkgId
, mentry "component" show pkgHashComponent
, entry "src" showHashValue pkgHashSourceHash
, entry "pkg-config-deps"
(intercalate ", " . map (\(pn, mb_v) -> display pn ++
(intercalate ", " . map (\(pn, mb_v) -> prettyShow pn ++
case mb_v of
Nothing -> ""
Just v -> " " ++ prettyShow v)
. Set.toList) pkgHashPkgConfigDeps
, entry "deps" (intercalate ", " . map display
, entry "deps" (intercalate ", " . map prettyShow
. Set.toList) pkgHashDirectDeps
-- and then all the config
, entry "compilerid" display pkgHashCompilerId
, entry "platform" display pkgHashPlatform
, entry "compilerid" prettyShow pkgHashCompilerId
, entry "platform" prettyShow pkgHashPlatform
, opt "flags" mempty showFlagAssignment pkgHashFlagAssignment
, opt "configure-script" [] unwords pkgHashConfigureScriptArgs
, opt "vanilla-lib" True display pkgHashVanillaLib
, opt "shared-lib" False display pkgHashSharedLib
, opt "dynamic-exe" False display pkgHashDynExe
, opt "fully-static-exe" False display pkgHashFullyStaticExe
, opt "ghci-lib" False display pkgHashGHCiLib
, opt "prof-lib" False display pkgHashProfLib
, opt "prof-exe" False display pkgHashProfExe
, opt "vanilla-lib" True prettyShow pkgHashVanillaLib
, opt "shared-lib" False prettyShow pkgHashSharedLib
, opt "dynamic-exe" False prettyShow pkgHashDynExe
, opt "fully-static-exe" False prettyShow pkgHashFullyStaticExe
, opt "ghci-lib" False prettyShow pkgHashGHCiLib
, opt "prof-lib" False prettyShow pkgHashProfLib
, opt "prof-exe" False prettyShow pkgHashProfExe
, opt "prof-lib-detail" ProfDetailDefault showProfDetailLevel pkgHashProfLibDetail
, opt "prof-exe-detail" ProfDetailDefault showProfDetailLevel pkgHashProfExeDetail
, opt "hpc" False display pkgHashCoverage
, opt "hpc" False prettyShow pkgHashCoverage
, opt "optimisation" NormalOptimisation (show . fromEnum) pkgHashOptimization
, opt "split-objs" False display pkgHashSplitObjs
, opt "split-sections" False display pkgHashSplitSections
, opt "stripped-lib" False display pkgHashStripLibs
, opt "stripped-exe" True display pkgHashStripExes
, opt "split-objs" False prettyShow pkgHashSplitObjs
, opt "split-sections" False prettyShow pkgHashSplitSections
, opt "stripped-lib" False prettyShow pkgHashStripLibs
, opt "stripped-exe" True prettyShow pkgHashStripExes
, opt "debug-info" NormalDebugInfo (show . fromEnum) pkgHashDebugInfo
, opt "extra-lib-dirs" [] unwords pkgHashExtraLibDirs
, opt "extra-framework-dirs" [] unwords pkgHashExtraFrameworkDirs
, opt "extra-include-dirs" [] unwords pkgHashExtraIncludeDirs
, opt "prog-prefix" Nothing (maybe "" fromPathTemplate) pkgHashProgPrefix
, opt "prog-suffix" Nothing (maybe "" fromPathTemplate) pkgHashProgSuffix

, opt "documentation" False display pkgHashDocumentation
, opt "haddock-hoogle" False display pkgHashHaddockHoogle
, opt "haddock-html" False display pkgHashHaddockHtml
, opt "documentation" False prettyShow pkgHashDocumentation
, opt "haddock-hoogle" False prettyShow pkgHashHaddockHoogle
, opt "haddock-html" False prettyShow pkgHashHaddockHtml
, opt "haddock-html-location" Nothing (fromMaybe "") pkgHashHaddockHtmlLocation
, opt "haddock-foreign-libraries" False display pkgHashHaddockForeignLibs
, opt "haddock-executables" False display pkgHashHaddockExecutables
, opt "haddock-tests" False display pkgHashHaddockTestSuites
, opt "haddock-benchmarks" False display pkgHashHaddockBenchmarks
, opt "haddock-internal" False display pkgHashHaddockInternal
, opt "haddock-foreign-libraries" False prettyShow pkgHashHaddockForeignLibs
, opt "haddock-executables" False prettyShow pkgHashHaddockExecutables
, opt "haddock-tests" False prettyShow pkgHashHaddockTestSuites
, opt "haddock-benchmarks" False prettyShow pkgHashHaddockBenchmarks
, opt "haddock-internal" False prettyShow pkgHashHaddockInternal
, opt "haddock-css" Nothing (fromMaybe "") pkgHashHaddockCss
, opt "haddock-hyperlink-source" False display pkgHashHaddockLinkedSource
, opt "haddock-quickjump" False display pkgHashHaddockQuickJump
, opt "haddock-hyperlink-source" False prettyShow pkgHashHaddockLinkedSource
, opt "haddock-quickjump" False prettyShow pkgHashHaddockQuickJump
, opt "haddock-contents-location" Nothing (maybe "" fromPathTemplate) pkgHashHaddockContents

] ++ Map.foldrWithKey (\prog args acc -> opt (prog ++ "-options") [] unwords args : acc) [] pkgHashProgramArgs
Expand Down