Skip to content

Commit 2554a52

Browse files
committed
Fix deleteSourcePackageId
1 parent 8aadca3 commit 2554a52

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

Cabal/src/Distribution/Simple/PackageIndex.hs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,10 @@ deleteUnitId ipkgid original@(PackageIndex pids pnames) =
323323
. List.deleteBy (\_ pkg -> installedUnitId pkg == ipkgid) undefined
324324

325325
-- | Removes all packages with this source 'PackageId' from the index.
326+
--
327+
-- The Index maps unitids to instances, however we may have multiple unitids
328+
-- for the same package. Especially if for multiple compilers, as such we need
329+
-- to ensure we don't delete by name/version, but by name/version/compiler only.
326330
deleteSourcePackageId
327331
:: PackageId
328332
-> InstalledPackageIndex
@@ -333,11 +337,13 @@ deleteSourcePackageId pkgid original@(PackageIndex pids pnames) =
333337
Nothing -> original
334338
Just pvers -> case Map.lookup (packageVersion pkgid) pvers of
335339
Nothing -> original
336-
Just pkgs ->
337-
mkPackageIndex
338-
(foldl' (flip (Map.delete . installedUnitId)) pids pkgs)
339-
-- (Map.update deletePkgInstance (installedUnitId pkgid) pids)
340-
(deletePkgName pnames)
340+
Just pkgs -> case [pkg | pkg <- pkgs, IPI.pkgCompiler pkg == pkgCompiler pkgid] of
341+
[] -> original
342+
pkgs' ->
343+
mkPackageIndex
344+
(foldl' (flip (Map.delete . installedUnitId)) pids pkgs')
345+
(deletePkgName pnames)
346+
341347
where
342348
deletePkgName =
343349
Map.update deletePkgVersion (packageName pkgid, LMainLibName)
@@ -354,7 +360,7 @@ deleteSourcePackageId pkgid original@(PackageIndex pids pnames) =
354360

355361
deletePkgInstances :: [IPI.InstalledPackageInfo] -> Maybe [IPI.InstalledPackageInfo]
356362
deletePkgInstances xs = if null xs' then Nothing else Just xs'
357-
where xs' = [x | x <- xs, pkgCompiler pkgid /= pkgCompiler (IPI.sourcePackageId x)]
363+
where xs' = [x | x <- xs, pkgCompiler pkgid /= IPI.pkgCompiler x]
358364

359365
-- | Removes all packages with this (case-sensitive) name from the index.
360366
--

0 commit comments

Comments
 (0)