From patchwork Tue Dec 1 18:18:43 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [5,of,9,STABLE] gpg: make sign acquire wlock before processing From: Katsunori FUJIWARA X-Patchwork-Id: 11720 Message-Id: To: mercurial-devel@selenic.com Date: Wed, 02 Dec 2015 03:18:43 +0900 # HG changeset patch # User FUJIWARA Katsunori # Date 1448993528 -32400 # Wed Dec 02 03:12:08 2015 +0900 # Branch stable # Node ID e6dc1867c9b7fb47de43087bdaacbcd148430033 # Parent c60cb46202d3d6ff082d21ef295edb975ebdfa33 gpg: make sign acquire wlock before processing Before this patch, "hg sign" of gpg extension executes/evaluates below without acquisition of wlock. - repo.dirstate.parents() - '.hgsigs' not in repo.dirstate It may cause unintentional result, if another command runs parallelly (see also issue4368). To avoid this issue, this patch makes "hg sign" of gpg extension acquire wlock before processing. diff --git a/hgext/gpg.py b/hgext/gpg.py --- a/hgext/gpg.py +++ b/hgext/gpg.py @@ -9,6 +9,7 @@ import os, tempfile, binascii from mercurial import util, commands, match, cmdutil, error from mercurial import node as hgnode from mercurial.i18n import _ +from mercurial import lock as lockmod cmdtable = {} command = cmdutil.command(cmdtable) @@ -222,7 +223,14 @@ def sign(ui, repo, *revs, **opts): See :hg:`help dates` for a list of formats valid for -d/--date. """ - + wlock = None + try: + wlock = repo.wlock() + return _dosign(ui, repo, *revs, **opts) + finally: + lockmod.release(wlock) + +def _dosign(ui, repo, *revs, **opts): mygpg = newgpg(ui, **opts) sigver = "0" sigmessage = ""