2011-05-05 03:47:46 +04:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
2016-05-13 00:56:28 +03:00
|
|
|
from __future__ import absolute_import
|
|
|
|
|
2019-02-14 14:19:14 +03:00
|
|
|
import shlex
|
|
|
|
import subprocess
|
2011-05-05 03:47:46 +04:00
|
|
|
import os
|
2016-05-13 00:56:28 +03:00
|
|
|
import sys
|
2011-05-05 03:47:46 +04:00
|
|
|
|
|
|
|
os.chdir(os.getenv('TESTTMP'))
|
|
|
|
|
2019-02-14 14:19:14 +03:00
|
|
|
def parse(cmd):
|
|
|
|
"""
|
|
|
|
matches hg-ssh-wrapper
|
|
|
|
"""
|
|
|
|
try:
|
|
|
|
return shlex.split(cmd)
|
|
|
|
except ValueError as e:
|
|
|
|
eprint('Illegal command "%s": %s\n' % (cmd, e))
|
|
|
|
sys.exit(255)
|
|
|
|
|
|
|
|
def parse_repo_path(path):
|
|
|
|
"""
|
|
|
|
matches hg-ssh-wrapper
|
|
|
|
"""
|
|
|
|
path = path.split("?")
|
|
|
|
if len(path) == 1:
|
|
|
|
repo = path[0]
|
|
|
|
marker = None
|
|
|
|
elif len(path) == 2:
|
|
|
|
repo = path[0]
|
|
|
|
marker = path[1]
|
|
|
|
else:
|
|
|
|
eprint("Illegal repo name: %s\n" % "?".join(path))
|
|
|
|
sys.exit(255)
|
|
|
|
|
|
|
|
return repo, marker
|
|
|
|
|
2018-03-06 01:51:35 +03:00
|
|
|
# Skipping SSH options
|
|
|
|
host_index = 1
|
|
|
|
while host_index < len(sys.argv) and sys.argv[host_index].startswith('-'):
|
|
|
|
host_index += 1
|
|
|
|
|
|
|
|
if sys.argv[host_index] != "user@dummy":
|
2011-05-05 03:47:46 +04:00
|
|
|
sys.exit(-1)
|
|
|
|
|
2017-02-16 10:24:03 +03:00
|
|
|
os.environ["SSH_CLIENT"] = "%s 1 2" % os.environ.get('LOCALIP', '127.0.0.1')
|
2011-05-05 03:47:46 +04:00
|
|
|
|
|
|
|
log = open("dummylog", "ab")
|
|
|
|
log.write("Got arguments")
|
|
|
|
for i, arg in enumerate(sys.argv[1:]):
|
2013-06-14 23:28:40 +04:00
|
|
|
log.write(" %d:%s" % (i + 1, arg))
|
2011-05-05 03:47:46 +04:00
|
|
|
log.write("\n")
|
|
|
|
log.close()
|
2018-03-06 01:51:35 +03:00
|
|
|
hgcmd = sys.argv[host_index + 1]
|
2011-12-26 18:30:43 +04:00
|
|
|
if os.name == 'nt':
|
|
|
|
# hack to make simple unix single quote quoting work on windows
|
|
|
|
hgcmd = hgcmd.replace("'", '"')
|
2019-02-14 14:19:14 +03:00
|
|
|
|
|
|
|
cmdargv = parse(hgcmd)
|
|
|
|
if cmdargv[:2] == ["hg", "-R"] and cmdargv[3:] == ["serve", "--stdio"]:
|
|
|
|
path, marker = parse_repo_path(cmdargv[2])
|
2019-02-22 16:59:34 +03:00
|
|
|
if marker == "read_copy":
|
|
|
|
path = path + "_copy"
|
2019-02-14 14:19:14 +03:00
|
|
|
cmdargv[2] = path
|
|
|
|
hgcmd = subprocess.list2cmdline(cmdargv)
|
|
|
|
|
2011-12-26 18:30:43 +04:00
|
|
|
r = os.system(hgcmd)
|
2011-05-05 03:47:46 +04:00
|
|
|
sys.exit(bool(r))
|