Skip to content
Snippets Groups Projects
  • Matthew Pickering's avatar
    d626ef87
    cabal-install: Clarify the semantics of package-db flag · d626ef87
    Matthew Pickering authored
    In this PR we make the `--package-db` flag apply only to the default
    immutable initial package stack rather than also applying to the store
    package database.
    
    There are two special package databases which cabal install knows about
    and treats specially.
    
    * The store directory, a global cache of installed packages where cabal
      builds and installs packages into.
    * The inplace directory, a local build folder for packages, where cabal
      builds local packages in.
    
    It is very important that cabal registers packages it builds into one of
    these two locations as there are many assumptions that packages will end
    up here.
    
    With the current design of the `--package-db` flag, you are apparently
    allowed to override the store location which should have the effect of
    making the last package database in the package stack the "store"
    directory. Perhaps this works out in theory but practically this
    behaviour was broken and things were always registered into the store
    directory that cabal knew about. (The assertion in
    `ProjectBuilding.UnpackedPackage` was failing (see added test)).
    
    With `--package-db` not being able to modify the location of the store
    directory then the interaction of `--package-db`, `--store-dir` and
    `--dist-dir` flags become easy to understand.
    
    * `--package-db` modify the initial package database stack, these
      package database will not be mutated by cabal and provide the initial
      package environment which is used by cabal.
    * `--store-dir` modify the location of the store directory
    * `--dist-dir` modify the location of the dist directory (and hence
      inplace package database)
    
    Treating the flags in this way also fix an assertion failure when
    building packages.
    
    Fixes #9678
    d626ef87
    History
    cabal-install: Clarify the semantics of package-db flag
    Matthew Pickering authored
    In this PR we make the `--package-db` flag apply only to the default
    immutable initial package stack rather than also applying to the store
    package database.
    
    There are two special package databases which cabal install knows about
    and treats specially.
    
    * The store directory, a global cache of installed packages where cabal
      builds and installs packages into.
    * The inplace directory, a local build folder for packages, where cabal
      builds local packages in.
    
    It is very important that cabal registers packages it builds into one of
    these two locations as there are many assumptions that packages will end
    up here.
    
    With the current design of the `--package-db` flag, you are apparently
    allowed to override the store location which should have the effect of
    making the last package database in the package stack the "store"
    directory. Perhaps this works out in theory but practically this
    behaviour was broken and things were always registered into the store
    directory that cabal knew about. (The assertion in
    `ProjectBuilding.UnpackedPackage` was failing (see added test)).
    
    With `--package-db` not being able to modify the location of the store
    directory then the interaction of `--package-db`, `--store-dir` and
    `--dist-dir` flags become easy to understand.
    
    * `--package-db` modify the initial package database stack, these
      package database will not be mutated by cabal and provide the initial
      package environment which is used by cabal.
    * `--store-dir` modify the location of the store directory
    * `--dist-dir` modify the location of the dist directory (and hence
      inplace package database)
    
    Treating the flags in this way also fix an assertion failure when
    building packages.
    
    Fixes #9678
Code owners
Assign users and groups as approvers for specific file changes. Learn more.