# HG changeset patch # User FUJIWARA Katsunori # Date 2015-12-01 18:12:08 # Node ID 7b4a61570d610dbf062638c6d69df2404acadcbd # Parent 84de71ec5c61dc50edba6e4d96c99670a3670634 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 = ""