##// END OF EJS Templates
packaging: stage installed files for Inno...
packaging: stage installed files for Inno Previously, the Inno installer maintained its own mapping of source files to install location. (We have to maintain a similar mapping in the WiX installer.) Managing the explicit file layout for Windows packages is cumbersome and redundant. Every time you want to change the layout you need to change N locations. We frequently forget to do this and we only find out when people install Mercurial from our packages at release time. This commit starts the process of consolidating and simplifying the logic for managing the install layout on Windows. We introduce a list of install layout rules. These are simply source filenames (which can contain wildcards) and destination paths. The Inno packaging code has been updated to assemble all files into a staging directory that mirrors the final install layout. The list of files to add to the installer is derived by walking this staging directory and dynamically emitting the proper entries for the Inno Setup script. I diffed the file layout before and after this commit and there is no difference. Another benefit of this change is that it facilitates easier testing of the Windows install layout. Before, in order to test the final install layout, you needed to build an installer and run it. Now, you can stage files into the final layout and test from there, without running the installer. This should cut down on overhead when changing Windows code. Differential Revision: https://phab.mercurial-scm.org/D7159

File last commit:

r43346:2372284d default
r43916:d053d3f1 default
Show More
check-config.py
191 lines | 5.5 KiB | text/x-python | PythonLexer
Matt Mackall
check-config: add config option checker...
r25790 #!/usr/bin/env python
#
# check-config - a config flag documentation checker for Mercurial
#
# Copyright 2015 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
Pulkit Goyal
check-config: use absolute_import and print_function
r28352 from __future__ import absolute_import, print_function
Matt Mackall
check-config: add config option checker...
r25790 import re
import sys
foundopts = {}
documented = {}
Gregory Szorc
check-config: syntax to allow inconsistent config values...
r33192 allowinconsistent = set()
Matt Mackall
check-config: add config option checker...
r25790
Augie Fackler
formatting: blacken the codebase...
r43346 configre = re.compile(
br'''
Gregory Szorc
check-config: use compiled regexp...
r32847 # Function call
Gregory Szorc
check-config: use named groups in regexp...
r32848 ui\.config(?P<ctype>|int|bool|list)\(
Gregory Szorc
check-config: use compiled regexp...
r32847 # First argument.
Gregory Szorc
check-config: use named groups in regexp...
r32848 ['"](?P<section>\S+)['"],\s*
Gregory Szorc
check-config: use compiled regexp...
r32847 # Second argument
Gregory Szorc
check-config: use named groups in regexp...
r32848 ['"](?P<option>\S+)['"](,\s+
(?:default=)?(?P<default>\S+?))?
Augie Fackler
formatting: blacken the codebase...
r43346 \)''',
re.VERBOSE | re.MULTILINE,
)
Gregory Szorc
check-config: use compiled regexp...
r32847
Augie Fackler
formatting: blacken the codebase...
r43346 configwithre = re.compile(
br'''
Gregory Szorc
check-config: look for ui.configwith...
r32849 ui\.config(?P<ctype>with)\(
# First argument is callback function. This doesn't parse robustly
# if it is e.g. a function call.
[^,]+,\s*
['"](?P<section>\S+)['"],\s*
['"](?P<option>\S+)['"](,\s+
(?:default=)?(?P<default>\S+?))?
Augie Fackler
formatting: blacken the codebase...
r43346 \)''',
re.VERBOSE | re.MULTILINE,
)
Gregory Szorc
check-config: look for ui.configwith...
r32849
Augie Fackler
formatting: blacken the codebase...
r43346 configpartialre = br"""ui\.config"""
Matt Mackall
check-config: add config option checker...
r25790
Augie Fackler
formatting: blacken the codebase...
r43346 ignorere = re.compile(
br'''
Gregory Szorc
check-config: syntax to allow inconsistent config values...
r33192 \#\s(?P<reason>internal|experimental|deprecated|developer|inconsistent)\s
config:\s(?P<config>\S+\.\S+)$
Augie Fackler
formatting: blacken the codebase...
r43346 ''',
re.VERBOSE | re.MULTILINE,
)
Gregory Szorc
check-config: syntax to allow inconsistent config values...
r33192
Augie Fackler
contrib: fix up output in check-config.py to use strs to avoid b prefixes...
r40295 if sys.version_info[0] > 2:
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
contrib: fix up output in check-config.py to use strs to avoid b prefixes...
r40295 def mkstr(b):
if isinstance(b, str):
return b
return b.decode('utf8')
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
contrib: fix up output in check-config.py to use strs to avoid b prefixes...
r40295 else:
mkstr = lambda x: x
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Mackall
check-config: add config option checker...
r25790 def main(args):
for f in args:
Pulkit Goyal
py3: add b'' to literals in check-config.py...
r35938 sect = b''
prevname = b''
confsect = b''
carryover = b''
Ryan McElroy
check-config: mention the file and line of the error...
r33571 linenum = 0
Pulkit Goyal
check-config: specify the mode 'rb' to open the file...
r35937 for l in open(f, 'rb'):
Ryan McElroy
check-config: mention the file and line of the error...
r33571 linenum += 1
Matt Mackall
check-config: add config option checker...
r25790
# check topic-like bits
Gregory Szorc
check-config: use raw strings for regular expressions...
r41682 m = re.match(br'\s*``(\S+)``', l)
Matt Mackall
check-config: add config option checker...
r25790 if m:
prevname = m.group(1)
Gregory Szorc
check-config: use raw strings for regular expressions...
r41682 if re.match(br'^\s*-+$', l):
Matt Mackall
check-config: add config option checker...
r25790 sect = prevname
Pulkit Goyal
py3: add b'' to literals in check-config.py...
r35938 prevname = b''
Matt Mackall
check-config: add config option checker...
r25790
if sect and prevname:
Pulkit Goyal
py3: add b'' to literals in check-config.py...
r35938 name = sect + b'.' + prevname
Matt Mackall
check-config: add config option checker...
r25790 documented[name] = 1
# check docstring bits
Pulkit Goyal
py3: add b'' to literals in check-config.py...
r35938 m = re.match(br'^\s+\[(\S+)\]', l)
Matt Mackall
check-config: add config option checker...
r25790 if m:
confsect = m.group(1)
continue
Pulkit Goyal
py3: add b'' to literals in check-config.py...
r35938 m = re.match(br'^\s+(?:#\s*)?(\S+) = ', l)
Matt Mackall
check-config: add config option checker...
r25790 if m:
Pulkit Goyal
py3: add b'' to literals in check-config.py...
r35938 name = confsect + b'.' + m.group(1)
Matt Mackall
check-config: add config option checker...
r25790 documented[name] = 1
# like the bugzilla extension
Pulkit Goyal
py3: add b'' to literals in check-config.py...
r35938 m = re.match(br'^\s*(\S+\.\S+)$', l)
Matt Mackall
check-config: add config option checker...
r25790 if m:
documented[m.group(1)] = 1
timeless
check-config: recognize convert style documentation
r27310 # like convert
Pulkit Goyal
py3: add b'' to literals in check-config.py...
r35938 m = re.match(br'^\s*:(\S+\.\S+):\s+', l)
timeless
check-config: recognize convert style documentation
r27310 if m:
documented[m.group(1)] = 1
Matt Mackall
check-config: add config option checker...
r25790 # quoted in help or docstrings
Pulkit Goyal
py3: add b'' to literals in check-config.py...
r35938 m = re.match(br'.*?``(\S+\.\S+)``', l)
Matt Mackall
check-config: add config option checker...
r25790 if m:
documented[m.group(1)] = 1
# look for ignore markers
Gregory Szorc
check-config: syntax to allow inconsistent config values...
r33192 m = ignorere.search(l)
Matt Mackall
check-config: add config option checker...
r25790 if m:
Augie Fackler
contrib: fix up output in check-config.py to use strs to avoid b prefixes...
r40295 if m.group('reason') == b'inconsistent':
Gregory Szorc
check-config: syntax to allow inconsistent config values...
r33192 allowinconsistent.add(m.group('config'))
else:
documented[m.group('config')] = 1
Matt Mackall
check-config: add config option checker...
r25790
# look for code-like bits
timeless
check-config: handle multiline config
r27313 line = carryover + l
Gregory Szorc
check-config: look for ui.configwith...
r32849 m = configre.search(line) or configwithre.search(line)
Matt Mackall
check-config: add config option checker...
r25790 if m:
Gregory Szorc
check-config: use named groups in regexp...
r32848 ctype = m.group('ctype')
Matt Mackall
check-config: add config option checker...
r25790 if not ctype:
ctype = 'str'
Matt Harbison
py3: byteify contrib/check-config.py...
r39744 name = m.group('section') + b"." + m.group('option')
Gregory Szorc
check-config: use named groups in regexp...
r32848 default = m.group('default')
Augie Fackler
contrib: fix up output in check-config.py to use strs to avoid b prefixes...
r40295 if default in (
Augie Fackler
formatting: blacken the codebase...
r43346 None,
b'False',
b'None',
b'0',
b'[]',
b'""',
b"''",
):
Matt Harbison
py3: byteify contrib/check-config.py...
r39744 default = b''
Pulkit Goyal
py3: add b'' to literals in check-config.py...
r35938 if re.match(b'[a-z.]+$', default):
Matt Harbison
py3: byteify contrib/check-config.py...
r39744 default = b'<variable>'
Augie Fackler
formatting: blacken the codebase...
r43346 if (
name in foundopts
and (ctype, default) != foundopts[name]
and name not in allowinconsistent
):
Augie Fackler
contrib: fix up output in check-config.py to use strs to avoid b prefixes...
r40295 print(mkstr(l.rstrip()))
fctype, fdefault = foundopts[name]
Augie Fackler
formatting: blacken the codebase...
r43346 print(
"conflict on %s: %r != %r"
% (
mkstr(name),
(mkstr(ctype), mkstr(default)),
(mkstr(fctype), mkstr(fdefault)),
)
)
Augie Fackler
contrib: fix up output in check-config.py to use strs to avoid b prefixes...
r40295 print("at %s:%d:" % (mkstr(f), linenum))
Matt Mackall
check-config: add config option checker...
r25790 foundopts[name] = (ctype, default)
Matt Harbison
py3: byteify contrib/check-config.py...
r39744 carryover = b''
timeless
check-config: handle multiline config
r27313 else:
m = re.search(configpartialre, line)
if m:
carryover = line
else:
Matt Harbison
py3: byteify contrib/check-config.py...
r39744 carryover = b''
Matt Mackall
check-config: add config option checker...
r25790
for name in sorted(foundopts):
if name not in documented:
Augie Fackler
formatting: blacken the codebase...
r43346 if not (
name.startswith(b"devel.")
or name.startswith(b"experimental.")
or name.startswith(b"debug.")
):
Matt Mackall
check-config: add config option checker...
r25790 ctype, default = foundopts[name]
if default:
Augie Fackler
contrib: fix up output in check-config.py to use strs to avoid b prefixes...
r40295 if isinstance(default, bytes):
default = mkstr(default)
Matt Mackall
check-config: add config option checker...
r25790 default = ' [%s]' % default
Augie Fackler
contrib: fix up output in check-config.py to use strs to avoid b prefixes...
r40295 elif isinstance(default, bytes):
default = mkstr(default)
Augie Fackler
formatting: blacken the codebase...
r43346 print(
"undocumented: %s (%s)%s"
% (mkstr(name), mkstr(ctype), default)
)
Matt Mackall
check-config: add config option checker...
r25790
if __name__ == "__main__":
FUJIWARA Katsunori
tests: execute check-config.py without xargs...
r27992 if len(sys.argv) > 1:
sys.exit(main(sys.argv[1:]))
else:
sys.exit(main([l.rstrip() for l in sys.stdin]))