Honour both --only-dependencies and --reinstall for cabal install command. #870

Closed
bos opened this Issue May 24, 2012 · 1 comment

Projects

None yet

1 participant

@bos
bos commented May 24, 2012

(Imported from Trac #880, reported by lndbrg on 2011-08-31)

Cabal should be able to reinstall all dependencies of a package easily.

Steps to Reproduce:

  1. Break your cabal install somehow, keeping the database of the installed packages. For example remove the ~/.cabal folder.
  2. Try to install a program with a dependency that you installed before via cabal (and resided in ~/.cabal)
  3. Get error message about missing files/broken package.
  4. Try to reinstall the dependencies of the program you want to reinstall: cabal install foo --reinstall --only-dependencies

Expected results:
all dependencies of foo is reinstalled.

Actual result:
Resolving dependencies...
No packages to be installed. All the requested packages are already installed.
If you want to reinstall anyway then use the --reinstall flag.

@bos
bos commented May 24, 2012

(Imported comment by @dcoutts on 2011-08-31)

Unfortunately it doesn't really make sense to talk about reinstalling all dependencies of something. Afterall, that includes base etc which either you cannot reinstall or do not want to reinstall. So you don't really mean /all/ dependencies. You mean the broken packages.

Now cabal cannot tell when packages are broken due to missing files, only due to missing package dependencies. So the solution to your problem is to unregister the packages that have the missing files. Then cabal install -only-dependencies will do the right thing.

So for example if you removed your ~/.cabal dir, then you can unregister the same packages by removing the ~/.ghc directory.

Perhaps the proper solution here is for cabal to notice when packages are broken due to missing files. That will have to wait 'til cabal does better package management (tracking files for uninstall).

@bos bos closed this May 24, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment