##// END OF EJS Templates
dockerlib: allow non-unique uid and gid of $DBUILDUSER (issue4657)...
dockerlib: allow non-unique uid and gid of $DBUILDUSER (issue4657) There are make targets for building mercurial packages for various distributions using docker. One of the preparation steps before building is to create inside the docker image a user with the same uid/gid as the current user on the host system, so that the resulting files have appropriate ownership/permissions. It's possible to run `make docker-<distro>` as a user with uid or gid that is already present in a vanilla docker container of that distibution. For example, issue4657 is about failing to build fedora packages as a user with uid=999 and gid=999 because these ids are already used in fedora, and groupadd fails. useradd would fail too, if the flow ever got to it (and there was a user with such uid already). A straightforward (maybe too much) way to fix this is to allow non-unique uid and gid for the new user and group that get created inside the image. I'm not sure of the implications of this, but marmoute encouraged me to try and send this patch for stable.

File last commit:

r23136:6eab50a3 default
r26888:271a8020 stable
Show More
dumbhttp.py
46 lines | 1.6 KiB | text/x-python | PythonLexer
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959 #!/usr/bin/env python
"""
Small and dumb HTTP server for use in tests.
"""
from optparse import OptionParser
Yuya Nishihara
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()...
r23136 import BaseHTTPServer, SimpleHTTPServer, signal, sys
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959
Yuya Nishihara
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()...
r23136 from mercurial import cmdutil
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959
Yuya Nishihara
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()...
r23136 class simplehttpservice(object):
def __init__(self, host, port):
self.address = (host, port)
def init(self):
self.httpd = BaseHTTPServer.HTTPServer(
self.address, SimpleHTTPServer.SimpleHTTPRequestHandler)
def run(self):
self.httpd.serve_forever()
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959
if __name__ == '__main__':
parser = OptionParser()
parser.add_option('-p', '--port', dest='port', type='int', default=8000,
help='TCP port to listen on', metavar='PORT')
parser.add_option('-H', '--host', dest='host', default='localhost',
help='hostname or IP to listen on', metavar='HOST')
parser.add_option('--pid', dest='pid',
help='file name where the PID of the server is stored')
parser.add_option('-f', '--foreground', dest='foreground',
action='store_true',
help='do not start the HTTP server in the background')
Yuya Nishihara
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()...
r23136 parser.add_option('--daemon-pipefds')
Mike Hommey
tests: pull common http server setup out of individual tests...
r22959
(options, args) = parser.parse_args()
signal.signal(signal.SIGTERM, lambda x, y: sys.exit(0))
if options.foreground and options.pid:
parser.error("options --pid and --foreground are mutually exclusive")
Yuya Nishihara
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()...
r23136 opts = {'pid_file': options.pid,
'daemon': not options.foreground,
'daemon_pipefds': options.daemon_pipefds}
service = simplehttpservice(options.host, options.port)
cmdutil.service(opts, initfn=service.init, runfn=service.run,
runargs=[sys.executable, __file__] + sys.argv[1:])