[PATCH 07 of 10] chgserver: implement validate command
yuya at tcha.org
Thu Mar 3 11:06:22 EST 2016
On Wed, 2 Mar 2016 10:44:09 +0000, Jun Wu wrote:
> # HG changeset patch
> # User Jun Wu <quark at fb.com>
> # Date 1456914735 0
> # Wed Mar 02 10:32:15 2016 +0000
> # Node ID 7a0eaf66c464e1fcab9b8470811de0d88ef754ff
> # Parent 9821d8ed7874129231a85e86131d37d02f01f129
> chgserver: implement validate command
> validate will load the repo config and check if the server has up-to-date
> config to continue serve the client. In case it does not, the server will
> send instructions to the client about what to do next, including to retry
> with a different address or to unlink an outdated socket file to stop an
> old server.
> diff --git a/hgext/chgserver.py b/hgext/chgserver.py
> --- a/hgext/chgserver.py
> +++ b/hgext/chgserver.py
> @@ -25,6 +25,9 @@
> 'setumask' command
> set umask
> +'validate' command
> + reload the config and check if the server is up to date
> 'SIGHUP' signal
> reload configuration files
> @@ -339,6 +342,8 @@
> self._oldios =  # original (self.ch, ui.fp, fd) before "attachio"
> self.hashstate = hashstate
> self.baseaddress = baseaddress
> + if hashstate is not None:
> + self.capabilities['validate'] = chgcmdserver.validate
self.capabilities is statically defined. We'll need to copy it before updating.
> + def validate(self):
> + """reload the config and check if the server is up to date
> + read a list of NULL terminated arguments.
> + write a list of NULL terminated instruction strings.
> + an instruction string could be either:
> + - "unlink $path", the client should unlink the path to stop the
> + outdated server.
> + - "redirect $path", the client should try to connect to another
> + server instead.
> + """
> + args = self._readlist()
> + self.ui = _renewui(self.ui, args)
> + newhash = hashstate.fromui(self.ui, self.hashstate.mtimepaths)
> + insts = 
> + if newhash.mtimehash != self.hashstate.mtimehash:
> + addr = _hashaddress(self.baseaddress, self.hashstate.confighash)
> + insts.append('unlink %s' % addr)
> + if newhash.confighash != self.hashstate.confighash:
> + addr = _hashaddress(self.baseaddress, newhash.confighash)
> + insts.append('redirect %s' % addr)
> + _log('validate: %s\n' % insts)
> + self.cresult.write('\0'.join(insts) + '\0')
It seems awkward that the input has no last '\0', but the output has, though
I know validate() have to return something even if insts is empty.
More information about the Mercurial-devel