Mercurial push locks

Matt Mackall mpm at selenic.com
Thu Sep 25 20:55:11 UTC 2014


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.

http://mercurial.selenic.com/wiki/Phases

-- 
Mathematics is the supreme nostalgia of our time.





More information about the Mercurial mailing list