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.
This commit is contained in:
FUJIWARA Katsunori 2015-12-02 03:12:08 +09:00
parent f8fa1a1ece
commit f05ee67a9f

View File

@ -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 = ""