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