Description
Describe the bug
After v2-freeze
I see things like
any.hashable ==1.2.7.0 || ==1.3.0.
in cabal.project.freeze
.
To Reproduce
I'm able to reproduce this with a current master
of postgresql-simple
commit d0fcf2800b184f095c4aac56db4a8a3ed1a8a829
I think that any package with custom-setup packages in dependencies, and suitable situation (see below) can trigger this:
postgresql-simple master % ls
bench cabal.haskell-ci cabal.project CHANGES.md CONTRIBUTORS dist-newstyle LICENSE postgresql-simple.cabal README.md sdist.sh Setup.hs src test tools
postgresql-simple master % cat cabal.project
packages: .
tests: true
postgresql-simple master % ls
bench cabal.haskell-ci cabal.project CHANGES.md CONTRIBUTORS dist-newstyle LICENSE postgresql-simple.cabal README.md sdist.sh Setup.hs src test tools
postgresql-simple master % cat cabal.project
packages: .
tests: true
postgresql-simple master % cabal v2-freeze -w ghc-7.8.4
Wrote freeze file: /code/public-haskell/postgresql-simple/cabal.project.freeze
/postgresql-simple master % grep '||' cabal.project.freeze
any.hashable ==1.2.7.0 || ==1.3.0.0,
any.nats ==1.1.1 || ==1.1.2,
any.semigroups ==0.18.5 || ==0.19,
any.unordered-containers ==0.2.9.0 || ==0.2.10.0,
Expected behavior
I'd expect only thisVersion
, i.e. == x.y.z.w.
version ranges to exist in cabal.project.freeze
.
Technically, I'd expect that not being possible at all (i.e. freeze file representation would use Version
, not VersionRange
, and if independent goals require it, then use proper goal qualification, if any
would be ||
-ed range)
System informataion
- Operating system: Ubuntu 18.04
- GHC 7.8.4 (with GHC-7.10.3 and GHC-8.6.5 is wasn't able to reproduce the problem)
- cabal-install-3.0.0.0
ii cabal-install-3.0 3.0+git20190517.1.27ef964-6~18.04
Additional context
The problem is because independent goals are merged together, see Cabal
dependencies in custom-setup are merged with "main" stuff. Which makes freeze file more like "gelly".
postgresql-simple-0.6.2
├─ Only-0.1
│ └─ deepseq-1.3.0.2
│ └─ array-0.5.0.0
│ └─ base-4.7.0.2
│ └─ integer-gmp-0.5.1.0
│ └─ ghc-prim-0.3.1.0
│ └─ rts-1.0
├─ aeson-1.4.4.0
│ ├─ attoparsec-0.13.2.2
│ │ ├─ scientific-0.3.6.2
│ │ │ ├─ integer-logarithms-1.0.3
│ │ │ │ └─ nats-1.1.2
│ │ │ │ ├─ hashable-1.3.0.0
│ │ │ │ │ └─ text-1.2.3.1
│ │ │ │ │ └─ binary-0.7.1.0
│ │ │ │ │ ├─ bytestring-0.10.4.0
│ │ │ │ │ │ └─ deepseq-1.3.0.2 ┄┄
│ │ │ │ │ └─ containers-0.5.5.1
│ │ │ │ │ └─ deepseq-1.3.0.2 ┄┄
│ │ │ │ └─ template-haskell-2.9.0.0
│ │ │ │ ├─ containers-0.5.5.1 ┄┄
│ │ │ │ └─ pretty-1.1.1.1
│ │ │ │ └─ base-4.7.0.2 ┄┄
│ │ │ └─ primitive-0.7.0.0
│ │ │ ├─ fail-4.9.0.0
│ │ │ │ └─ base-4.7.0.2 ┄┄
│ │ │ └─ transformers-0.5.6.2
│ │ │ └─ base-4.7.0.2 ┄┄
│ │ └─ semigroups-0.19
│ │ ├─ nats-1.1.2 ┄┄
│ │ ├─ tagged-0.8.6
│ │ │ └─ transformers-compat-0.6.5
│ │ │ ├─ fail-4.9.0.0 ┄┄
│ │ │ ├─ generic-deriving-1.12.4
│ │ │ │ └─ th-abstraction-0.3.1.0
│ │ │ │ └─ template-haskell-2.9.0.0 ┄┄
│ │ │ └─ transformers-0.5.6.2 ┄┄
│ │ └─ unordered-containers-0.2.10.0
│ │ └─ hashable-1.3.0.0 ┄┄
│ ├─ base-compat-0.10.5
│ │ └─ unix-2.7.0.1
│ │ ├─ bytestring-0.10.4.0 ┄┄
│ │ └─ time-1.4.2
│ │ ├─ deepseq-1.3.0.2 ┄┄
│ │ └─ old-locale-1.0.0.6
│ │ └─ base-4.7.0.2 ┄┄
│ ├─ contravariant-1.5.2
│ │ ├─ StateVar-1.2
│ │ │ ├─ stm-2.5.0.0
│ │ │ │ └─ nats-1.1.2 ┄┄
│ │ │ └─ transformers-0.5.6.2 ┄┄
│ │ └─ void-0.7.3
│ │ └─ semigroups-0.19 ┄┄
│ ├─ dlist-0.8.0.6
│ │ └─ deepseq-1.3.0.2 ┄┄
│ ├─ time-compat-1.9.2.2
│ │ ├─ base-orphans-0.8.1
│ │ │ └─ base-4.7.0.2 ┄┄
│ │ ├─ semigroups-0.19 ┄┄
│ │ └─ time-1.4.2 ┄┄
│ ├─ uuid-types-1.0.3
│ │ ├─ hashable-1.3.0.0 ┄┄
│ │ └─ random-1.1
│ │ └─ time-1.4.2 ┄┄
│ └─ vector-0.12.0.3
│ ├─ primitive-0.7.0.0 ┄┄
│ └─ semigroups-0.19 ┄┄
├─ bytestring-builder-0.10.8.2.0
│ └─ bytestring-0.10.4.0 ┄┄
├─ case-insensitive-1.2.1.0
│ └─ semigroups-0.19 ┄┄
└─ [postgresql-libpq-0.9.4.2:all]
├─ postgresql-libpq-0.9.4.2
│ └─ [hsc2hs-0.68.3:exe:"hsc2hs"]
│ ├─ containers-0.5.5.1 ┄┄
│ └─ process-1.2.0.0
│ └─ directory-1.2.1.0
│ ├─ filepath-1.3.0.2
│ │ └─ base-4.7.0.2 ┄┄
│ └─ unix-2.7.0.1 ┄┄
└─ [setup]
└─ Cabal-2.4.0.1
├─ parsec-3.1.13.0
│ ├─ mtl-2.2.2
│ │ └─ transformers-0.5.6.2 ┄┄
│ └─ semigroups-0.18.5
│ ├─ nats-1.1.1
│ │ ├─ hashable-1.2.7.0
│ │ │ └─ text-1.2.3.1 ┄┄
│ │ └─ template-haskell-2.9.0.0 ┄┄
│ ├─ tagged-0.8.6 ┄┄
│ └─ unordered-containers-0.2.9.0
│ └─ hashable-1.2.7.0 ┄┄
└─ process-1.2.0.0 ┄┄