Mercurial push locks

durwin at mgtsciences.com durwin at mgtsciences.com
Fri Sep 26 14:23:55 UTC 2014


Matt Mackall <mpm at selenic.com> wrote on 09/25/2014 02:55:11 PM:

> From: Matt Mackall <mpm at selenic.com>
> To: durwin at mgtsciences.com
> Cc: Simon King <simon at simonking.org.uk>, Mercurial mailing list 
> <mercurial at selenic.com>
> Date: 09/25/2014 02:55 PM
> Subject: Re: Mercurial push locks
> 
> On Wed, 2014-09-24 at 13:06 -0600, durwin at mgtsciences.com wrote:
> > Simon King <simon at simonking.org.uk> wrote on 09/24/2014 12:46:36 PM:
> > 
> > > From: Simon King <simon at simonking.org.uk>
> > > To: durwin at mgtsciences.com
> > > Cc: Mercurial mailing list <mercurial at selenic.com>
> > > Date: 09/24/2014 12:46 PM
> > > Subject: Re: Mercurial push locks
> > > 
> > > On 24 Sep 2014, at 16:16, durwin at mgtsciences.com wrote:
> > > 
> > > > I have users when push'ing get locked.  If they interrupt the 
> > > push, it appears to complete.  Also, if I delete the lock file in 
> > > .hg/store/ it also will complete.  I see no evidence of lost code, 
> > > it *does* seem to complete.  This occurs when run from command line 
> > > and from Netbeans.  I have tried to duplicate the issue, but all 
> > > works for me normally.  I had one user do a clean clone, but the 
> > > problem still occurs.  I tried duplicating problem as one of the 
> > > users, but again it all works for me.  I am at a loss.  I included 
> > > one of the users console output.  Notice where user interrupted 
process. 
> > 
> > > > 
> > > > project:UsersExample username$ hg commit -m "Added a slider to 
> > > filter detail. 
> > > > Also fixed Joe layout" 
> > > > abort: no username supplied (see "hg help config") 
> > > > project:UsersExample username$ hg commit -m "Added a slider to 
> > > filter detail. 
> > > > Also fixed Joe layout" -u username 
> > > > project:UsersExample username$ hg push 
> > > > pushing to ssh://server//home/svnuser/project-hg/WebApplication 
> > > > searching for changes 
> > > > remote: listing keys for "bookmarks" 
> > > > ^Cinterrupted! 
> > > > remote: adding changesets 
> > > > remote: changesets: 1 chunks 
> > > > remote: add changeset 4fde4613957f 
> > > > remote: adding manifests 
> > > > remote: manifests: 1/1 chunks (100.00%) 
> > > > remote: adding file changes 
> > > > remote: adding UsersExample/web/secure/css/main.css revisions 
> > > > remote: files: 1/8 chunks (12.50%) 
> > > > remote: adding UsersExample/web/secure/css/userInfo.css revisions 
> > > > remote: files: 2/8 chunks (25.00%) 
> > > > remote: adding UsersExample/web/secure/index.jsp revisions 
> > > > remote: files: 3/8 chunks (37.50%) 
> > > > remote: adding UsersExample/web/secure/main.js revisions 
> > > > remote: files: 4/8 chunks (50.00%) 
> > > > remote: adding UsersExample/web/secure/microtasks/DetailsTask.js 
> > revisions 
> > > > remote: files: 5/8 chunks (62.50%) 
> > > > remote: adding 
> > UsersExample/web/secure/summer_api/renderable_alpha/Edge.js 
> > > > revisions 
> > > > remote: files: 6/8 chunks (75.00%) 
> > > > remote: adding UsersExample/web/secure/view/Node.js revisions 
> > > > remote: files: 7/8 chunks (87.50%) 
> > > > remote: adding UsersExample/web/secure/view/ValidationEdge.js 
> > revisions 
> > > > remote: files: 8/8 chunks (100.00%) 
> > > > remote: added 1 changesets with 8 changes to 8 files 
> > > > remote: updating the branch cache 
> > > > remote: calling hook changegroup.push: hgext.push-ep.push 
> > > > remote: Killed by signal 2. 
> > > > 
> > > 
> > > What does the remote changegroup.push hook do? Does it complete?
> > 
> > It calls a python hook.
> > 
> > [hooks]
> > changegroup.push = python:hgext.push-ep.push
> > 
> > This is the code.
> > 
> > import logging
> > import os
> > import pwd
> > import syslog
> > 
> > def push(ui, repo, node, hooktype, **kwargs):
> >     call(["sudo", "-u", "svnuser", "/usr/bin/hg-svnuser", "push", 
"-f", 
> > "--debug", "-R", "/home/svnuser/project-hg/WebApplication/"])
> >     syslog.syslog("Mercurial push by " + pwd.getpwuid(os.getuid())[0])
> >     syslog.syslog(hooktype)
> >     return False
> > 
> > The syslog messages are in the log, and when I do hg 
incoming/outgoing, it 
> > indicates both repositories are in sync.
> > 
> > One user pushes to repository B, it pushes to A.  Other users push to 
A 
> > and it pushes to B.
> > 
> > This use to work without the locking.  And as I mentioned, it works 
for me 
> > (no locking).
> 
> With the introduction of phases (Mercurial 2.1, Feb 2012), pushes may
> now acquire a lock on the sending side (so that it can update the phase
> of local commits). Thus, you may get a deadlock if you push inside a
> hook where a lock is already held.

This appears to what is occurring.  Is there a way around this?  I need to 
perform a push
to the other repository after each push to either.  Should I change this 
to a script and
run it in an 'at' job delayed a minute?

> 
> http://mercurial.selenic.com/wiki/Phases
> 
> -- 
> Mathematics is the supreme nostalgia of our time.
> 
> 



This email message and any attachments are for the sole use of the 
intended recipient(s) and may contain proprietary and/or confidential 
information which may be privileged or otherwise protected from 
disclosure. Any unauthorized review, use, disclosure or distribution is 
prohibited. If you are not the intended recipient(s), please contact the 
sender by reply email and destroy the original message and any copies of 
the message as well as any attachments to the original message.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial/attachments/20140926/029495fc/attachment-0002.html>


More information about the Mercurial mailing list