##// END OF EJS Templates
debian: support building a single deb for multiple py3 versions...
debian: support building a single deb for multiple py3 versions Around transitions from one python minor version to another (such as 3.7 to 3.8), the current packaging can be slightly problematic - it produces a `control` file that requires that the version of `python3` that's installed be exactly the one that was used on the build machine for the `mercurial` package, by containing a line like: Depends: sensible-utils, libc6 (>= 2.14), python3 (<< 3.8), python3 (>= 3.7~), python3:any (>= 3.5~) This is because it "knows" we only built for v3.7, which is the current default on my system. By building the native components for multiple versions, we can make it produce a line like this, which is compatible with 3.7 AND 3.8: Depends: sensible-utils, libc6 (>= 2.14), python3 (<< 3.9), python3 (>= 3.7~), python3:any (>= 3.5~) This isn't *normally* required, so I'm not making it the default. For those that receive their python3 and mercurial packages from their distro, and/or don't have to worry about a situation where the team that manages the python3 installation isn't the same as the team that manages the mercurial installation, this is probably not necessary. I chose the names `DEB_HG_*` because `DEB_*` is passed through `debuild` automatically (otherwise we'd have to explicitly allow the options through, which is a nuisance), and the `HG` part is to make it clear that this isn't a "standard" debian option that other packages might respect. Test Plan: 1. "nothing changed": - built a deb without these changes - built a deb with these changes but everything at the default - used diffoscope to compare, all differences were due to timestamps 2. "explicit is the same as implicit" (single version) - built a deb with everything at the default - built a deb with DEB_HG_PYTHON_VERSIONS=3.7 - used diffoscope to compare, all differences were due to timestamps 3. "explicit is the same as implicit" (multi version) - built a deb with DEB_HG_MULTI_VERSION=1 - built a deb with DEB_HG_PYTHON_VERSIONS=3.7 - used diffoscope to compare, all differences were due to timestamps 4. (single version, 3.7) doesn't work with python3.8 - `/usr/bin/python3.7 /usr/bin/hg debuginstall` works - `/usr/bin/python3.8 /usr/bin/hg debuginstall` crashes 5. (multi version, 3.7 + 3.8) - `/usr/bin/python3.7 /usr/bin/hg debuginstall` works - `/usr/bin/python3.8 /usr/bin/hg debuginstall` works Differential Revision: https://phab.mercurial-scm.org/D8642

File last commit:

r44058:99e231af default
r45543:36178b5c default
Show More
simplemerge
102 lines | 2.7 KiB | text/plain | TextLexer
#!/usr/bin/env python
from __future__ import absolute_import
import getopt
import sys
import hgdemandimport
hgdemandimport.enable()
from mercurial.i18n import _
from mercurial import (
context,
error,
fancyopts,
pycompat,
simplemerge,
ui as uimod,
)
from mercurial.utils import procutil, stringutil
options = [
(b'L', b'label', [], _(b'labels to use on conflict markers')),
(b'a', b'text', None, _(b'treat all files as text')),
(b'p', b'print', None, _(b'print results instead of overwriting LOCAL')),
(b'', b'no-minimal', None, _(b'no effect (DEPRECATED)')),
(b'h', b'help', None, _(b'display help and exit')),
(b'q', b'quiet', None, _(b'suppress output')),
]
usage = _(
b'''simplemerge [OPTS] LOCAL BASE OTHER
Simple three-way file merge utility with a minimal feature set.
Apply to LOCAL the changes necessary to go from BASE to OTHER.
By default, LOCAL is overwritten with the results of this operation.
'''
)
class ParseError(Exception):
"""Exception raised on errors in parsing the command line."""
def showhelp():
pycompat.stdout.write(usage)
pycompat.stdout.write(b'\noptions:\n')
out_opts = []
for shortopt, longopt, default, desc in options:
out_opts.append(
(
b'%2s%s'
% (
shortopt and b'-%s' % shortopt,
longopt and b' --%s' % longopt,
),
b'%s' % desc,
)
)
opts_len = max([len(opt[0]) for opt in out_opts])
for first, second in out_opts:
pycompat.stdout.write(b' %-*s %s\n' % (opts_len, first, second))
try:
for fp in (sys.stdin, pycompat.stdout, sys.stderr):
procutil.setbinary(fp)
opts = {}
try:
bargv = [a.encode('utf8') for a in sys.argv[1:]]
args = fancyopts.fancyopts(bargv, options, opts)
except getopt.GetoptError as e:
raise ParseError(e)
if opts[b'help']:
showhelp()
sys.exit(0)
if len(args) != 3:
raise ParseError(_(b'wrong number of arguments').decode('utf8'))
local, base, other = args
sys.exit(
simplemerge.simplemerge(
uimod.ui.load(),
context.arbitraryfilectx(local),
context.arbitraryfilectx(base),
context.arbitraryfilectx(other),
**pycompat.strkwargs(opts)
)
)
except ParseError as e:
e = stringutil.forcebytestr(e)
pycompat.stdout.write(b"%s: %s\n" % (sys.argv[0].encode('utf8'), e))
showhelp()
sys.exit(1)
except error.Abort as e:
pycompat.stderr.write(b"abort: %s\n" % e)
sys.exit(255)
except KeyboardInterrupt:
sys.exit(255)