Skip to content
Merged
Show file tree
Hide file tree
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
15 changes: 12 additions & 3 deletions src/Stack/Dot.hs
Original file line number Diff line number Diff line change
Expand Up @@ -140,11 +140,17 @@ listDependencies opts = do
if listDepsTree opts then
do
liftIO $ Text.putStrLn "Packages"
liftIO $ printTree opts 0 [] pkgs resultGraph
Comment thread
dbaynard marked this conversation as resolved.
liftIO $ printTree opts 0 [] (treeRoots opts pkgs) resultGraph
else
void (Map.traverseWithKey go (snd <$> resultGraph))
where go name payload = liftIO $ Text.putStrLn $ listDepsLine opts name payload

treeRoots :: ListDepsOpts -> Set PackageName -> Set PackageName
treeRoots opts projectPackages = let targets = dotTargets $ listDepsDotOpts opts
in if null targets
then projectPackages
else Set.fromList $ map (mkPackageName . Text.unpack) targets

printTree :: ListDepsOpts
-> Int
-> [Int]
Expand All @@ -156,12 +162,15 @@ printTree opts depth remainingDepsCounts packages dependencyMap =
where
toSeq = Seq.fromList . Set.toList
go index name = let newDepsCounts = remainingDepsCounts ++ [Set.size packages - index - 1]
(deps, payload) = (Map.!) dependencyMap name
in do
in
case Map.lookup name dependencyMap of
Just (deps, payload) -> do
printTreeNode opts depth newDepsCounts deps payload name
if Just depth == dotDependencyDepth (listDepsDotOpts opts)
then return ()
else printTree opts (depth + 1) newDepsCounts deps dependencyMap
-- TODO: Define this behaviour, maybe return an error?
Nothing -> return ()

printTreeNode :: ListDepsOpts
-> Int
Expand Down
71 changes: 52 additions & 19 deletions test/integration/tests/4101-dependency-tree/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,65 @@ main :: IO ()
main = do
stackCheckStdout ["ls", "dependencies", "--tree"] $ \stdOut -> do
let expected = unlines [ "Packages"
, "└─┬ files 0.1.0.0"
, " ├─┬ base 4.10.1.0"
, " │ ├─┬ ghc-prim 0.5.1.1"
, " │ │ └── rts 1.0"
, " │ ├─┬ integer-gmp 1.0.1.0"
, " │ │ └─┬ ghc-prim 0.5.1.1"
, " │ │ └── rts 1.0"
, " │ └── rts 1.0"
, " └─┬ mtl 2.2.2"
, " ├─┬ base 4.10.1.0"
, " │ ├─┬ ghc-prim 0.5.1.1"
, " │ │ └── rts 1.0"
, " │ ├─┬ integer-gmp 1.0.1.0"
, " │ │ └─┬ ghc-prim 0.5.1.1"
, " │ │ └── rts 1.0"
, "├─┬ files 0.1.0.0"
, "│ ├─┬ base 4.10.1.0"
, "│ │ ├─┬ ghc-prim 0.5.1.1"
, "│ │ │ └── rts 1.0"
, "│ │ ├─┬ integer-gmp 1.0.1.0"
, "│ │ │ └─┬ ghc-prim 0.5.1.1"
, "│ │ │ └── rts 1.0"
, "│ │ └── rts 1.0"
, "│ ├─┬ mtl 2.2.2"
, "│ │ ├─┬ base 4.10.1.0"
, "│ │ │ ├─┬ ghc-prim 0.5.1.1"
, "│ │ │ │ └── rts 1.0"
, "│ │ │ ├─┬ integer-gmp 1.0.1.0"
, "│ │ │ │ └─┬ ghc-prim 0.5.1.1"
, "│ │ │ │ └── rts 1.0"
, "│ │ │ └── rts 1.0"
, "│ │ └── transformers 0.5.2.0"
, "│ └─┬ subproject 0.1.0.0"
, "│ └─┬ base 4.10.1.0"
, "│ ├─┬ ghc-prim 0.5.1.1"
, "│ │ └── rts 1.0"
, "│ ├─┬ integer-gmp 1.0.1.0"
, "│ │ └─┬ ghc-prim 0.5.1.1"
, "│ │ └── rts 1.0"
, "│ └── rts 1.0"
, "└─┬ subproject 0.1.0.0"
, " └─┬ base 4.10.1.0"
, " ├─┬ ghc-prim 0.5.1.1"
, " │ └── rts 1.0"
, " └── transformers 0.5.2.0"
, " ├─┬ integer-gmp 1.0.1.0"
, " │ └─┬ ghc-prim 0.5.1.1"
, " │ └── rts 1.0"
, " └── rts 1.0"
]
when (stdOut /= expected) $
error $ unlines [ "Expected:", expected, "Actual:", stdOut ]

stackCheckStdout ["ls", "dependencies", "--tree", "--depth=1"] $ \stdOut -> do
let expected = unlines [ "Packages"
, "└─┬ files 0.1.0.0"
, " ├── base 4.10.1.0"
, " └── mtl 2.2.2"
, "├─┬ files 0.1.0.0"
, "│ ├── base 4.10.1.0"
, "│ ├── mtl 2.2.2"
, "│ └── subproject 0.1.0.0"
, "└─┬ subproject 0.1.0.0"
, " └── base 4.10.1.0"
]
when (stdOut /= expected) $
error $ unlines [ "Expected:", expected, "Actual:", stdOut ]

stackCheckStdout ["ls", "dependencies", "--tree", "subproject"] $ \stdOut -> do
let expected = unlines [ "Packages"
, "└─┬ subproject 0.1.0.0"
, " └─┬ base 4.10.1.0"
, " ├─┬ ghc-prim 0.5.1.1"
, " │ └── rts 1.0"
, " ├─┬ integer-gmp 1.0.1.0"
, " │ └─┬ ghc-prim 0.5.1.1"
, " │ └── rts 1.0"
, " └── rts 1.0"
]
when (stdOut /= expected) $
error $ unlines [ "Expected:", expected, "Actual:", stdOut ]
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ cabal-version: >=1.10
library
hs-source-dirs: src
exposed-modules: Lib
build-depends: base >= 4.7 && < 5, mtl
build-depends: base >= 4.7 && < 5, mtl, subproject
default-language: Haskell2010
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
resolver: lts-11.22
packages:
- .
- subproject
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module Main where

main :: IO ()
main = do
putStrLn "hello world"
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
resolver: lts-11.22
packages:
- .
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: subproject
version: 0.1.0.0
build-type: Simple
cabal-version: >=1.10

library
hs-source-dirs: src
exposed-modules: Lib
build-depends: base >= 4.7 && < 5
default-language: Haskell2010