<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2017-12-18 17:01 GMT+01:00 Simon Peyton Jones via ghc-devs <span dir="ltr"><<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">|  It's for technical reasons, and the strongest one being: GitHub doesn't<br>
|  allow us to establish strong invariants regarding submodule gitlink<br>
|  referential integrity for submodules (which I implemented a couple years ago<br>
|  for <a href="http://git.haskell.org" rel="noreferrer" target="_blank">git.haskell.org</a>).<br>
<br>
Interesting.  It'd be good to document what the technical reasons are.  For example I don’t know what the strong invariants are. [...]<br></blockquote><div><br></div><div>Me neither. :-] Looking at the repositories Wiki page, it seems to be related to the fact that GitHub doesn't offer git hooks, which are used to check the invariants. This leads to another question: Is it *really* necessary to have the invariant checks implemented as a git hook? If you use any kind of continuous integration, which GHC obviously does, one can move the checks to e.g. CircleCI (or whatever CI is used). This is a tradeoff: Doing it that way, you catch incorrect commits a little bit later, but it makes the overall arcane repository magic quite a bit simpler, probably removing the need for mirroring. This seems to be a good tradeoff, but of course I might be missing some details here.</div></div></div></div>