You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When a project has duplicate imports the build is slower than it could be1.
To see this in action, I've created a woops project, the same as the yops one (the Y-forking one from #10508) but every .project or .config also imports https://www.stackage.org/lts-21.25/cabal.config. The former takes 12 s to cabal build --dry-run and the later takes 200 ms. If I add one import from stackage to the root of the yops project, its build takes 425 ms.
$ ghc --numeric-version
9.4.8
$ time cabal run cabal-install:exe:cabal -- build --dry-run \
--project-file=cabal-testsuite/PackageTests/ConditionalAndImport/woops-0.project
Resolving dependencies...
Warning: this is a debug build of cabal-install with assertions enabled.
When using configuration from:
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- https://www.stackage.org/lts-21.25/cabal.config
- woops-0.project
- woops-2.config
- woops-4.config
- woops-4.config
- woops-6.config
- woops-6.config
- woops-6.config
- woops-8.config
- woops-8.config
- woops-8.config
- woops-8.config
- woops/woops-1.config
- woops/woops-3.config
- woops/woops-3.config
- woops/woops-5.config
- woops/woops-5.config
- woops/woops-5.config
- woops/woops-7.config
- woops/woops-7.config
- woops/woops-7.config
- woops/woops-7.config
- woops/woops-9.config
- woops/woops-9.config
- woops/woops-9.config
- woops/woops-9.config
- woops/woops-9.config
The following errors occurred:
- The package directory '.' does not contain any .cabal file.
________________________________________________________
Executed in 12.08 secs fish external
usr time 2.94 secs 0.00 micros 2.94 secs
sys time 0.45 secs 802.00 micros 0.45 secs
$ time cabal run cabal-install:exe:cabal -- build --dry-run \
--project-file=cabal-testsuite/PackageTests/ConditionalAndImport/yops-0.project
Warning: this is a debug build of cabal-install with assertions enabled.
When using configuration from:
- yops-0.project
- yops-2.config
- yops-4.config
- yops-4.config
- yops-6.config
- yops-6.config
- yops-6.config
- yops-8.config
- yops-8.config
- yops-8.config
- yops-8.config
- yops/yops-1.config
- yops/yops-3.config
- yops/yops-3.config
- yops/yops-5.config
- yops/yops-5.config
- yops/yops-5.config
- yops/yops-7.config
- yops/yops-7.config
- yops/yops-7.config
- yops/yops-7.config
- yops/yops-9.config
- yops/yops-9.config
- yops/yops-9.config
- yops/yops-9.config
- yops/yops-9.config
The following errors occurred:
- The package directory '.' does not contain any .cabal file.
________________________________________________________
Executed in 200.73 millis fish external
usr time 148.65 millis 0.00 micros 148.65 millis
sys time 52.03 millis 692.00 micros 51.33 millis
$ echo "import: https://www.stackage.org/lts-21.25/cabal.config" \
>> cabal-testsuite/PackageTests/ConditionalAndImport/yops-0.project
$ time cabal run cabal-install:exe:cabal -- build --dry-run \
--project-file=cabal-testsuite/PackageTests/ConditionalAndImport/yops-0.project
Warning: this is a debug build of cabal-install with assertions enabled.
When using configuration from:
- https://www.stackage.org/lts-21.25/cabal.config
- yops-0.project
- yops-2.config
- yops-4.config
- yops-4.config
- yops-6.config
- yops-6.config
- yops-6.config
- yops-8.config
- yops-8.config
- yops-8.config
- yops-8.config
- yops/yops-1.config
- yops/yops-3.config
- yops/yops-3.config
- yops/yops-5.config
- yops/yops-5.config
- yops/yops-5.config
- yops/yops-7.config
- yops/yops-7.config
- yops/yops-7.config
- yops/yops-7.config
- yops/yops-9.config
- yops/yops-9.config
- yops/yops-9.config
- yops/yops-9.config
- yops/yops-9.config
The following errors occurred:
- The package directory '.' does not contain any .cabal file.
________________________________________________________
Executed in 425.02 millis fish external
usr time 210.23 millis 0.00 micros 210.23 millis
sys time 49.17 millis 717.00 micros 48.45 millis
When a project has duplicate imports the build is slower than it could be1.
To see this in action, I've created a
woops
project, the same as theyops
one (the Y-forking one from #10508) but every.project
or.config
also importshttps://www.stackage.org/lts-21.25/cabal.config
. The former takes12 s
tocabal build --dry-run
and the later takes200 ms
. If I add one import from stackage to the root of theyops
project, its build takes425 ms
.Footnotes
Detect duplicate non-cyclical project imports #9933 tries to avoid this by making duplicate imports an error. ↩
The text was updated successfully, but these errors were encountered: