haskell / cabal

Official upstream development repository for Cabal and cabal-install
https://haskell.org/cabal
Other
1.61k stars 691 forks source link

3.0 Solver issue #6099

Closed davean closed 4 years ago

davean commented 5 years ago

I've observed a weird behavior that I haven't dug down into but follows the pattern below:

cabal new-configure -> failure cabal new-configure --allow-newer=base -> success cabal new-configure -> success cabal new-configure -> failure

It seems that the 3rd new-configure is picking up settings and using them but also clearing them. Since this is new-configure it seems it should clear them and not use them.

Additionally, there is an error "(conflict: requires NoStarIsType)", which comes from:

if impl(ghc >= 8.6) default-extensions: NoStarIsType

as that's an extension it doesn't seem it should cause a dependency resolution failure. In fact, it doesn't in 2.4 so it seems to be a regression.

[ 15:50 ] davean@indite AlON % cabal -V
cabal-install version 3.0.0.0
compiled using version 3.0.0.0 of the Cabal library
[ 15:50 ] davean@indite AlON % cabal new-configure                                                                     [0, 0s]
'cabal.project.local' file already exists. Now overwriting it.
Warning: Parsing the index cache failed (Unknown encoding for constructor).
Trying to regenerate the index cache...
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] trying: AlON-0 (user goal)
[__1] trying: base-4.12.0.0/installed-4.1... (dependency of AlON)
[__2] trying: reflex-time-0 (user goal)
[__3] trying: delay-0 (dependency of reflex-time)
[__4] next goal: dimensional (dependency of delay)
[__4] rejecting: dimensional-1.3, dimensional-1.2 (conflict: requires
NoStarIsType)
[__4] rejecting: dimensional-1.1 (conflict: base==4.12.0.0/installed-4.1...,
dimensional => base>=4.7 && <4.12)
[__4] rejecting: dimensional-1.0.1.3, dimensional-1.0.1.2 (conflict:
base==4.12.0.0/installed-4.1..., dimensional => base>=4.7 && <4.11)
[__4] rejecting: dimensional-1.0.1.1 (conflict:
base==4.12.0.0/installed-4.1..., dimensional => base>=4.7 && <4.9)
[__4] rejecting: dimensional-1.0.1.0, dimensional-1.0.0.0,
dimensional-0.13.0.2, dimensional-0.13.0.1, dimensional-0.13,
dimensional-0.12.3, dimensional-0.12.2, dimensional-0.12.1.1,
dimensional-0.12.1, dimensional-0.12, dimensional-0.10.2,
dimensional-0.10.1.2, dimensional-0.10.1.1, dimensional-0.10.1,
dimensional-0.10, dimensional-0.9, dimensional-0.8.2.1, dimensional-0.8.0.1,
dimensional-0.8, dimensional-0.7.3, dimensional-0.7.2, dimensional-0.7.1,
dimensional-0.7 (conflict: delay => dimensional>=1.0.1.1)
[__4] fail (backjumping, conflict set: base, delay, dimensional)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: base, dimensional, delay, AlON,
reflex-time
Try running with --minimize-conflict-set to improve the error message.

[ 15:50 ] davean@indite AlON % cabal new-configure --allow-newer=base                                                  [1, 7s]
'cabal.project.local' file already exists. Now overwriting it.
Resolving dependencies...
Build profile: -w ghc-8.6.5 -O1
In order, the following would be built (use -v for more details):
 - ChasingBottoms-1.3.1.5 (lib) (requires download & build)
 - HUnit-1.6.0.0 (lib) (requires download & build)
 - cmdargs-0.10.20 (lib) (requires download & build)
 - exact-pi-0.4.1.4 (lib) (requires download & build)
 - mmap-0.5.9 (requires download & build)
 - reflex-files-0 (lib) (cannot read state cache)
 - split-0.2.3.3 (lib) (requires download & build)
 - tasty-1.2.3 (lib) (requires build)
 - trie-0.7 (lib) (first run)
 - vector-algorithms-0.8.0.1 (lib) (requires download & build)
 - dimensional-1.1 (lib) (requires download & build)
 - tasty-quickcheck-0.10.1 (lib) (requires download & build)
 - tasty-hunit-0.10.0.2 (lib) (requires build)
 - mono-traversable-1.0.11.0 (lib) (requires download & build)
 - delay-0 (lib) (requires build)
 - trie-0.7 (test:trie-tests) (first run)
 - reflex-test-0 (lib) (cannot read state cache)
 - conduit-1.3.1.1 (lib) (requires download & build)
 - reflex-time-0 (lib) (cannot read state cache)
 - reflex-files-0 (test:test-reflex-files) (first run)
 - libyaml-0.1.1.0 (lib) (requires download & build)
 - reflex-time-0 (test:test) (first run)
 - AlON-0 (lib) (cannot read state cache)
 - yaml-0.11.0.0 (lib) (requires download & build)
 - AlON-0 (test:test) (cannot read state cache)
 - AlON-0 (exe:mini-site) (cannot read state cache)
 - mustache-2.3.0 (exe:haskell-mustache) (requires build)
[ 15:50 ] davean@indite AlON % cabal new-configure                                                                     [0, 4s]
'cabal.project.local' file already exists. Now overwriting it.
Build profile: -w ghc-8.6.5 -O1
In order, the following would be built (use -v for more details):
 - ChasingBottoms-1.3.1.5 (lib) (requires download & build)
 - HUnit-1.6.0.0 (lib) (requires download & build)
 - cmdargs-0.10.20 (lib) (requires download & build)
 - exact-pi-0.4.1.4 (lib) (requires download & build)
 - mmap-0.5.9 (requires download & build)
 - reflex-files-0 (lib) (cannot read state cache)
 - split-0.2.3.3 (lib) (requires download & build)
 - tasty-1.2.3 (lib) (requires build)
 - trie-0.7 (lib) (first run)
 - vector-algorithms-0.8.0.1 (lib) (requires download & build)
 - dimensional-1.1 (lib) (requires download & build)
 - tasty-quickcheck-0.10.1 (lib) (requires download & build)
 - tasty-hunit-0.10.0.2 (lib) (requires build)
 - mono-traversable-1.0.11.0 (lib) (requires download & build)
 - delay-0 (lib) (requires build)
 - trie-0.7 (test:trie-tests) (first run)
 - reflex-test-0 (lib) (cannot read state cache)
 - conduit-1.3.1.1 (lib) (requires download & build)
 - reflex-time-0 (lib) (cannot read state cache)
 - reflex-files-0 (test:test-reflex-files) (first run)
 - libyaml-0.1.1.0 (lib) (requires download & build)
 - reflex-time-0 (test:test) (first run)
 - AlON-0 (lib) (cannot read state cache)
 - yaml-0.11.0.0 (lib) (requires download & build)
 - AlON-0 (test:test) (cannot read state cache)
 - AlON-0 (exe:mini-site) (cannot read state cache)
 - mustache-2.3.0 (exe:haskell-mustache) (requires build)
[ 15:50 ] davean@indite AlON % cabal new-configure                                                                     [0, 0s]
'cabal.project.local' file already exists. Now overwriting it.
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] trying: AlON-0 (user goal)
[__1] trying: base-4.12.0.0/installed-4.1... (dependency of AlON)
[__2] trying: reflex-time-0 (user goal)
[__3] trying: delay-0 (dependency of reflex-time)
[__4] next goal: dimensional (dependency of delay)
[__4] rejecting: dimensional-1.3, dimensional-1.2 (conflict: requires
NoStarIsType)
[__4] rejecting: dimensional-1.1 (conflict: base==4.12.0.0/installed-4.1...,
dimensional => base>=4.7 && <4.12)
[__4] rejecting: dimensional-1.0.1.3, dimensional-1.0.1.2 (conflict:
base==4.12.0.0/installed-4.1..., dimensional => base>=4.7 && <4.11)
[__4] rejecting: dimensional-1.0.1.1 (conflict:
base==4.12.0.0/installed-4.1..., dimensional => base>=4.7 && <4.9)
[__4] rejecting: dimensional-1.0.1.0, dimensional-1.0.0.0,
dimensional-0.13.0.2, dimensional-0.13.0.1, dimensional-0.13,
dimensional-0.12.3, dimensional-0.12.2, dimensional-0.12.1.1,
dimensional-0.12.1, dimensional-0.12, dimensional-0.10.2,
dimensional-0.10.1.2, dimensional-0.10.1.1, dimensional-0.10.1,
dimensional-0.10, dimensional-0.9, dimensional-0.8.2.1, dimensional-0.8.0.1,
dimensional-0.8, dimensional-0.7.3, dimensional-0.7.2, dimensional-0.7.1,
dimensional-0.7 (conflict: delay => dimensional>=1.0.1.1)
[__4] fail (backjumping, conflict set: base, delay, dimensional)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: base, dimensional, delay, AlON,
reflex-time
Try running with --minimize-conflict-set to improve the error message.
hvr commented 5 years ago

For the record, the only way I can manage to reproduce this (i.e. the conflict: requires NoStarIsType failure), is by having a dist-newstyle created by a different (usually older) version of cabal before invoking cabal v2-configure with a newer version of cabal.

We should encode some kind of version into the binary dist-newstyle/ cache data to detect and invalidate incompatible cache data generated by a different version of cabal.

phadej commented 5 years ago

See also https://github.com/haskell/cabal/pull/6164 for a "point fix" in one place

DanielG commented 5 years ago

6164 is a different but related issue. I do have a fix for this issue in this commit though: https://github.com/haskell/cabal/pull/6196/commits/dfabd1f77a634c6f8c85f6172092d1123307166c

hvr commented 5 years ago

@DanielG so you're suggesting to start renaming the files on every schema change instead of including versioning inside the binary encoding?

DanielG commented 5 years ago

It's really just a stopgap measure which we can apply right now instead of waiting until we get around to versioning the cache. I'd also prefer to fix this properly but for now this works and doesn't really have any significant downsides.

DanielG commented 5 years ago

@23Skidoo not sure you were made aware of this issue before releasing 3.0.0.0 but as far as I can tell it's still affected.

I think we should fix this and the related #6164 in a point release. What do you think?

phadej commented 4 years ago

Fixed with https://github.com/haskell/cabal/pull/6255