[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

On the use of all-packages.cabal



Dear DHG,

I’d like to explain a bit better how I imagine that we should use the
all-packages.cabal file in http://anonscm.debian.org/darcs/pkg-haskell/tools/

The following invariants should always hold:
     1. Runnig "cabal install --dry-run ..../all-packages/" should aways
        work.
     2. Every package in Debian should have an entry in
        all-packages.cabal. If the entry is commented out, there should
        be an explanation.
     3. The version in all-packages.cabal is always larger or equal to
        the  version in the archive and the repository.

In particular it is ok to have there a newer version than what is in
Debian. This indicates that we plan to upgrade to that version, and this
certifies that the version that we aim for works well.

What does that mean, and why does it provide? Assume you want to upgrade
a library, say, conduit. You can plan the upgrade with these steps.

     1. Pull the latest all-packages.cabal
     2. Run "cabal install --dry-run" to see if your fellow developers
        left the
     3. Change the entry for conduit to the new version, say 1.0.0
     4. Run "cabal install --dry-run" and see what breaks.
     5. For every package that breaks, see if upgrading it helps, and
        enter the new version number. Iterate.
     6. If you find a working combination: Great! Commit, push, and
        start uploading.
     7. If you do not find a working combination: Do not commit or
        upload yet. Instead, notify the package owners that they should
        upgrade their package to use the latest conduit. Or, if the
        broken package is of low priority and upstream is slow or
        non-existent, comment it out with an explanation.

I did these steps for conduit where I had to fix ~35 packages. A tip for
faster iteration: If you expect multiple packages to need an upgrade,
change their (or all packages’) specification from "yesod (== 1.2.3)" to
"yesod (>= 1.2.3)", let cabal-install run, and then copy the version
numbers from cabal’s output.

In this case, I could not find a working set for all packages:
csv-conduit, hOpenPGP, wai-app-file-cgi and mighttpd2 do not have
versions compatible with conduit-1.0.0. This is bad, as now our archive
is partially uninstallable and what’s preventing us from fixing it is
_not_ purely our issue.

I see that Clint already has filed issues at
https://github.com/ozataman/csv-conduit/issues/8
Great! I guess since you are also the upstream author of hOpenPGP, we’ll
see an upload there just in time.I filed an issue at
https://github.com/kazu-yamamoto/wai-app-file-cgi/issues/3

I also found out that the pandoc update caused breakage for
yesod-markdown. Again, checking all-packages.cabal first would have told
us that before.

I guess some of this could be automated, e.g. given an inconsistent set
of versions, some tool could tell us 
 * what packages need to be upgraded and
 * what packages need upstream work.
Contributions are welcome. There might also be overlap with tools that
stackage needs.

We also need a tools that compares the versions in all-packages.cabal
(i.e. our TODO list) with the versions in the darcs repos, so make that
TODO list more readable.

BTW, how about following the versions in the yesod platform?
http://hackage.haskell.org/package/yesod-platform

Greetings,
Joachim

-- 
Joachim "nomeata" Breitner
Debian Developer
  nomeata@debian.org | ICQ# 74513189 | GPG-Keyid: 4743206C
  JID: nomeata@joachim-breitner.de | http://people.debian.org/~nomeata

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: