Suggestion re altering the build system
Simon Marlow
simonmarhaskell at gmail.com
Fri Jun 1 11:32:58 EDT 2007
Manuel M T Chakravarty wrote:
> Simon Marlow wrote,
>> Simon Peyton-Jones wrote:
>>> | I understand that incremental builds are more tricky, but during
>>> | teaching session I often have only 2 hours to hack on a day.
>>>
>>> I'm still hopeful that a "last-good-build" date or
>>> signature-of-some-kind should do the job. Ideally it goes like this
>>>
>>> * Look at GHC dev wiki, get last-good-build signature
>>> * darcs pull -a -upto sig
>>> * make
>>>
>>> I'm thinking that "sig" could be a date-and-time, which you
>>> copy/paste from the wiki into the darcs command.
>>>
>>> Or am I being naive?
>>
>> date/time doesn't work well with darcs. Consider the case where we
>> have a successful build on date T, and then someone sent us a patch P
>> that they recorded before T. We push the patch, and now "all the
>> patches up to date T" includes P, but it didn't when we did the
>> build. This is why we need full tags or contexts to identify the
>> contents of the tree.
>
> Yes, it has to be tags. And it need to be tags that are in the ghc repo
> *and* all core packages. (As those not being in sync is a common problem.)
Not to let this dangle unsolved, let's review the options, with a few further
thoughts:
1. We tag all the repos after a successful bootstrap on each platform.
Main problem with this: profusion of tags, obscuring 'darcs changes'
and 'darcs query tags'. Space itself isn't really an issue; a tag
only adds a few hundred bytes.
We could mitigate the effect by rate-limiting the tags, say only tag if
there hasn't been a tag in the last week. Then we'd get one
guaranteed-buildable state per week or so, which seems reasonable.
2. We keep a separate set of repos that are only updated after a successful
build. Perhaps one set of repos per platform.
Main problem with this: ensuring atomicity during the update (probably
not likely to be a significant problem in practice).
Second problem: this doesn't store the repo state of every successful
build, only the most recent one.
Personally I lean towards (2), as it's much easier to implement. Any further
comments?
Cheers,
Simon
More information about the Cvs-ghc
mailing list