From 6fa42dbb08dde59b1b0076e22e956fc0c6760ad1 Mon Sep 17 00:00:00 2001 From: Jun Wu Date: Sat, 27 Oct 2018 15:10:26 -0700 Subject: [PATCH] serve: change process title to be more meaningful Summary: All `hg serve` processes on the server have `hg serve --stdio`, which is not that useful about what it's doing. Change it to include wireproto command, ex. `hg serve (fbsource getfiles client-hostname)` Reviewed By: markbt Differential Revision: D10476292 fbshipit-source-id: ce215800d9422995905357d4d5bd79ca5f1d5337 --- mercurial/sshserver.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/mercurial/sshserver.py b/mercurial/sshserver.py index 08c92a1923..05d1b03090 100644 --- a/mercurial/sshserver.py +++ b/mercurial/sshserver.py @@ -8,6 +8,8 @@ from __future__ import absolute_import +import os +import socket import sys from . import encoding, error, hook, util, wireproto @@ -119,17 +121,30 @@ class sshserver(wireproto.abstractserverproto): def serve_one(self): cmd = self.fin.readline()[:-1] - if cmd and cmd in wireproto.commands: - rsp = wireproto.dispatch(self.repo, self, cmd) - self.handlers[rsp.__class__](self, rsp) - elif cmd: - impl = getattr(self, "do_" + cmd, None) - if impl: - r = impl() - if r is not None: - self.sendresponse(r) + if cmd: + if util.safehasattr(util, "setprocname"): + client = encoding.environ.get("SSH_CLIENT", "").split(" ")[0] + # Resolve IP to hostname + try: + client = socket.gethostbyaddr(client)[0] + except (socket.error, IndexError): + pass + reponame = os.path.basename(self.repo.root) + title = "hg serve (%s)" % " ".join( + filter(None, [reponame, cmd, client]) + ) + util.setprocname(title) + if cmd in wireproto.commands: + rsp = wireproto.dispatch(self.repo, self, cmd) + self.handlers[rsp.__class__](self, rsp) else: - self.sendresponse("") + impl = getattr(self, "do_" + cmd, None) + if impl: + r = impl() + if r is not None: + self.sendresponse(r) + else: + self.sendresponse("") return cmd != "" def _client(self):