David Marker <David.Marker at Sun.COM> writes:

> 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?

You're missing the other way push works, via push_unbundle (they
changed the protocol so the client can't lock the server, the server
locks itself).

However, if you look at sshserver.py's do_unbundle() you'll see the
same locking.

-- Rich

Reply via email to