packages feed

stackage-update-0.1.0.4: README.md

## stackage-update

[![Build Status](https://travis-ci.org/fpco/stackage-update.svg?branch=master)](https://travis-ci.org/fpco/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.