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

Duplicate project imports slow down the build #10512

Open
philderbeast opened this issue Nov 3, 2024 · 0 comments
Open

Duplicate project imports slow down the build #10512

philderbeast opened this issue Nov 3, 2024 · 0 comments

Comments

@philderbeast
Copy link
Collaborator

philderbeast commented Nov 3, 2024

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

Footnotes

  1. Detect duplicate non-cyclical project imports #9933 tries to avoid this by making duplicate imports an error.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant