David Marker wrote:
> Dean Roehrich wrote:
>
>> On Thu, Aug 07, 2008 at 06:54:11PM -0700, David.Marker at sun.com wrote:
>>
>>
>>> Author: David Marker <David.Marker at sun.com>
>>> Repository: /hg/scm-migration/onnv-gk-tools
>>> Latest revision: 13c87b174da31bebe6de23f5ad9a4ecbdfbcb4ef
>>> Total changesets: 1
>>> Log message:
>>> HOME environment var almost always needs to be set for hg and trust.
>>> Fix other boneheaded mistakes I made (sadly only discovered while running
>>> on gate).
>>> Finally update config so it exists outside just gate repos.
>>>
>>> Files:
>>> update: clone-closed-hgrc
>>> update: clone-hgrc
>>> update: etc/config.py
>>> update: gate-closed-hgrc
>>> update: gate-hgrc
>>> update: hook/notify.py
>>> update: lib/mail.py
>>> update: lib/utility.py
>>> update: on-hg.py
>>> update: periodic/incremental.py
>>> update: periodic/nightly-build.py
>>>
>>>
>> David,
>>
>> While the changegroup.x hooks are running in gate-hgrc I don't see how you're
>> preventing a new changegroup from arriving. I guess I expected changegroup.0
>> would use hg push --rev for this situation.
>>
>> Maybe the hg update should use --clean and --rev in gate-hgrc, or maybe it
>> shouldn't be there at all. That update could run while a new changegroup is
>> in the pretxnchangegroup hooks. And why do you need update on both the push
>> and the pull gates (I guess you call them 'gate' and 'clone')? I think hg
>> update in 'gate' is a good way to create a bit of confusion.
>>
>> Dean
>>
>>
>
> I think you will find that the push lock is held until even changegroup
> hooks are run.
>
> def push_addchangegroup(self, remote, force, revs):
> lock = remote.lock()
> try:
> ret = self.prepush(remote, force, revs)
> if ret[0] is not None:
> cg, remote_heads = ret
> return remote.addchangegroup(cg, 'push', self.url())
> return ret[1]
> finally:
> del lock
>
>
> Notice it is inside addchangegroup() that both pretxnchangegroup and
> changegroup hooks are run.
>
> Am I missing something?
>
> Anyway people still use cscopt from NFS for "gate" repo. So I do need to
> have it updated.
>
> If I am wrong about lock being held for the duration of the "push" (even
> the changegroup hooks) then I agree I have a problem and should use "--rev".
>
> -dvd
>
>
My reasoning may have been flawed, but Rich also didn't think it was
possible.
Finally I created a parent repo with these hooks to see what happened:
changegroup.0 = touch /tmp/changy.${HG_NODE}
changegroup.1 = sleep 60
The reason I touch a file is cause you don't get any output from ssh
till its all over.
So one child repo is going to have to "push -f" to overcome the creation
of a new head.
Anyway the result I saw was that the second push had to wait.
I repeatedly did `hg log -l1` while both waited for sleep.
So the first push gets in right away.
Then waits 60 seconds.
During that time you can see it with `hg log -l1`
The second one does *not* show up.
Which means a push to the clone won't pick it up.
Nor should `hg update`.
So I'm pretty confident the hooks don't need --rev.
At least not with our current version of Mercurial :)
-dvd