Changes between Version 73 and Version 74 of Repositories

Sep 9, 2014 1:22:53 PM (5 years ago)



  • Repositories

    v73 v74  
    33= GHC Repositories =
    5 This page lists the active repositories relating to GHC. For instructions on actually getting a GHC source tree, see [wiki:Building/GettingTheSources Getting The Sources].
     5This page lists the active repositories relating to GHC. For instructions on actually getting a GHC source tree, see [wiki:Building/GettingTheSources Getting The Sources]. For information on using these repositories (via submodules), see [wiki:WorkingConventions/Git/Submodules the Submodules page].
     6Below is a table summarizing the repositories GHC uses. It lists the upstream location of the repository, and the branch name. All the upstream repositories are either located on `` or `` as of right now.
    7 For read-only browsing, you can use the:
    8  * [source: Trac source browser]
    9  * [ Gitweb browser @]
    10  * [ GitHub GHC mirror]
     8 - Patches for `` repositories should go to GHC developers. Developers can push to these repositories directly.
    12 For info on the active branches of the main GHC repo, see
    13  * [wiki:ActiveBranches]
     10 - Patches for `` repositories should be made into Pull Requests on GitHub. GHC developers have access to the repositories under the `haskell` organization in particular, and can push directly.
    15 GHC's repos use git; see [wiki:WorkingConventions/Git Git Working Conventions].
     12 - As of 14th August 2014, `ghc-head` is the branch to track for Haddock.
    17 '''Be sure to read more on the working conventions for submodules, which are thoroughly documented [WorkingConventions/Git/Submodules here]'''
     14As stated above - GHC tracks the branch listed here for the specific repository. If you're going to base your change on a branch, always do it on this one, and make sure your change is on the specified branch. Then update the submodule.
    19 == GHC Repositories ==
     16== Repository listing ==
    2118The GHC source code tracks many related sub-repositories, which are needed for external dependencies during the build, or tools that are included in the build. Not every sub-repository is maintained by us; in fact, the large majority are ''not'' maintained by GHC HQ.
    23 As a result of this, in HEAD, essentially every single upstream repository we track is tracked with a '''git submodule'''. These submodules are mirrored for us, and we send patches we need to the upstream maintainer.
    25 But what happens if ''you'' need to get a submodule updated? It's quite simple...
    27 === Sending patches upstream, the short version ===
    29  * Send a patch upstream. Get it merged.
    31  * Once that is done, just update the submodule:
    33  {{{
    34 cd libraries/foo
    35 git reset --hard some_commit_id
    36 cd ../..
    37 git commit -asm "Update foo submodule"
    38 ./sync-all push
    39 }}}
    40  where `some_commit_id` should be the commit ID of the change you pushed. For example, if you pushed three changes (where 'Commit #3' is the latest HEAD):
    42  {{{
    43 026d0f64723729823ef29991218c7a15d8d37264 - Commit #1
    44 235da0f3e38c2b4c489a82778a5fd84a895cb693 - Commit #2
    45 0667f01823552caf97c4d6e8b876b1d9db00a172 - Commit #3
    46 }}}
    47  then `some_commit_id = 0667f01823552caf97c4d6e8b876b1d9db00a172`
    49  * Done!
    51 === Submodule reference validation ===
    53 There is a problem with submodules, in that it would be possible to commit a submodule change to `ghc.git`, which points to an invalid commit. For example, perhaps you make a change to `haddock` and `ghc`. You might accidentally push to `ghc` before pushing to Haddock, or worse, you might forget.
    55 For this reason, the GHC repository has commit hooks that validate submodule references. Any time you update a submodule, you must:
    57  * Have already pushed the new changes upstream, in a way `git` can find them.
    59  * You **must** include the word '**submodule**' in your commit message.
    61 If either of these assumptions are violated, your push will fail.
    63 == Full repository breakdown ==
    65 A GHC source tree is made of a collection of repositories. Here is a list of the repositories that GHC uses.  The columns have the following meaning
    67  * '''Location in tree''': where in the source tree this repository sits.
    69  * '''Upstream repo?''': if "yes", this library is maintained by someone else,
    70    and its master repo is somewhere else.  See [wiki:Repositories/Upstream].
    72  * '''Reqd to build?''': is "no" if this library is not required to build GHC. We have a few of these because we use them for tests and suchlike.
    74  * '''Installed?''': is "no" if the library is not installed in a GHC installation, and "extra" if it is only installed if `InstallExtraPackages` is `YES`. All others are installed with GHC. See the [wiki:Commentary/Libraries libraries page] for more info.
    76  * '''GHC repo''': in every case there is a repo on ``, which contains the bits we use for building GHC every night. For libraries with upstream repos, this is just a lagging mirror of the master (see [wiki:Repositories/Upstream]).  The read-only HTTP URL for the repo is `<table-entry>`.  To get a read/write URL, replace HTTP prefix `` with the SSH prefix `ssh://`.
    78 This table might be out-of-date: for guaranteed up-to-date info, check the [[GhcFile(packages)]] files.
     20As a result of this, in HEAD, essentially every single upstream repository we track is tracked with a '''git submodule'''. These submodules are mirrored for us, and we send patches we need to the upstream maintainer. Here are the submodules we use, and where their upstreams point:
    8224<table border="1">
    83 <tr><td><strong>Location in tree</strong></td>   <td> <strong>Upstream repo?</strong></td> <td><strong>Reqd to build?</strong></td>   <td><strong>Installed?</strong></td> <td><strong>GHC repo</strong></td></tr>
    84 <tr><td>. (ghc itself)</td>                    <td>     </td> <td>     </td> <td>     </td> <td>ghc.git</td></tr>
    85 <tr><td>ghc-tarballs</td>                      <td>     </td> <td>     </td> <td> N/A </td> <td>ghc-tarballs.git</td></tr>
    86 <tr><td>utils/hsc2hs</td>                      <td>     </td> <td>     </td> <td>     </td> <td>hsc2hs.git</td></tr>
    87 <tr><td>utils/haddock</td>                     <td> yes </td> <td>     </td> <td>     </td> <td>haddock.git</td></tr>
    88 <tr><td>nofib</td>                             <td>     </td> <td>     </td> <td> N/A </td> <td>nofib.git</td></tr>
    89 <tr><td>libraries/array</td>                   <td>     </td> <td>     </td> <td>     </td> <td>packages/array.git</td></tr>
    90 <tr><td>libraries/binary</td>                  <td> yes </td> <td>     </td> <td>     </td> <td>packages/binary.git</td></tr>
    91 <tr><td>libraries/bytestring</td>              <td> yes </td> <td>     </td> <td>     </td> <td>packages/bytestring.git</td></tr>
    92 <tr><td>libraries/Cabal</td>                   <td> yes </td> <td>     </td> <td>     </td> <td>packages/Cabal.git</td></tr>
    93 <tr><td>libraries/containers</td>              <td> yes </td> <td>     </td> <td>     </td> <td>packages/containers.git</td></tr>
    94 <tr><td>libraries/deepseq</td>                 <td>     </td> <td>     </td> <td>     </td> <td>packages/deepseq.git</td></tr>
    95 <tr><td>libraries/directory</td>               <td>     </td> <td>     </td> <td>     </td> <td>packages/directory.git</td></tr>
    96 <tr><td>libraries/filepath</td>                <td>     </td> <td>     </td> <td>     </td> <td>packages/filepath.git</td></tr>
    97 <tr><td>libraries/haskeline</td>               <td> yes </td> <td>     </td> <td> no  </td> <td>packages/haskeline.git</td></tr>
    98 <tr><td>libraries/haskell98</td>               <td>     </td> <td>     </td> <td>     </td> <td>packages/haskell98.git</td></tr>
    99 <tr><td>libraries/haskell2010</td>             <td>     </td> <td>     </td> <td>     </td> <td>packages/haskell2010.git</td></tr>
    100 <tr><td>libraries/hoopl</td>                   <td>     </td> <td>     </td> <td>     </td> <td>packages/hoopl.git</td></tr>
    101 <tr><td>libraries/hpc</td>                     <td>     </td> <td>     </td> <td>     </td> <td>packages/hpc.git</td></tr>
    102 <tr><td>libraries/old-locale</td>              <td>     </td> <td>     </td> <td>     </td> <td>packages/old-locale.git</td></tr>
    103 <tr><td>libraries/old-time</td>                <td>     </td> <td>     </td> <td>     </td> <td>packages/old-time.git</td></tr>
    104 <tr><td>libraries/pretty</td>                  <td> yes </td> <td>     </td> <td>     </td> <td>packages/pretty.git</td></tr>
    105 <tr><td>libraries/process</td>                 <td>     </td> <td>     </td> <td>     </td> <td>packages/process.git</td></tr>
    106 <tr><td>libraries/terminfo</td>                <td> yes </td> <td>     </td> <td> no  </td> <td>packages/terminfo.git</td></tr>
    107 <tr><td>libraries/time</td>                    <td> yes </td> <td>     </td> <td>     </td> <td>packages/time.git</td></tr>
    108 <tr><td>libraries/transformers</td>            <td> yes </td> <td>     </td> <td>     </td> <td>packages/transformers.git</td></tr>
    109 <tr><td>libraries/unix</td>                    <td> yes </td> <td>     </td> <td>     </td> <td>packages/unix.git</td></tr>
    110 <tr><td>libraries/utf8-string</td>             <td> yes </td> <td>     </td> <td>     </td> <td>packages/utf8-string.git</td></tr>
    111 <tr><td>libraries/Win32</td>                   <td> yes </td> <td>     </td> <td>     </td> <td>packages/Win32.git</td></tr>
    112 <tr><td>libraries/xhtml</td>                   <td> yes </td> <td>     </td> <td> no  </td> <td>packages/xhtml.git</td></tr>
    113 <tr><td>libraries/random</td>                  <td> yes </td> <td> no  </td> <td> no  </td> <td>packages/random.git</td></tr>
    114 <tr><td>libraries/primitive</td>               <td> yes </td> <td> no  </td> <td> no  </td> <td>packages/primitive.git</td></tr>
    115 <tr><td>libraries/vector</td>                  <td> yes </td> <td> no  </td> <td> no  </td> <td>packages/vector.git</td></tr>
    116 <tr><td>libraries/dph</td>                     <td>     </td> <td> no  </td> <td> no  </td> <td>packages/dph.git</td></tr>
    117 <tr><td>libraries/parallel</td>                <td>     </td> <td> no  </td> <td> no  </td> <td>packages/parallel.git</td></tr>
    118 <tr><td>libraries/stm</td>                     <td>    </td> <td> no  </td> <td> no  </td> <td>packages/stm.git</td></tr>
     25<tr><td><strong>Location in tree</strong></td> <td><strong>Upstream repo</strong></td> <td><strong>Upstream GHC branch</strong></td></tr>
     26<tr><td>utils/hsc2hs</td>           <td></td> <td>master</td></tr>
     27<tr><td>utils/haddock</td>          <td></td> <td>ghc-head</td></tr>
     28<tr><td>nofib</td>                  <td></td> <td>master</td></tr>
     29<tr><td>libraries/array</td>        <td></td> <td>master</td></tr>
     30<tr><td>libraries/binary</td>       <td></td> <td>master</td></tr>
     31<tr><td>libraries/bytestring</td>   <td></td> <td>master</td></tr>
     32<tr><td>libraries/Cabal</td>        <td></td> <td>master</td></tr>
     33<tr><td>libraries/containers</td>   <td></td> <td>master</td></tr>
     34<tr><td>libraries/deepseq</td>      <td></td> <td>master</td></tr>
     35<tr><td>libraries/directory</td>    <td></td> <td>master</td></tr>
     36<tr><td>libraries/filepath</td>     <td></td> <td>master</td></tr>
     37<tr><td>libraries/haskeline</td>    <td></td> <td>master</td></tr>
     38<tr><td>libraries/haskell98</td>    <td></td> <td>master</td></tr>
     39<tr><td>libraries/haskell2010</td>  <td></td> <td>master</td></tr>
     40<tr><td>libraries/hoopl</td>        <td></td> <td>master</td></tr>
     41<tr><td>libraries/hpc</td>          <td></td> <td>master</td></tr>
     42<tr><td>libraries/old-locale</td>   <td></td> <td>master</td></tr>
     43<tr><td>libraries/old-time</td>     <td></td> <td>master</td></tr>
     44<tr><td>libraries/process</td>      <td></td> <td>master</td></tr>
     45<tr><td>libraries/terminfo</td>     <td></td> <td>master</td></tr>
     46<tr><td>libraries/time</td>         <td></td> <td>master</td></tr>
     47<tr><td>libraries/unix</td>         <td></td> <td>master</td></tr>
     48<tr><td>libraries/Win32</td>        <td></td> <td>master</td></tr>
     49<tr><td>libraries/xhtml</td>        <td></td> <td>master</td></tr>
     50<tr><td>libraries/random</td>       <td></td> <td>master</td></tr>
     51<tr><td>libraries/primitive</td>    <td></td> <td>master</td></tr>
     52<tr><td>libraries/vector</td>       <td></td> <td>master</td></tr>
     53<tr><td>libraries/dph</td>          <td></td> <td>master</td></tr>
     54<tr><td>libraries/parallel</td>     <td></td> <td>master</td></tr>
     55<tr><td>libraries/stm</td>          <td></td> <td>master</td></tr>
    122 == Mirroring new packages to !GitHub ==
    124 Currently, all our repositories are being mirrored to !GitHub by !GitHub themselves. If you wish to add/remove a repository you need to email !GitHub support at and ask them to do it. Currently there is no way to administer this ourselves.