## 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](https://github.com/commercialhaskell/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](https://www.stackage.org/) 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](http://hackage.haskell.org/package/directory/docs/System-Directory.html#v: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.