--- a/mercurial/server.py Sun Oct 06 09:45:02 2019 -0400
+++ b/mercurial/server.py Sun Oct 06 09:48:39 2019 -0400
@@ -37,15 +37,15 @@
postexecargs = {}
- if opts['daemon_postexec']:
- for inst in opts['daemon_postexec']:
- if inst.startswith('unlink:'):
- postexecargs['unlink'] = inst[7:]
- elif inst.startswith('chdir:'):
- postexecargs['chdir'] = inst[6:]
- elif inst != 'none':
+ if opts[b'daemon_postexec']:
+ for inst in opts[b'daemon_postexec']:
+ if inst.startswith(b'unlink:'):
+ postexecargs[b'unlink'] = inst[7:]
+ elif inst.startswith(b'chdir:'):
+ postexecargs[b'chdir'] = inst[6:]
+ elif inst != b'none':
raise error.Abort(
- _('invalid value for --daemon-postexec: %s') % inst
+ _(b'invalid value for --daemon-postexec: %s') % inst
)
# When daemonized on Windows, redirect stdout/stderr to the lockfile (which
@@ -53,13 +53,15 @@
# read and print the error if this child dies early. See 594dd384803c. On
# other platforms, the child can write to the parent's stdio directly, until
# it is redirected prior to runfn().
- if pycompat.iswindows and opts['daemon_postexec']:
- if 'unlink' in postexecargs and os.path.exists(postexecargs['unlink']):
+ if pycompat.iswindows and opts[b'daemon_postexec']:
+ if b'unlink' in postexecargs and os.path.exists(
+ postexecargs[b'unlink']
+ ):
procutil.stdout.flush()
procutil.stderr.flush()
fd = os.open(
- postexecargs['unlink'], os.O_WRONLY | os.O_APPEND | os.O_BINARY
+ postexecargs[b'unlink'], os.O_WRONLY | os.O_APPEND | os.O_BINARY
)
try:
os.dup2(fd, procutil.stdout.fileno())
@@ -68,30 +70,30 @@
os.close(fd)
def writepid(pid):
- if opts['pid_file']:
+ if opts[b'pid_file']:
if appendpid:
- mode = 'ab'
+ mode = b'ab'
else:
- mode = 'wb'
- fp = open(opts['pid_file'], mode)
- fp.write('%d\n' % pid)
+ mode = b'wb'
+ fp = open(opts[b'pid_file'], mode)
+ fp.write(b'%d\n' % pid)
fp.close()
- if opts['daemon'] and not opts['daemon_postexec']:
+ if opts[b'daemon'] and not opts[b'daemon_postexec']:
# Signal child process startup with file removal
- lockfd, lockpath = pycompat.mkstemp(prefix='hg-service-')
+ lockfd, lockpath = pycompat.mkstemp(prefix=b'hg-service-')
os.close(lockfd)
try:
if not runargs:
runargs = procutil.hgcmd() + pycompat.sysargv[1:]
- runargs.append('--daemon-postexec=unlink:%s' % lockpath)
+ runargs.append(b'--daemon-postexec=unlink:%s' % lockpath)
# Don't pass --cwd to the child process, because we've already
# changed directory.
for i in pycompat.xrange(1, len(runargs)):
- if runargs[i].startswith('--cwd='):
+ if runargs[i].startswith(b'--cwd='):
del runargs[i]
break
- elif runargs[i].startswith('--cwd'):
+ elif runargs[i].startswith(b'--cwd'):
del runargs[i : i + 2]
break
@@ -103,10 +105,10 @@
# If the daemonized process managed to write out an error msg,
# report it.
if pycompat.iswindows and os.path.exists(lockpath):
- with open(lockpath, 'rb') as log:
+ with open(lockpath, b'rb') as log:
for line in log:
procutil.stderr.write(line)
- raise error.Abort(_('child process failed to start'))
+ raise error.Abort(_(b'child process failed to start'))
writepid(pid)
finally:
util.tryunlink(lockpath)
@@ -118,17 +120,17 @@
if initfn:
initfn()
- if not opts['daemon']:
+ if not opts[b'daemon']:
writepid(procutil.getpid())
- if opts['daemon_postexec']:
+ if opts[b'daemon_postexec']:
try:
os.setsid()
except AttributeError:
pass
- if 'chdir' in postexecargs:
- os.chdir(postexecargs['chdir'])
+ if b'chdir' in postexecargs:
+ os.chdir(postexecargs[b'chdir'])
procutil.hidewindow()
procutil.stdout.flush()
procutil.stderr.flush()
@@ -154,34 +156,34 @@
# Only unlink after redirecting stdout/stderr, so Windows doesn't
# complain about a sharing violation.
- if 'unlink' in postexecargs:
- os.unlink(postexecargs['unlink'])
+ if b'unlink' in postexecargs:
+ os.unlink(postexecargs[b'unlink'])
if runfn:
return runfn()
_cmdservicemap = {
- 'chgunix': chgserver.chgunixservice,
- 'pipe': commandserver.pipeservice,
- 'unix': commandserver.unixforkingservice,
+ b'chgunix': chgserver.chgunixservice,
+ b'pipe': commandserver.pipeservice,
+ b'unix': commandserver.unixforkingservice,
}
def _createcmdservice(ui, repo, opts):
- mode = opts['cmdserver']
+ mode = opts[b'cmdserver']
try:
servicefn = _cmdservicemap[mode]
except KeyError:
- raise error.Abort(_('unknown mode %s') % mode)
+ raise error.Abort(_(b'unknown mode %s') % mode)
commandserver.setuplogging(ui, repo)
return servicefn(ui, repo, opts)
def _createhgwebservice(ui, repo, opts):
# this way we can check if something was given in the command-line
- if opts.get('port'):
- opts['port'] = util.getport(opts.get('port'))
+ if opts.get(b'port'):
+ opts[b'port'] = util.getport(opts.get(b'port'))
alluis = {ui}
if repo:
@@ -189,44 +191,44 @@
alluis.update([repo.baseui, repo.ui])
else:
baseui = ui
- webconf = opts.get('web_conf') or opts.get('webdir_conf')
+ webconf = opts.get(b'web_conf') or opts.get(b'webdir_conf')
if webconf:
- if opts.get('subrepos'):
- raise error.Abort(_('--web-conf cannot be used with --subrepos'))
+ if opts.get(b'subrepos'):
+ raise error.Abort(_(b'--web-conf cannot be used with --subrepos'))
# load server settings (e.g. web.port) to "copied" ui, which allows
# hgwebdir to reload webconf cleanly
servui = ui.copy()
- servui.readconfig(webconf, sections=['web'])
+ servui.readconfig(webconf, sections=[b'web'])
alluis.add(servui)
- elif opts.get('subrepos'):
+ elif opts.get(b'subrepos'):
servui = ui
# If repo is None, hgweb.createapp() already raises a proper abort
# message as long as webconf is None.
if repo:
webconf = dict()
- cmdutil.addwebdirpath(repo, "", webconf)
+ cmdutil.addwebdirpath(repo, b"", webconf)
else:
servui = ui
optlist = (
- "name templates style address port prefix ipv6"
- " accesslog errorlog certificate encoding"
+ b"name templates style address port prefix ipv6"
+ b" accesslog errorlog certificate encoding"
)
for o in optlist.split():
- val = opts.get(o, '')
- if val in (None, ''): # should check against default options instead
+ val = opts.get(o, b'')
+ if val in (None, b''): # should check against default options instead
continue
for u in alluis:
- u.setconfig("web", o, val, 'serve')
+ u.setconfig(b"web", o, val, b'serve')
app = hgweb.createapp(baseui, repo, webconf)
return hgweb.httpservice(servui, app, opts)
def createservice(ui, repo, opts):
- if opts["cmdserver"]:
+ if opts[b"cmdserver"]:
return _createcmdservice(ui, repo, opts)
else:
return _createhgwebservice(ui, repo, opts)