Skip to content

Commit f55533c

Browse files
authored
crash on cyclic dependencies in reverse dependency lookup also (#105)
1 parent 43891df commit f55533c

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

app/Main.hs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,15 +193,18 @@ performInstall set pkgName PackageInfo{ repo, version } = do
193193
pure pkgDir
194194

195195
getReverseDeps :: PackageSet -> PackageName -> IO [(PackageName, PackageInfo)]
196-
getReverseDeps db dep =
197-
List.nub <$> foldMap go (Map.toList db)
196+
getReverseDeps = getReverseDeps' Set.empty
198197
where
199-
go pair@(packageName, PackageInfo {dependencies}) =
200-
case List.find (== dep) dependencies of
201-
Nothing -> return mempty
202-
Just _ -> do
203-
innerDeps <- getReverseDeps db packageName
204-
return $ pair : innerDeps
198+
getReverseDeps' seen db dep = List.nub <$> foldMap (go seen db dep) (Map.toList db)
199+
go seen db dep pair@(packageName, PackageInfo {dependencies})
200+
| packageName `Set.member` seen =
201+
exitWithErr ("Cycle in package dependencies at package " <> runPackageName packageName)
202+
| otherwise =
203+
case List.find (== dep) dependencies of
204+
Nothing -> return mempty
205+
Just _ -> do
206+
innerDeps <- getReverseDeps' (Set.insert packageName seen) db packageName
207+
return $ pair : innerDeps
205208

206209
getTransitiveDeps :: PackageSet -> [PackageName] -> IO [(PackageName, PackageInfo)]
207210
getTransitiveDeps db deps =

0 commit comments

Comments
 (0)