Legend:

Many of the libraries in a GHC tree are actually maintained by someone else. They therefore have a separate upstream repository, from which we need to pull. That repository may be either a darcs or a git repository; in the darcs case, we also need to convert to a git repository for use in a GHC tree. This diagram shows how changes migrate from one repo to another:

156

157

[[Image(repos.png)]]

158

159

This means that when making changes needed in GHC to one of these libraries, we first need to put the changes in the upstream repository. For example, to make a change to Cabal:

160

161

* First push the change as a darcs patch to the upstream Cabal repository, http://code.haskell.org/Cabal/

162

* The patch will be mirrored and converted to git by the mirror script, in the repo http://darcs.haskell.org/git-mirrors/Cabal/.git/

163

* You then need to pull from http://darcs.haskell.org/git-mirrors/Cabal/.git/ into `libraries/Cabal` in a regular GHC tree, validate, and push to the GHC Cabal repo, http://darcs.haskell.org/packages/Cabal.git/