stackage-update
This package provides an executable, stackage-update
, which provides the same
functionality as cabal update
(it updates your local package index). However,
instead of downloading the entire package index as a compressed tarball over
insecure HTTP, it uses git
to incrementally update your package list, and
downloads over secure HTTPS.
It has minimal Haskell library dependencies (all dependencies are shipped with
GHC itself) and only requires that the git
executable be available on the
PATH. It builds on top of the
all-cabal-files
repository.
Advantages
Versus standard cabal update
, using stackage-update
gives the following advantages:
- Only downloads the deltas from the last time you updated your index, threby requiring significantly less bandwidth
- Downloads over a secure HTTPS connection instead of an insecure HTTP connection
- Note that the
all-cabal-files
repo is also updated from Hackage over a secure HTTPS connection
Usage
Install from Hackage as usual with:
cabal update
cabal install stackage-update
From then on, simply run stackage-update
instead of cabal update
.
Limitations
This currently has no respect for customized remote-repos in your
~/.cabal/config file. It assumes you have a remote-repo named
hackage.haskell.org
which should be populated from the all-cabal-files repo.
If you have some kind of custom setup, this tool won't work for you. The vast
majority of users tend to not modify their remote-repos, so stackage-update
should work for most people most of the time.
Why stackage?
You may be wondering why this tool is called stackage-update
, when in fact
the functionality is useful outside of the Stackage
project itself. The reason is that the naming
allows it to play nicely with the other Stackage command line tooling.
Concretely, that means that if you have stackage-cli installed, stackage-update
works as a plugin. However, you can certainly use stackage-update
on its own
without any other tooling or dependencies on the Stackage project.
Future enhancements
- If desired, add support for GPG signature checking when cloning/pulling from the
all-cabal-files
repository.
- Detect modified remote-repos and warn the user
Some notes
Data is stored as a git-repository at app-directory retrieved by getAppUserDataDirectory, so for Unix it is $HOME/.stackage-update/all-cabal-files
. This is convenient because you can cd
there and use regular git tools to see what's new.