##// END OF EJS Templates
branching: merge stable into default
Raphaël Gomès -
r51644:0a55206c merge default
parent child Browse files
Show More
@@ -0,0 +1,90 b''
1 = Mercurial 6.5 =
2
3 As usual, a lot of patches don't make it to this list since they're more internal.
4
5 == New Features ==
6
7 * Improved Python 3.12 compatiblity
8 * configitems: enable changegroup3 by default (unless using infinitepush)
9 * extras: expose 'retained_extras' for extensions to extend
10 * stabletailgraph: implement stable-tail sort
11 * stabletailgraph: naive version of leap computation
12 * bundle: introduce a "v3" spec
13 * clone-bundles: add a basic first version of automatic bundle generation
14 * clone-bundles: garbage collect older bundle when generating new ones
15 * clone-bundles: only regenerate the clone bundle when cached ration is low
16 * clone-bundles: also control automation based on absolute number of revisions
17 * clone-bundles: add a configuration to control auto-generation on changes
18 * clone-bundles: introduce a command to refresh bundle
19 * clone-bundles: add a command to clear all bundles
20 * clone-bundles: add an option to generate bundles in the background
21 * clonebundles: add support for inline (streaming) clonebundles
22 * clonebundles: adds a auto-generate.serve-inline option
23 * match: add `filepath:` pattern to match an exact filepath relative to the root
24 * hgweb: add "children" into the JSON template for a changeset
25 * hgweb: add support to explicitly access hidden changesets
26 * pull: add --remote-hidden option and pass it through peer creation
27 * hidden: add support for --remote-hidden to HTTP peer
28 * hidden: support passing --hidden with `serve --stdio`
29 * hidden: add support to explicitly access hidden changesets with SSH peers
30 * perf: introduce a `perf::stream-locked-section` command
31 * perf: add a function to find a stream version generator
32 * perf: add support for stream-v3 during benchmark
33 * perf: add a perf::stream-generate command
34 * perf: add a perf::stream-consume
35 * cli: make debugnodemap capable of inspecting an arbitrary nodemap
36 * rust: configure MSRV in Clippy
37 * rhg: make `rhg files` work if `ui.relative-files=true` is specified
38 * rhg: support `rhg files` with `ui.relative-paths=false`
39 * rhg: support `status --print0`
40 * tree-manifest: allow `debugupgraderepo` to run on tree manifest repo
41 * library: enable runpy invocation on mercurial package
42 * library: incorporate demandimport into runpy invocation
43 * exchange: allow passing no includes/excludes to `pull()`
44
45 == New Experimental Features ==
46
47 * stream-clone: add an experimental v3 version of the protocol
48 * stream-clone: support streamv3 on the cli [hg bundle]
49
50 == Bug Fixes ==
51
52 * mail: add a missing argument to properly override starttls
53 * bundle: include required phases when saving a bundle (issue6794)
54 * outgoing: fix common-heads computation from `missingroots` argument
55 * strip: do not include internal changeset in the strip backup
56 * bundle: abort if the user request bundling of internal changesets
57 * bundle: prevent implicit bundling of internal changeset
58 * encoding: avoid quadratic time complexity when json-encoding non-UTF8 strings
59 * sha1dc: Make sure SHA1DC_BIGENDIAN is set on Darwin/PowerPC
60 * zstd: hack include order to ensure that our zstd.h is found
61 * dirstate: better error messages when dirstate is corrupted
62 * stream-clone: avoid opening a revlog in case we do not need it
63 * treemanifest: make `updatecaches` update the nodemaps for all directories
64 * rust-hg-core: move from `ouroboros` to `self_cell`
65 * rust-dependencies: switch from `users` to `whoami`
66 * dirstate-v2: actually fix the dirstate-v2 upgrade race
67 * dirstate: avoid leaking disk space in `hg debugrebuilddirstate`
68 * clonebundles: add warning if auto-generate is enabled without formats
69 * win32mbcs: unbyteify some strings for py3 support
70 * rust-revlog: fix incorrect results with NULL_NODE prefixes
71 * rust-revlog: fix RevlogEntry.data() for NULL_REVISION
72
73 == Backwards Compatibility Changes ==
74
75 * infinitepush: aggressively deprecated infinite push
76 * narrow: indicated the default of 'Yes' when confirming auto-remove-includes
77
78 == Internal API Changes ==
79
80 * Store walk was reworked to fix small race conditions in stream-clone and
81 greatly improve its API robustness and flexibility.
82
83 == Miscellaneous ==
84
85 * Typechecking support was improved in a lot of places
86 * Removed more useless compat code for now unsupported Python versions
87 * Sped up zstd usage in Rust contexts
88 * revlog: add an exception hint when processing LFS flags without the extension
89 * ui: keep the progress bar around when writing if stdout is not a tty
90 * transaction: use a ".bck" extension for all backup file
@@ -0,0 +1,39 b''
1 #require rust
2
3 $ cat >> $HGRCPATH << EOF
4 > [format]
5 > use-dirstate-v2=1
6 > [storage]
7 > dirstate-v2.slow-path=allow
8 > EOF
9
10 $ hg init t
11 $ cd t
12
13 $ for i in 1 2 3 4 5 6 7 8 9 10; do touch foobar$i; done
14 $ hg add .
15 adding foobar1
16 adding foobar10
17 adding foobar2
18 adding foobar3
19 adding foobar4
20 adding foobar5
21 adding foobar6
22 adding foobar7
23 adding foobar8
24 adding foobar9
25 $ hg commit -m "1"
26
27 Check that there's no space leak on debugrebuilddirstate
28
29 $ f --size .hg/dirstate*
30 .hg/dirstate: size=133
31 .hg/dirstate.b870a51b: size=511
32 $ hg debugrebuilddirstate
33 $ f --size .hg/dirstate*
34 .hg/dirstate: size=133
35 .hg/dirstate.88698448: size=511
36 $ hg debugrebuilddirstate
37 $ f --size .hg/dirstate*
38 .hg/dirstate: size=133
39 .hg/dirstate.6b8ab34b: size=511
@@ -246,3 +246,5 b' f952be90b0514a576dcc8bbe758ce3847faba9bb'
246 246 fc445f8abcf90b33db7c463816a1b3560681767f 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmRTok8ZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVpZ5DACBv33k//ovzSbyH5/q+Xhk3TqNRY8IDOjoEhvDyu0bJHsvygOGXLUtHpQPth1RA4/c+AVNJrUeFvT02sLqqP2d9oSA9HEAYpOuzwgr1A+1o+Q2GyfD4cElP6KfiEe8oyFVOB0rfBgWNei1C0nnrhChQr5dOPR63uAFhHzkEsgsTFS7ONxZ1DHbe7gRV8OMMf1MatAtRzRexQJCqyNv7WodQdrKtjHqPKtlWl20dbwTHhzeiZbtjiTe0CVXVsOqnA1DQkO/IaiKQrn3zWdGY5ABbqQ1K0ceLcej4NFOeLo9ZrShndU3BuFUa9Dq9bnPYOI9wMqGoDh/GdTZkZEzBy5PTokY3AJHblbub49pi8YTenFcPdtd/v71AaNi3TKa45ZNhYVkPmRETYweHkLs3CIrSyeiBwU4RGuQZVD/GujAQB5yhk0w+LPMzBsHruD4vsgXwIraCzQIIJTjgyxKuAJGdGNUFYyxEpUkgz5G6MFrBKe8HO69y3Pm/qDNZ2maV8k=
247 247 da372c745e0f053bb7a64e74cccd15810d96341d 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmSB7WkZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVoy+C/4zwO+Wxc3wr0aEzjVqAss7FuGS5e66H+0T3WzVgKIRMqiiOmUmmiNf+XloXlX4TOwoh9j9GNEpoZfV6TSwFSqV0LALaVIRRwrkJBDhnqw4eNBZbK5aBWNa2/21dkHecxF4KG3ai9kLwy2mtHxkDIy8T2LPvdx8pfNcYT4PZ19x2itqZLouBJqiZYehsqeMLNF2vRqkq+rQ+D2sFGLljgPo0JlpkOZ4IL7S/cqTOBG1sQ6KJK+hAE1kF1lhvK796VhKKXVnWVgqJLyg7ZI6168gxeFv5cyCtb+FUXJJ/5SOkxaCKJf3mg3DIYi3G7xjwB5CfUGW8A2qexgEjXeV42Mu7/Mkmn/aeTdL0UcRK3oBVHJwqt/fJlGFqVWt4/9g9KW5mJvTDQYBo/zjLyvKFEbnSLzhEP+9SvthCrtX0UYkKxOGi2M2Z7e9wgBB0gY8a36kA739lkNu6r3vH/FVh0aPTMWukLToELS90WgfViNr16lDnCeDjMgg97OKxWdOW6U=
248 248 271a4ab29605ffa0bae5d3208eaa21a95427ff92 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmSUEeMZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVlJnC/98qGmpi0gHbsoCPfoxgV2uSE4XAXZXPvbHqKAVUVJbkQoS0L2jighUArPZsduRjD+nSf/jO951/DmnxIwXfF5qA2dP1eBnjSmXS3xslmqD7nUw+pP8mKUQvXky+AbiL5onWw4gRtsqTZg4DYnPMeaE/eIUy/j60kXsf6gaDkQSAF/+9vB5UcVI1z7gKY/nE5pGW6cS9kPd/BEg2icficaOHXcetQFi53Gcy5kLEaYc9f8RUrvc0Z9jDkZSlmTHfTLOY+1hlFZ2FRAvL1Ikh7Ks+85LWuqs1ZYIdB6ucudhLW1dGd/ZyD0iU82e0XrU/tm6oDBdeSFOy1AAXN5pern18VcPeaT/zGgN7DG1LW9jISbYFzLwvHwzTMKSVgq4HSfeTHiSKoWp0qAbcFHUYfC4L1Heqd/UfzVN/1/9eSj69Hbjff8+E6OOF15Ky2gtr8PSyP7WIu9rTueUUoWIMG99btq5OYvEbmWgHuHIcJBUEJOalvhrZePbTW3v22Eh45M=
249 bb42988c7e156931b0ff1e93732b98173ebbcb7f 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmSUPXUZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVvYTC/wP7f8RITHgCO8djHUsnRs60P2mlEJQ71TDA3dqgdBIr3tWMELfcZMZnOTtaw4eqKemLauxa69MHgj2y++VMnfJx1pW5G61G8ZFfLjwFvAqqmXnnT6RVjo7sPuKSkL28C9NWwrLIRk5SGWK52W56Slz0bW1yhJBOV8BEIgZM5ucs4froYTxgAP8xprbLyPIroAJEtPNU3mkOXuPPGQ/zGO9czJ9sfYHU3bPmskf3YLqWAKQdCmxQgv44QluRVWoek6caIUA04mJwwlBdCCPZnr8hvaptZeYv2hhPw7CzDfWwMkyBYzmoUAZIgu/eYPtDRtxeIlEYC2WP+DQy5R+kK+X/nfxe8kVL9USow5MZZ54tmPbrwUO/dkWOWiK5NyqYnFjBDaq24XKUoPC7p7mGkfzQPNCiKcQO3qcUtiIb7tzz0olWemD2z86ws8kaEK8GSOgpBK71KOzrPZt8B01Nb+seahftCN5HxALAJSM6VRxYJFgYMFFxid+zNwEstuNipo=
250 3ffc7209bbae5804a53084c9dc2d41139e88c867 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmSmyeIZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVn/CC/9l24Feazay+kN3rOCvRqOOQO0Xx47+Lx5xaC4mgSAs7fkefY0ru4gnKRQkYskIksUzJX0P6aGrS3RH3y+DzxPhha75Ufq1abD8c1NJ2mUzW/DnoEI9zKnprkUdet8cwwLzNDhuWqjG6DY1ETwWpYVHo01Yv5FjDOdbMfPJ92yyF2AxLNTjkHNNfn0dpJE+/Sz8WjKsjPtTB432ZhvmfDsWgW+fTOlVATEyRqP4vNMWxPKPYif7KvH5U8vPAvX4i5Ox+csNeFQTUGV6KfgpAjXuJc2AEGr644KfpiMIyvWvEDewPAoGR+BUBz8jjT5KqBxc/9RJ8wEruCZIEKXxMAta+G+wWJyXZgKU1UN4x6mQT4RscnvX/1jMZx7zzqTSq2fe0Ddw/ta2aZtbp0JLJ5NmqiFLaKdDDdTAAONn+dBLQMO0+NNm9bOOafqI8edsOw3WoXmOVxbpdBrzIP5x18qNRU9gcTxxPqN5yy97dhsKyRpdbMVruxp1NUWeTBywARI=
@@ -262,3 +262,5 b' f952be90b0514a576dcc8bbe758ce3847faba9bb'
262 262 fc445f8abcf90b33db7c463816a1b3560681767f 6.4.3
263 263 da372c745e0f053bb7a64e74cccd15810d96341d 6.4.4
264 264 271a4ab29605ffa0bae5d3208eaa21a95427ff92 6.4.5
265 bb42988c7e156931b0ff1e93732b98173ebbcb7f 6.5rc0
266 3ffc7209bbae5804a53084c9dc2d41139e88c867 6.5
@@ -146,10 +146,8 b' testpats = ['
146 146 r'\[[^\]]+==',
147 147 '[ foo == bar ] is a bashism, use [ foo = bar ] instead',
148 148 ),
149 (
150 r'(^|\|\s*)grep (-\w\s+)*[^|]*[(|]\w',
151 "use egrep for extended grep syntax",
152 ),
149 (r'(^|\|\s*)egrep', "use grep -E for extended grep syntax"),
150 (r'(^|\|\s*)fgrep', "use grep -F for fixed string grepping"),
153 151 (r'(^|\|\s*)e?grep .*\\S', "don't use \\S in regular expression"),
154 152 (r'(?<!!)/bin/', "don't use explicit paths for tools"),
155 153 (r'#!.*/bash', "don't use bash in shebang, use sh"),
@@ -1,3 +1,24 b''
1 # Don't run pipelines on branch "merge", since we're fast-forward only.
2 # Gitlab sees a new branch (since e.g. `topic/stable/my-topic` becomes
3 # `branch/stable`), but the hash hasn't changed. There is no reason to
4 # re-run the CI in our case, since we haven't built up any specific automation.
5 # Right now it's just wasted CI and developer time.
6 # One can still run the pipeline manually via the web interface,
7 # like in the case of releases, to make *extra* sure that the actual branch
8 # has succeeded.
9 workflow:
10 rules:
11 - if: $CI_COMMIT_BRANCH =~ /^branch\/.*/ && $CI_PIPELINE_SOURCE != "web"
12 when: never
13 - if: $CI_PIPELINE_SOURCE == "merge_request_event"
14 when: never
15 - if: $CI_PIPELINE_SOURCE == "push"
16 when: always
17 - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
18 when: never
19 - if: $CI_COMMIT_BRANCH
20 when: always
21
1 22 stages:
2 23 - tests
3 24
@@ -9,9 +9,6 b' config = b"/path/to/repo/or/config"'
9 9 # (consult "installed modules" path from 'hg debuginstall'):
10 10 # import sys; sys.path.insert(0, "/path/to/python/lib")
11 11
12 # Uncomment to send python tracebacks to the browser if an error occurs:
13 # import cgitb; cgitb.enable()
14
15 12 from mercurial import demandimport
16 13
17 14 demandimport.enable()
@@ -8,9 +8,6 b' config = b"/path/to/repo/or/config"'
8 8 # (consult "installed modules" path from 'hg debuginstall'):
9 9 #import sys; sys.path.insert(0, "/path/to/python/lib")
10 10
11 # Uncomment to send python tracebacks to the browser if an error occurs:
12 #import cgitb; cgitb.enable()
13
14 11 # enable demandloading to reduce startup time
15 12 from mercurial import demandimport; demandimport.enable()
16 13
@@ -55,6 +55,9 b' IGNORES = {'
55 55 'builtins',
56 56 'urwid.command_map', # for pudb
57 57 'lzma',
58 # setuptools uses this hack to inject it's own distutils at import time
59 'setuptools',
60 '_distutils_hack.override',
58 61 }
59 62
60 63 _pypy = '__pypy__' in sys.builtin_module_names
@@ -248,7 +248,7 b' be controlled by the `clone-bundles.trig'
248 248
249 249 This logic can be manually triggered using the `admin::clone-bundles-refresh`
250 250 command, or automatically on each repository change if
251 `clone-bundles.auto-generate.on-change` is set to `yes`.
251 `clone-bundles.auto-generate.on-change` is set to `yes`::
252 252
253 253 [clone-bundles]
254 254 auto-generate.on-change=yes
@@ -972,7 +972,15 b' def reposetup(ui, repo):'
972 972 targets = repo.ui.configlist(
973 973 b'clone-bundles', b'auto-generate.formats'
974 974 )
975 if enabled and targets:
975 if enabled:
976 if not targets:
977 repo.ui.warn(
978 _(
979 b'clone-bundle auto-generate enabled, '
980 b'but no formats specified: disabling generation\n'
981 )
982 )
983 else:
976 984 tr.addpostclose(CAT_POSTCLOSE, make_auto_bundler(self))
977 985 return tr
978 986
@@ -82,7 +82,7 b' def decode(arg):'
82 82 uarg = arg.decode(_encoding)
83 83 if arg == uarg.encode(_encoding):
84 84 return uarg
85 raise UnicodeError(b"Not local encoding")
85 raise UnicodeError("Not local encoding")
86 86 elif isinstance(arg, tuple):
87 87 return tuple(map(decode, arg))
88 88 elif isinstance(arg, list):
@@ -111,8 +111,8 b' def appendsep(s):'
111 111 try:
112 112 us = decode(s)
113 113 except UnicodeError:
114 us = s
115 if us and us[-1] not in b':/\\':
114 us = s # TODO: how to handle this bytes case??
115 if us and us[-1] not in ':/\\':
116 116 s += pycompat.ossep
117 117 return s
118 118
@@ -148,13 +148,13 b' def wrapperforlistdir(func, args, kwds):'
148 148 if args:
149 149 args = list(args)
150 150 args[0] = appendsep(args[0])
151 if b'path' in kwds:
152 kwds[b'path'] = appendsep(kwds[b'path'])
151 if 'path' in kwds:
152 kwds['path'] = appendsep(kwds['path'])
153 153 return func(*args, **kwds)
154 154
155 155
156 def wrapname(name, wrapper):
157 module, name = name.rsplit(b'.', 1)
156 def wrapname(name: str, wrapper):
157 module, name = name.rsplit('.', 1)
158 158 module = sys.modules[module]
159 159 func = getattr(module, name)
160 160
@@ -168,7 +168,7 b' def wrapname(name, wrapper):'
168 168 # List of functions to be wrapped.
169 169 # NOTE: os.path.dirname() and os.path.basename() are safe because
170 170 # they use result of os.path.split()
171 funcs = b'''os.path.join os.path.split os.path.splitext
171 funcs = '''os.path.join os.path.split os.path.splitext
172 172 os.path.normpath os.makedirs mercurial.util.endswithsep
173 173 mercurial.util.splitpath mercurial.util.fscasesensitive
174 174 mercurial.util.fspath mercurial.util.pconvert mercurial.util.normpath
@@ -178,11 +178,11 b" funcs = b'''os.path.join os.path.split o"
178 178 # These functions are required to be called with local encoded string
179 179 # because they expects argument is local encoded string and cause
180 180 # problem with unicode string.
181 rfuncs = b'''mercurial.encoding.upper mercurial.encoding.lower
181 rfuncs = '''mercurial.encoding.upper mercurial.encoding.lower
182 182 mercurial.util._filenamebytestr'''
183 183
184 184 # List of Windows specific functions to be wrapped.
185 winfuncs = b'''os.path.splitunc'''
185 winfuncs = '''os.path.splitunc'''
186 186
187 187 # codec and alias names of sjis and big5 to be faked.
188 188 problematic_encodings = b'''big5 big5-tw csbig5 big5hkscs big5-hkscs
@@ -208,15 +208,15 b' def extsetup(ui):'
208 208 if pycompat.iswindows:
209 209 for f in winfuncs.split():
210 210 wrapname(f, wrapper)
211 wrapname(b"mercurial.util.listdir", wrapperforlistdir)
212 wrapname(b"mercurial.windows.listdir", wrapperforlistdir)
211 wrapname("mercurial.util.listdir", wrapperforlistdir)
212 wrapname("mercurial.windows.listdir", wrapperforlistdir)
213 213 # wrap functions to be called with local byte string arguments
214 214 for f in rfuncs.split():
215 215 wrapname(f, reversewrapper)
216 216 # Check sys.args manually instead of using ui.debug() because
217 217 # command line options is not yet applied when
218 218 # extensions.loadall() is called.
219 if b'--debug' in sys.argv:
219 if '--debug' in sys.argv:
220 220 ui.writenoi18n(
221 221 b"[win32mbcs] activated with encoding: %s\n" % _encoding
222 222 )
@@ -10,9 +10,6 b' config = b"/path/to/repo/or/config"'
10 10 # (consult "installed modules" path from 'hg debuginstall'):
11 11 # import sys; sys.path.insert(0, "/path/to/python/lib")
12 12
13 # Uncomment to send python tracebacks to the browser if an error occurs:
14 # import cgitb; cgitb.enable()
15
16 13 from mercurial import demandimport
17 14
18 15 demandimport.enable()
@@ -4,7 +4,6 b''
4 4 # GNU General Public License version 2 or any later version.
5 5
6 6
7 import struct
8 7 from .i18n import _
9 8
10 9 from . import (
@@ -152,15 +151,13 b' class _dirstatemapcommon:'
152 151 b'dirstate only has a docket in v2 format'
153 152 )
154 153 self._set_identity()
155 try:
154 data = self._readdirstatefile()
155 if data == b'' or data.startswith(docketmod.V2_FORMAT_MARKER):
156 156 self._docket = docketmod.DirstateDocket.parse(
157 self._readdirstatefile(), self._nodeconstants
157 data, self._nodeconstants
158 158 )
159 except struct.error:
160 self._ui.debug(b"failed to read dirstate-v2 data")
161 raise error.CorruptedDirstate(
162 b"failed to read dirstate-v2 data"
163 )
159 else:
160 raise error.CorruptedDirstate(b"dirstate is not in v2 format")
164 161 return self._docket
165 162
166 163 def _read_v2_data(self):
@@ -964,6 +964,7 b' impl OwningDirstateMap {'
964 964 map.root = Default::default();
965 965 map.nodes_with_entry_count = 0;
966 966 map.nodes_with_copy_source_count = 0;
967 map.unreachable_bytes = map.on_disk.len() as u32;
967 968 });
968 969 }
969 970
@@ -1,6 +1,6 b''
1 1 use crate::errors::HgError;
2 use crate::revlog::Revision;
2 3 use crate::revlog::{Node, NodePrefix};
3 use crate::revlog::{Revision, NULL_REVISION};
4 4 use crate::revlog::{Revlog, RevlogEntry, RevlogError};
5 5 use crate::utils::hg_path::HgPath;
6 6 use crate::vfs::Vfs;
@@ -51,9 +51,6 b' impl Changelog {'
51 51 &self,
52 52 rev: Revision,
53 53 ) -> Result<ChangelogRevisionData, RevlogError> {
54 if rev == NULL_REVISION {
55 return Ok(ChangelogRevisionData::null());
56 }
57 54 self.entry_for_rev(rev)?.data()
58 55 }
59 56
@@ -336,6 +333,11 b' message",'
336 333 changelog.data_for_rev(NULL_REVISION)?,
337 334 ChangelogRevisionData::null()
338 335 );
336 // same with the intermediate entry object
337 assert_eq!(
338 changelog.entry_for_rev(NULL_REVISION)?.data()?,
339 ChangelogRevisionData::null()
340 );
339 341 Ok(())
340 342 }
341 343 }
@@ -225,20 +225,35 b' impl Revlog {'
225 225 &self,
226 226 node: NodePrefix,
227 227 ) -> Result<Revision, RevlogError> {
228 let looked_up = if let Some(nodemap) = &self.nodemap {
229 nodemap
230 .find_bin(&self.index, node)?
231 .ok_or(RevlogError::InvalidRevision)
232 } else {
233 self.rev_from_node_no_persistent_nodemap(node)
234 };
235
228 236 if node.is_prefix_of(&NULL_NODE) {
229 return Ok(NULL_REVISION);
237 return match looked_up {
238 Ok(_) => Err(RevlogError::AmbiguousPrefix),
239 Err(RevlogError::InvalidRevision) => Ok(NULL_REVISION),
240 res => res,
241 };
242 };
243
244 looked_up
230 245 }
231 246
232 if let Some(nodemap) = &self.nodemap {
233 return nodemap
234 .find_bin(&self.index, node)?
235 .ok_or(RevlogError::InvalidRevision);
236 }
237
238 // Fallback to linear scan when a persistent nodemap is not present.
239 // This happens when the persistent-nodemap experimental feature is not
240 // enabled, or for small revlogs.
241 //
247 /// Same as `rev_from_node`, without using a persistent nodemap
248 ///
249 /// This is used as fallback when a persistent nodemap is not present.
250 /// This happens when the persistent-nodemap experimental feature is not
251 /// enabled, or for small revlogs.
252 fn rev_from_node_no_persistent_nodemap(
253 &self,
254 node: NodePrefix,
255 ) -> Result<Revision, RevlogError> {
256 // Linear scan of the revlog
242 257 // TODO: consider building a non-persistent nodemap in memory to
243 258 // optimize these cases.
244 259 let mut found_by_prefix = None;
@@ -547,6 +562,9 b" impl<'revlog> RevlogEntry<'revlog> {"
547 562
548 563 pub fn data(&self) -> Result<Cow<'revlog, [u8]>, HgError> {
549 564 let data = self.rawdata()?;
565 if self.rev == NULL_REVISION {
566 return Ok(data);
567 }
550 568 if self.is_censored() {
551 569 return Err(HgError::CensoredNodeError);
552 570 }
@@ -669,6 +687,13 b' mod tests {'
669 687 assert_eq!(revlog.len(), 0);
670 688 assert!(revlog.get_entry(0).is_err());
671 689 assert!(!revlog.has_rev(0));
690 assert_eq!(
691 revlog.rev_from_node(NULL_NODE.into()).unwrap(),
692 NULL_REVISION
693 );
694 let null_entry = revlog.get_entry(NULL_REVISION).ok().unwrap();
695 assert_eq!(null_entry.revision(), NULL_REVISION);
696 assert!(null_entry.data().unwrap().is_empty());
672 697 }
673 698
674 699 #[test]
@@ -740,4 +765,65 b' mod tests {'
740 765 assert!(p2_entry.is_some());
741 766 assert_eq!(p2_entry.unwrap().revision(), 1);
742 767 }
768
769 #[test]
770 fn test_nodemap() {
771 let temp = tempfile::tempdir().unwrap();
772 let vfs = Vfs { base: temp.path() };
773
774 // building a revlog with a forced Node starting with zeros
775 // This is a corruption, but it does not preclude using the nodemap
776 // if we don't try and access the data
777 let node0 = Node::from_hex("00d2a3912a0b24502043eae84ee4b279c18b90dd")
778 .unwrap();
779 let node1 = Node::from_hex("b004912a8510032a0350a74daa2803dadfb00e12")
780 .unwrap();
781 let entry0_bytes = IndexEntryBuilder::new()
782 .is_first(true)
783 .with_version(1)
784 .with_inline(true)
785 .with_offset(INDEX_ENTRY_SIZE)
786 .with_node(node0)
787 .build();
788 let entry1_bytes = IndexEntryBuilder::new()
789 .with_offset(INDEX_ENTRY_SIZE)
790 .with_node(node1)
791 .build();
792 let contents = vec![entry0_bytes, entry1_bytes]
793 .into_iter()
794 .flatten()
795 .collect_vec();
796 std::fs::write(temp.path().join("foo.i"), contents).unwrap();
797 let revlog = Revlog::open(&vfs, "foo.i", None, false).unwrap();
798
799 // accessing the data shows the corruption
800 revlog.get_entry(0).unwrap().data().unwrap_err();
801
802 assert_eq!(revlog.rev_from_node(NULL_NODE.into()).unwrap(), -1);
803 assert_eq!(revlog.rev_from_node(node0.into()).unwrap(), 0);
804 assert_eq!(revlog.rev_from_node(node1.into()).unwrap(), 1);
805 assert_eq!(
806 revlog
807 .rev_from_node(NodePrefix::from_hex("000").unwrap())
808 .unwrap(),
809 -1
810 );
811 assert_eq!(
812 revlog
813 .rev_from_node(NodePrefix::from_hex("b00").unwrap())
814 .unwrap(),
815 1
816 );
817 // RevlogError does not implement PartialEq
818 // (ultimately because io::Error does not)
819 match revlog
820 .rev_from_node(NodePrefix::from_hex("00").unwrap())
821 .expect_err("Expected to give AmbiguousPrefix error")
822 {
823 RevlogError::AmbiguousPrefix => (),
824 e => {
825 panic!("Got another error than AmbiguousPrefix: {:?}", e);
743 826 }
827 };
828 }
829 }
@@ -112,7 +112,10 b" issetuptools = os.name == 'nt' or 'FORCE"
112 112 if issetuptools:
113 113 from setuptools import setup
114 114 else:
115 try:
115 116 from distutils.core import setup
117 except ModuleNotFoundError:
118 from setuptools import setup
116 119 from distutils.ccompiler import new_compiler
117 120 from distutils.core import Command, Extension
118 121 from distutils.dist import Distribution
@@ -3,12 +3,11 b''
3 3 """dummy SMTP server for use in tests"""
4 4
5 5
6 import asyncore
7 6 import optparse
8 import smtpd
7 import os
8 import socket
9 9 import ssl
10 10 import sys
11 import traceback
12 11
13 12 from mercurial import (
14 13 pycompat,
@@ -18,52 +17,95 b' from mercurial import ('
18 17 )
19 18
20 19
20 if os.environ.get('HGIPV6', '0') == '1':
21 family = socket.AF_INET6
22 else:
23 family = socket.AF_INET
24
25
21 26 def log(msg):
22 27 sys.stdout.write(msg)
23 28 sys.stdout.flush()
24 29
25 30
26 class dummysmtpserver(smtpd.SMTPServer):
27 def __init__(self, localaddr):
28 smtpd.SMTPServer.__init__(self, localaddr, remoteaddr=None)
31 def mocksmtpserversession(conn, addr):
32 conn.send(b'220 smtp.example.com ESMTP\r\n')
33
34 line = conn.recv(1024)
35 if not line.lower().startswith(b'ehlo '):
36 log('no hello: %s\n' % line)
37 return
38
39 conn.send(b'250 Hello\r\n')
29 40
30 def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
31 log('%s from=%s to=%s\n' % (peer[0], mailfrom, ', '.join(rcpttos)))
41 line = conn.recv(1024)
42 if not line.lower().startswith(b'mail from:'):
43 log('no mail from: %s\n' % line)
44 return
45 mailfrom = line[10:].decode().rstrip()
46 if mailfrom.startswith('<') and mailfrom.endswith('>'):
47 mailfrom = mailfrom[1:-1]
48
49 conn.send(b'250 Ok\r\n')
32 50
33 def handle_error(self):
34 # On Windows, a bad SSL connection sometimes generates a WSAECONNRESET.
35 # The default handler will shutdown this server, and then both the
36 # current connection and subsequent ones fail on the client side with
37 # "No connection could be made because the target machine actively
38 # refused it". If we eat the error, then the client properly aborts in
39 # the expected way, and the server is available for subsequent requests.
40 traceback.print_exc()
51 rcpttos = []
52 while True:
53 line = conn.recv(1024)
54 if not line.lower().startswith(b'rcpt to:'):
55 break
56 rcptto = line[8:].decode().rstrip()
57 if rcptto.startswith('<') and rcptto.endswith('>'):
58 rcptto = rcptto[1:-1]
59 rcpttos.append(rcptto)
60
61 conn.send(b'250 Ok\r\n')
62
63 if not line.lower().strip() == b'data':
64 log('no rcpt to or data: %s' % line)
65
66 conn.send(b'354 Go ahead\r\n')
67
68 data = b''
69 while True:
70 line = conn.recv(1024)
71 if not line:
72 log('connection closed before end of data')
73 break
74 data += line
75 if data.endswith(b'\r\n.\r\n'):
76 data = data[:-5]
77 break
78
79 conn.send(b'250 Ok\r\n')
80
81 log(
82 '%s from=%s to=%s\n%s\n'
83 % (addr[0], mailfrom, ', '.join(rcpttos), data.decode())
84 )
41 85
42 86
43 class dummysmtpsecureserver(dummysmtpserver):
44 def __init__(self, localaddr, certfile):
45 dummysmtpserver.__init__(self, localaddr)
46 self._certfile = certfile
47
48 def handle_accept(self):
49 pair = self.accept()
50 if not pair:
51 return
52 conn, addr = pair
87 def run(host, port, certificate):
53 88 ui = uimod.ui.load()
89 with socket.socket(family, socket.SOCK_STREAM) as s:
90 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
91 s.bind((host, port))
92 # log('listening at %s:%d\n' % (host, port))
93 s.listen(1)
54 94 try:
55 # wrap_socket() would block, but we don't care
56 conn = sslutil.wrapserversocket(conn, ui, certfile=self._certfile)
57 except ssl.SSLError:
58 log('%s ssl error\n' % addr[0])
95 while True:
96 conn, addr = s.accept()
97 if certificate:
98 try:
99 conn = sslutil.wrapserversocket(
100 conn, ui, certfile=certificate
101 )
102 except ssl.SSLError as e:
103 log('%s ssl error: %s\n' % (addr[0], e))
59 104 conn.close()
60 return
61 smtpd.SMTPChannel(self, conn, addr)
62
63
64 def run():
65 try:
66 asyncore.loop()
105 continue
106 log("connection from %s:%s\n" % addr)
107 mocksmtpserversession(conn, addr)
108 conn.close()
67 109 except KeyboardInterrupt:
68 110 pass
69 111
@@ -93,26 +135,18 b' def main():'
93 135 op.add_option('--pid-file', metavar='FILE')
94 136 op.add_option('--tls', choices=['none', 'smtps'], default='none')
95 137 op.add_option('--certificate', metavar='FILE')
138 op.add_option('--logfile', metavar='FILE')
96 139
97 140 opts, args = op.parse_args()
98 if opts.tls == 'smtps' and not opts.certificate:
99 op.error('--certificate must be specified')
100
101 addr = (opts.address, opts.port)
102
103 def init():
104 if opts.tls == 'none':
105 dummysmtpserver(addr)
106 else:
107 dummysmtpsecureserver(addr, opts.certificate)
108 log('listening at %s:%d\n' % addr)
141 if (opts.tls == 'smtps') != bool(opts.certificate):
142 op.error('--certificate must be specified with --tls=smtps')
109 143
110 144 server.runservice(
111 145 bytesvars(opts),
112 initfn=init,
113 runfn=run,
146 runfn=lambda: run(opts.address, opts.port, opts.certificate),
114 147 runargs=[pycompat.sysexecutable, pycompat.fsencode(__file__)]
115 148 + pycompat.sysargv[1:],
149 logfile=opts.logfile,
116 150 )
117 151
118 152
@@ -69,5 +69,5 b' ls_l() {'
69 69 }
70 70
71 71 identifyrflcaps() {
72 xargs -n 1 echo | egrep '(remotefilelog|getflogheads|getfile)' | sort
72 xargs -n 1 echo | grep -E '(remotefilelog|getflogheads|getfile)' | sort
73 73 }
@@ -51,12 +51,12 b' hg subrepos are shared into existence on'
51 51 $ hg -R clone1 update -C tip
52 52 cloning subrepo subrepo from $TESTTMP/test/subrepo
53 53 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
54 $ find share2 | egrep 'sharedpath|00.+\.i' | sort
54 $ find share2 | grep -E 'sharedpath|00.+\.i' | sort
55 55 share2/.hg/sharedpath
56 56 share2/subrepo/.hg/sharedpath
57 57 $ hg -R share2 unshare
58 58 unsharing subrepo 'subrepo'
59 $ find share2 | egrep 'sharedpath|00.+\.i' | sort
59 $ find share2 | grep -E 'sharedpath|00.+\.i' | sort
60 60 share2/.hg/00changelog.i
61 61 share2/.hg/sharedpath.old
62 62 share2/.hg/store/00changelog.i
@@ -566,7 +566,7 b' old file -- date clamped to 1980'
566 566 $ hg add old
567 567 $ hg commit -m old
568 568 $ hg archive ../old.zip
569 $ unzip -l ../old.zip | grep -v -- ----- | egrep -v files$
569 $ unzip -l ../old.zip | grep -v -- ----- | grep -E -v files$
570 570 Archive: ../old.zip
571 571 \s*Length.* (re)
572 572 *172*80*00:00*old/.hg_archival.txt (glob)
@@ -57,7 +57,7 b' another bad extension'
57 57
58 58 show traceback
59 59
60 $ hg -q help help --traceback 2>&1 | egrep ' extension|^Exception|Traceback|ImportError|ModuleNotFound'
60 $ hg -q help help --traceback 2>&1 | grep -E ' extension|^Exception|Traceback|ImportError|ModuleNotFound'
61 61 *** failed to import extension "badext" from $TESTTMP/badext.py: bit bucket overflow
62 62 Traceback (most recent call last):
63 63 Exception: bit bucket overflow
@@ -88,7 +88,7 b' show traceback for ImportError of hgext.'
88 88 $ (hg help help --traceback --debug --config devel.debug.extensions=yes 2>&1) \
89 89 > | grep -v '^ ' \
90 90 > | filterlog \
91 > | egrep 'extension..[^p]|^Exception|Traceback|ImportError|^YYYY|not import|ModuleNotFound'
91 > | grep -E 'extension..[^p]|^Exception|Traceback|ImportError|^YYYY|not import|ModuleNotFound'
92 92 YYYY/MM/DD HH:MM:SS (PID)> loading extensions
93 93 YYYY/MM/DD HH:MM:SS (PID)> - processing 5 entries
94 94 YYYY/MM/DD HH:MM:SS (PID)> - loading extension: gpg
@@ -393,7 +393,7 b" a '*' entry in blackbox.track is interpr"
393 393 > EOF
394 394 (only look for entries with specific logged sources, otherwise this test is
395 395 pretty brittle)
396 $ hg blackbox | egrep '\[command(finish)?\]'
396 $ hg blackbox | grep -E '\[command(finish)?\]'
397 397 1970-01-01 00:00:00.000 bob @0000000000000000000000000000000000000000 (5000) [commandfinish]> --config *blackbox.track=* --config *blackbox.logsource=True* init track_star exited 0 after * seconds (glob)
398 398 1970-01-01 00:00:00.000 bob @0000000000000000000000000000000000000000 (5000) [command]> blackbox
399 399 $ cd $TESTTMP
@@ -230,17 +230,17 b' test shelving'
230 230 make the bookmark move by updating it on a, and then pulling with a local change
231 231 # add a commit to a
232 232 $ cd ../a
233 $ hg up -C X |fgrep "activating bookmark X"
233 $ hg up -C X |grep -F "activating bookmark X"
234 234 (activating bookmark X)
235 235 # go back to b, and check out X
236 236 $ cd ../b
237 $ hg up -C X |fgrep "activating bookmark X"
237 $ hg up -C X |grep -F "activating bookmark X"
238 238 (activating bookmark X)
239 239 # update and push from a
240 240 $ make_changes ../a
241 241 created new head
242 242 $ echo "more" >> test
243 $ hg pull -u 2>&1 | fgrep -v TESTTMP| fgrep -v "searching for changes" | fgrep -v adding
243 $ hg pull -u 2>&1 | grep -F -v TESTTMP| grep -F -v "searching for changes" | grep -F -v adding
244 244 pulling from $TESTTMP/a
245 245 updating bookmark X
246 246 added 1 changesets with 0 changes to 0 files (+1 heads)
@@ -70,7 +70,7 b' by default, system() should be redirecte'
70 70
71 71 $ touch foo
72 72 $ CHGDEBUG= HGEDITOR=cat chg ci -Am channeled --edit 2>&1 \
73 > | egrep "HG:|run 'cat"
73 > | grep -E "HG:|run 'cat"
74 74 chg: debug: * run 'cat "*"' at '$TESTTMP/editor' (glob)
75 75 HG: Enter commit message. Lines beginning with 'HG:' are removed.
76 76 HG: Leave message empty to abort commit.
@@ -84,7 +84,7 b' but no redirection should be made if out'
84 84 $ touch bar
85 85 $ CHGDEBUG= HGEDITOR=cat chg ci -Am bufferred --edit \
86 86 > --config extensions.pushbuffer="$TESTTMP/pushbuffer.py" 2>&1 \
87 > | egrep "HG:|run 'cat"
87 > | grep -E "HG:|run 'cat"
88 88 [1]
89 89
90 90 check that commit commands succeeded:
@@ -237,14 +237,14 b' isolate socket directory for stable resu'
237 237
238 238 warm up server:
239 239
240 $ CHGDEBUG= chg log 2>&1 | egrep 'instruction|start'
240 $ CHGDEBUG= chg log 2>&1 | grep -E 'instruction|start'
241 241 chg: debug: * start cmdserver at $TESTTMP/extreload/chgsock/server.* (glob)
242 242
243 243 new server should be started if extension modified:
244 244
245 245 $ sleep 1
246 246 $ touch dummyext.py
247 $ CHGDEBUG= chg log 2>&1 | egrep 'instruction|start'
247 $ CHGDEBUG= chg log 2>&1 | grep -E 'instruction|start'
248 248 chg: debug: * instruction: unlink $TESTTMP/extreload/chgsock/server-* (glob)
249 249 chg: debug: * instruction: reconnect (glob)
250 250 chg: debug: * start cmdserver at $TESTTMP/extreload/chgsock/server.* (glob)
@@ -252,7 +252,7 b' new server should be started if extensio'
252 252 old server will shut down, while new server should still be reachable:
253 253
254 254 $ sleep 2
255 $ CHGDEBUG= chg log 2>&1 | (egrep 'instruction|start' || true)
255 $ CHGDEBUG= chg log 2>&1 | (grep -E 'instruction|start' || true)
256 256
257 257 socket file should never be unlinked by old server:
258 258 (simulates unowned socket by updating mtime, which makes sure server exits
@@ -268,7 +268,7 b' at polling cycle)'
268 268 since no server is reachable from socket file, new server should be started:
269 269 (this test makes sure that old server shut down automatically)
270 270
271 $ CHGDEBUG= chg log 2>&1 | egrep 'instruction|start'
271 $ CHGDEBUG= chg log 2>&1 | grep -E 'instruction|start'
272 272 chg: debug: * start cmdserver at $TESTTMP/extreload/chgsock/server.* (glob)
273 273
274 274 shut down servers and restore environment:
@@ -495,7 +495,7 b' share the same server'
495 495 > }
496 496 $ newchg() {
497 497 > chg --kill-chg-daemon
498 > filteredchg "$@" | egrep -v 'start cmdserver' || true
498 > filteredchg "$@" | grep -E -v 'start cmdserver' || true
499 499 > }
500 500 (--profile isn't permanently on just because it was specified when chg was
501 501 started)
@@ -561,12 +561,12 b' If CHGHG is not set, chg will set it bef'
561 561 $ hg --kill-chg-daemon
562 562 $ HG=$CHGHG CHGHG= CHGDEBUG= hg debugshell -c \
563 563 > 'ui.write(b"CHGHG=%s\n" % ui.environ.get(b"CHGHG"))' 2>&1 \
564 > | egrep 'CHGHG|start'
564 > | grep -E 'CHGHG|start'
565 565 chg: debug: * start cmdserver at * (glob)
566 566 CHGHG=/*/install/bin/hg (glob)
567 567
568 568 Running the same command a second time shouldn't spawn a new command server.
569 569 $ HG=$CHGHG CHGHG= CHGDEBUG= hg debugshell -c \
570 570 > 'ui.write(b"CHGHG=%s\n" % ui.environ.get(b"CHGHG"))' 2>&1 \
571 > | egrep 'CHGHG|start'
571 > | grep -E 'CHGHG|start'
572 572 CHGHG=/*/install/bin/hg (glob)
@@ -12,8 +12,6 b' initialize repository'
12 12 $ cat >hgweb.cgi <<HGWEB
13 13 > #
14 14 > # An example CGI script to use hgweb, edit as necessary
15 > import cgitb
16 > cgitb.enable()
17 15 > from mercurial import demandimport; demandimport.enable()
18 16 > from mercurial.hgweb import hgweb
19 17 > from mercurial.hgweb import wsgicgi
@@ -245,7 +245,7 b' The resulting clone should not use share'
245 245
246 246 $ hg clone --quiet --stream -U http://localhost:$HGPORT clone-from-share
247 247 $ hg -R clone-from-share verify -q
248 $ hg debugrequires -R clone-from-share | egrep 'share$'
248 $ hg debugrequires -R clone-from-share | grep -E 'share$'
249 249 [1]
250 250
251 251 $ killdaemons.py
@@ -714,7 +714,7 b' Test clone from the repository in (emula'
714 714 $ hg -R src commit -m '#0'
715 715 $ hg -R src log -q
716 716 0:e1bab28bca43
717 $ hg -R src debugrevlog -c | egrep 'format|flags'
717 $ hg -R src debugrevlog -c | grep -E 'format|flags'
718 718 format : 0
719 719 flags : (none)
720 720 $ hg root -R src -T json | sed 's|\\\\|\\|g'
@@ -10,7 +10,6 b' initial setup'
10 10 >
11 11 > [clone-bundles]
12 12 > auto-generate.on-change = yes
13 > auto-generate.formats = v2
14 13 > upload-command = cp "\$HGCB_BUNDLE_PATH" "$TESTTMP"/final-upload/
15 14 > delete-command = rm -f "$TESTTMP/final-upload/\$HGCB_BASENAME"
16 15 > url-template = file://$TESTTMP/final-upload/{basename}
@@ -25,9 +24,36 b' initial setup'
25 24 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
26 25 $ cd client
27 26
27 Test bundles are not generated if formats are not given
28 =======================================================
29
30 $ touch noformats
31 $ hg -q commit -A -m 'add noformats'
32 $ hg push
33 pushing to $TESTTMP/server
34 searching for changes
35 clone-bundle auto-generate enabled, but no formats specified: disabling generation
36 adding changesets
37 adding manifests
38 adding file changes
39 added 1 changesets with 1 changes to 1 files
40 $ test -f ../server/.hg/clonebundles.manifest
41 [1]
42 $ hg debugstrip -r tip
43 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
44 saved backup bundle to $TESTTMP/client/.hg/strip-backup/4823cdad4f38-4b2c3b65-backup.hg
45 $ hg --cwd ../server debugstrip -r tip
46 saved backup bundle to $TESTTMP/server/.hg/strip-backup/4823cdad4f38-4b2c3b65-backup.hg
47 clone-bundle auto-generate enabled, but no formats specified: disabling generation
48 clone-bundle auto-generate enabled, but no formats specified: disabling generation
49
28 50 Test bundles are generated on push
29 51 ==================================
30 52
53 $ cat >> ../server/.hg/hgrc << EOF
54 > [clone-bundles]
55 > auto-generate.formats = v2
56 > EOF
31 57 $ touch foo
32 58 $ hg -q commit -A -m 'add foo'
33 59 $ touch bar
@@ -36,7 +36,7 b' Tests about metadataonlyctx'
36 36 date: Thu Jan 01 00:00:00 1970 +0000
37 37 summary: Changed
38 38
39 $ hg --config extensions.metaedit=$TESTTMP/metaedit.py metaedit 'parents=0' 2>&1 | egrep '^RuntimeError'
39 $ hg --config extensions.metaedit=$TESTTMP/metaedit.py metaedit 'parents=0' 2>&1 | grep -E '^RuntimeError'
40 40 RuntimeError: can't reuse the manifest: its p1 doesn't match the new ctx p1
41 41
42 42 $ hg --config extensions.metaedit=$TESTTMP/metaedit.py metaedit 'user=foo <foo@example.com>'
@@ -408,7 +408,7 b' test profile-benchmark option'
408 408
409 409 Function to check that statprof ran
410 410 $ statprofran () {
411 > egrep 'Sample count:|No samples recorded' > /dev/null
411 > grep -E 'Sample count:|No samples recorded' > /dev/null
412 412 > }
413 413 $ hg perfdiscovery . --config perf.stub=no --config perf.run-limits='0.000000001-1' --config perf.profile-benchmark=yes 2>&1 | statprofran
414 414
@@ -108,7 +108,7 b' merge file6 from trunk to v1_2'
108 108
109 109 cvs rlog output
110 110
111 $ cvscall -q rlog proj | egrep '^(RCS file|revision)'
111 $ cvscall -q rlog proj | grep -E '^(RCS file|revision)'
112 112 RCS file: $TESTTMP/cvsrepo/proj/file1,v
113 113 revision 1.1
114 114 RCS file: $TESTTMP/cvsrepo/proj/Attic/file2,v
@@ -1,7 +1,7 b''
1 1 #require svn svn-bindings
2 2
3 3 $ filter_svn_output () {
4 > egrep -v 'Committing|Updating|(^$)' | sed -e 's/done$//' || true
4 > grep -E -v 'Committing|Updating|(^$)' | sed -e 's/done$//' || true
5 5 > }
6 6
7 7 $ cat <<EOF >> $HGRCPATH
@@ -1,7 +1,7 b''
1 1 #require svn svn-bindings
2 2
3 3 $ filter_svn_output () {
4 > egrep -v 'Committing|Updating|(^$)' | sed -e 's/done$//' || true
4 > grep -E -v 'Committing|Updating|(^$)' | sed -e 's/done$//' || true
5 5 > }
6 6
7 7 $ cat >> $HGRCPATH <<EOF
@@ -1649,7 +1649,7 b' We upgrade a repository that is not usin'
1649 1649 > [format]
1650 1650 > exp-use-copies-side-data-changeset = yes
1651 1651 > EOF
1652 $ hg debugformat -v | egrep 'changelog-v2|revlog-v2|copies-sdc'
1652 $ hg debugformat -v | grep -E 'changelog-v2|revlog-v2|copies-sdc'
1653 1653 copies-sdc: no yes no
1654 1654 revlog-v2: no no no
1655 1655 changelog-v2: no yes no
@@ -1675,7 +1675,7 b' We upgrade a repository that is not usin'
1675 1675 > enabled=yes
1676 1676 > numcpus=8
1677 1677 > EOF
1678 $ hg debugformat -v | egrep 'changelog-v2|revlog-v2|copies-sdc'
1678 $ hg debugformat -v | grep -E 'changelog-v2|revlog-v2|copies-sdc'
1679 1679 copies-sdc: no yes no
1680 1680 revlog-v2: no no no
1681 1681 changelog-v2: no yes no
@@ -2919,14 +2919,14 b' In this case, the file hash from "f-2" i'
2919 2919
2920 2920 Details on this hash ordering pick:
2921 2921
2922 $ hg manifest --debug 'desc("g-1")' | egrep 'd$'
2922 $ hg manifest --debug 'desc("g-1")' | grep -E 'd$'
2923 2923 17ec97e605773eb44a117d1136b3849bcdc1924f 644 d (no-changeset !)
2924 2924 5cce88bf349f7c742bb440f2c53f81db9c294279 644 d (changeset !)
2925 2925 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("g-1")' d
2926 2926 A d
2927 2927 a (no-changeset no-compatibility !)
2928 2928
2929 $ hg manifest --debug 'desc("f-2")' | egrep 'd$'
2929 $ hg manifest --debug 'desc("f-2")' | grep -E 'd$'
2930 2930 7b79e2fe0c8924e0e598a82f048a7b024afa4d96 644 d (no-changeset !)
2931 2931 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
2932 2932 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("f-2")' d
@@ -32,13 +32,13 b' Check that copies are recorded correctly'
32 32 $ hg init repo
33 33 $ cd repo
34 34 #if sidedata
35 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
35 $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
36 36 format-variant repo config default
37 37 copies-sdc: yes yes no
38 38 revlog-v2: no no no
39 39 changelog-v2: yes yes no
40 40 #else
41 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
41 $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
42 42 format-variant repo config default
43 43 copies-sdc: no no no
44 44 revlog-v2: no no no
@@ -419,7 +419,7 b' Test upgrading/downgrading to sidedata s'
419 419
420 420 downgrading
421 421
422 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
422 $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
423 423 format-variant repo config default
424 424 copies-sdc: yes yes no
425 425 revlog-v2: no no no
@@ -445,7 +445,7 b' downgrading'
445 445 processed revlogs:
446 446 - changelog
447 447
448 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
448 $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
449 449 format-variant repo config default
450 450 copies-sdc: no no no
451 451 revlog-v2: no no no
@@ -470,7 +470,7 b' upgrading'
470 470 processed revlogs:
471 471 - changelog
472 472
473 $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
473 $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
474 474 format-variant repo config default
475 475 copies-sdc: yes yes no
476 476 revlog-v2: no no no
@@ -15,16 +15,16 b" Ensure debuild doesn't run the testsuite"
15 15 $ ls *.deb | grep -v 'dbg'
16 16 mercurial_*.deb (glob)
17 17 should have .so and .py
18 $ dpkg --contents mercurial_*.deb | egrep '(localrepo|parsers)'
18 $ dpkg --contents mercurial_*.deb | grep -E '(localrepo|parsers)'
19 19 * ./usr/lib/python3/dist-packages/mercurial/cext/parsers*.so (glob)
20 20 * ./usr/lib/python3/dist-packages/mercurial/localrepo.py (glob)
21 21 * ./usr/lib/python3/dist-packages/mercurial/pure/parsers.py (glob)
22 22 should have zsh completions
23 $ dpkg --contents mercurial_*.deb | egrep 'zsh.*[^/]$'
23 $ dpkg --contents mercurial_*.deb | grep -E 'zsh.*[^/]$'
24 24 * ./usr/share/zsh/vendor-completions/_hg (glob)
25 25 should have chg
26 $ dpkg --contents mercurial_*.deb | egrep 'chg$'
26 $ dpkg --contents mercurial_*.deb | grep -E 'chg$'
27 27 * ./usr/bin/chg (glob)
28 28 chg should come with a man page
29 $ dpkg --contents mercurial_*.deb | egrep 'man.*chg'
29 $ dpkg --contents mercurial_*.deb | grep -E 'man.*chg'
30 30 * ./usr/share/man/man1/chg.1.gz (glob)
@@ -576,7 +576,7 b' Test cache warming command'
576 576 Test debugcolor
577 577
578 578 #if no-windows
579 $ hg debugcolor --style --color always | egrep 'mode|style|log\.'
579 $ hg debugcolor --style --color always | grep -E 'mode|style|log\.'
580 580 color mode: 'ansi'
581 581 available style:
582 582 \x1b[0;33mlog.changeset\x1b[0m: \x1b[0;33myellow\x1b[0m (esc)
@@ -191,7 +191,7 b' Stripping from a transaction'
191 191 $ echo a > a
192 192 $ hg add a
193 193 $ hg commit -m a
194 $ hg stripintr 2>&1 | egrep -v '^(\*\*| )'
194 $ hg stripintr 2>&1 | grep -E -v '^(\*\*| )'
195 195 Traceback (most recent call last):
196 196 *ProgrammingError: cannot strip from inside a transaction (glob)
197 197
@@ -384,7 +384,7 b' Stripping from a transaction'
384 384
385 385 Test programming error failure:
386 386
387 $ hg buggytransaction 2>&1 | egrep -v '^ '
387 $ hg buggytransaction 2>&1 | grep -E -v '^ '
388 388 ** Unknown exception encountered with possibly-broken third-party extension "buggylocking" (version N/A)
389 389 ** which supports versions unknown of Mercurial.
390 390 ** Please disable "buggylocking" and try your action again.
@@ -396,7 +396,7 b' Test programming error failure:'
396 396 Traceback (most recent call last):
397 397 *ProgrammingError: transaction requires locking (glob)
398 398
399 $ hg programmingerror 2>&1 | egrep -v '^ '
399 $ hg programmingerror 2>&1 | grep -E -v '^ '
400 400 ** Unknown exception encountered with possibly-broken third-party extension "buggylocking" (version N/A)
401 401 ** which supports versions unknown of Mercurial.
402 402 ** Please disable "buggylocking" and try your action again.
@@ -10,8 +10,8 b' Set up a v1 repo'
10 10 $ hg init repo
11 11 $ cd repo
12 12 $ echo a > a
13 $ hg add a
14 $ hg commit -m a
13 $ touch file-with-somewhat-long-name-to-make-dirstate-v1-bigger-than-v2
14 $ hg commit -Aqm a
15 15 $ hg debugrequires | grep dirstate
16 16 [1]
17 17 $ ls -1 .hg/dirstate*
@@ -22,7 +22,7 b' Copy v1 dirstate'
22 22
23 23 Upgrade it to v2
24 24
25 $ hg debugupgraderepo -q --config format.use-dirstate-v2=1 --run | egrep 'added:|removed:'
25 $ hg debugupgraderepo -q --config format.use-dirstate-v2=1 --run | grep -E 'added:|removed:'
26 26 added: dirstate-v2
27 27 $ hg debugrequires | grep dirstate
28 28 dirstate-v2
@@ -22,10 +22,10 b' built using docker.'
22 22
23 23 main deb should have .so but no .py
24 24 $ ar x mercurial_*.deb
25 $ tar tf data.tar* | egrep '(localrepo|parsers)'
25 $ tar tf data.tar* | grep -E '(localrepo|parsers)'
26 26 ./usr/lib/python2.7/dist-packages/mercurial/parsers*.so (glob)
27 27 mercurial-common should have .py but no .so or .pyc
28 28 $ ar x mercurial-common_*.deb
29 $ tar tf data.tar* | egrep '(localrepo|parsers)'
29 $ tar tf data.tar* | grep -E '(localrepo|parsers)'
30 30 ./usr/lib/python2.7/dist-packages/mercurial/pure/parsers.py
31 31 ./usr/lib/python2.7/dist-packages/mercurial/localrepo.py
@@ -1375,7 +1375,7 b' accessed.'
1375 1375 throw external 1.0.0
1376 1376
1377 1377 No declared supported version, extension complains:
1378 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
1378 $ hg --config extensions.throw=throw.py throw 2>&1 | grep -E '^\*\*'
1379 1379 ** Unknown exception encountered with possibly-broken third-party extension "throw" 1.0.0
1380 1380 ** which supports versions unknown of Mercurial.
1381 1381 ** Please disable "throw" and try your action again.
@@ -1387,7 +1387,7 b' No declared supported version, extension'
1387 1387 empty declaration of supported version, extension complains (but doesn't choke if
1388 1388 the value is improperly a str instead of bytes):
1389 1389 $ echo "testedwith = ''" >> throw.py
1390 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
1390 $ hg --config extensions.throw=throw.py throw 2>&1 | grep -E '^\*\*'
1391 1391 ** Unknown exception encountered with possibly-broken third-party extension "throw" 1.0.0
1392 1392 ** which supports versions unknown of Mercurial.
1393 1393 ** Please disable "throw" and try your action again.
@@ -1401,7 +1401,7 b' improperly a str instead of bytes):'
1401 1401 $ echo 'buglink = "http://example.com/bts"' >> throw.py
1402 1402 $ rm -f throw.pyc throw.pyo
1403 1403 $ rm -Rf __pycache__
1404 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
1404 $ hg --config extensions.throw=throw.py throw 2>&1 | grep -E '^\*\*'
1405 1405 ** Unknown exception encountered with possibly-broken third-party extension "throw" 1.0.0
1406 1406 ** which supports versions unknown of Mercurial.
1407 1407 ** Please disable "throw" and try your action again.
@@ -1418,7 +1418,7 b' If the extensions declare outdated versi'
1418 1418 $ rm -f throw.pyc throw.pyo
1419 1419 $ rm -Rf __pycache__
1420 1420 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
1421 > throw 2>&1 | egrep '^\*\*'
1421 > throw 2>&1 | grep -E '^\*\*'
1422 1422 ** Unknown exception encountered with possibly-broken third-party extension "older" (version N/A)
1423 1423 ** which supports versions 1.9 of Mercurial.
1424 1424 ** Please disable "older" and try your action again.
@@ -1432,7 +1432,7 b' One extension only tested with older, on'
1432 1432 $ rm -f older.pyc older.pyo
1433 1433 $ rm -Rf __pycache__
1434 1434 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
1435 > throw 2>&1 | egrep '^\*\*'
1435 > throw 2>&1 | grep -E '^\*\*'
1436 1436 ** Unknown exception encountered with possibly-broken third-party extension "older" (version N/A)
1437 1437 ** which supports versions 1.9 of Mercurial.
1438 1438 ** Please disable "older" and try your action again.
@@ -1446,7 +1446,7 b' Older extension is tested with current v'
1446 1446 $ rm -f older.pyc older.pyo
1447 1447 $ rm -Rf __pycache__
1448 1448 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
1449 > throw 2>&1 | egrep '^\*\*'
1449 > throw 2>&1 | grep -E '^\*\*'
1450 1450 ** Unknown exception encountered with possibly-broken third-party extension "throw" 1.0.0
1451 1451 ** which supports versions 2.1 of Mercurial.
1452 1452 ** Please disable "throw" and try your action again.
@@ -1457,7 +1457,7 b' Older extension is tested with current v'
1457 1457
1458 1458 Ability to point to a different point
1459 1459 $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
1460 > --config ui.supportcontact='Your Local Goat Lenders' throw 2>&1 | egrep '^\*\*'
1460 > --config ui.supportcontact='Your Local Goat Lenders' throw 2>&1 | grep -E '^\*\*'
1461 1461 ** unknown exception encountered, please report by visiting
1462 1462 ** Your Local Goat Lenders
1463 1463 ** Python * (glob)
@@ -1472,7 +1472,7 b' Declare the version as supporting this h'
1472 1472 > fi
1473 1473 $ rm -f throw.pyc throw.pyo
1474 1474 $ rm -Rf __pycache__
1475 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
1475 $ hg --config extensions.throw=throw.py throw 2>&1 | grep -E '^\*\*'
1476 1476 ** unknown exception encountered, please report by visiting
1477 1477 ** https://mercurial-scm.org/wiki/BugTracker
1478 1478 ** Python * (glob)
@@ -1484,7 +1484,7 b' Patch version is ignored during compatib'
1484 1484 $ echo "util.version = lambda:b'3.2.2'" >> throw.py
1485 1485 $ rm -f throw.pyc throw.pyo
1486 1486 $ rm -Rf __pycache__
1487 $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
1487 $ hg --config extensions.throw=throw.py throw 2>&1 | grep -E '^\*\*'
1488 1488 ** unknown exception encountered, please report by visiting
1489 1489 ** https://mercurial-scm.org/wiki/BugTracker
1490 1490 ** Python * (glob)
@@ -1595,7 +1595,7 b' Refuse to load extensions with minimum v'
1595 1595 > util.version = lambda: b'3.6'
1596 1596 > minimumhgversion = b'3.7'
1597 1597 > EOF
1598 $ hg --config extensions.minversion=minversion2.py version 2>&1 | egrep '\(third'
1598 $ hg --config extensions.minversion=minversion2.py version 2>&1 | grep -E '\(third'
1599 1599 (third party extension minversion requires version 3.7 or newer of Mercurial (current: 3.6); disabling)
1600 1600
1601 1601 Can load version that is only off by point release
@@ -1605,7 +1605,7 b' Can load version that is only off by poi'
1605 1605 > util.version = lambda: b'3.6.1'
1606 1606 > minimumhgversion = b'3.6'
1607 1607 > EOF
1608 $ hg --config extensions.minversion=minversion3.py version 2>&1 | egrep '\(third'
1608 $ hg --config extensions.minversion=minversion3.py version 2>&1 | grep -E '\(third'
1609 1609 [1]
1610 1610
1611 1611 Can load minimum version identical to current
@@ -1615,7 +1615,7 b' Can load minimum version identical to cu'
1615 1615 > util.version = lambda: b'3.5'
1616 1616 > minimumhgversion = b'3.5'
1617 1617 > EOF
1618 $ hg --config extensions.minversion=minversion3.py version 2>&1 | egrep '\(third'
1618 $ hg --config extensions.minversion=minversion3.py version 2>&1 | grep -E '\(third'
1619 1619 [1]
1620 1620
1621 1621 Don't explode on py3 with a bad version number (both str vs bytes, and not enough
@@ -215,7 +215,7 b' Ensure the data got to the server OK'
215 215 raise error.Abort(msg)
216 216 mercurial.error.Abort: cannot register multiple processors on flag '0x8'.
217 217 *** failed to set up extension duplicate: cannot register multiple processors on flag '0x8'.
218 $ hg st 2>&1 | egrep 'cannot register multiple processors|flagprocessorext'
218 $ hg st 2>&1 | grep -E 'cannot register multiple processors|flagprocessorext'
219 219 File "*/tests/flagprocessorext.py", line *, in extsetup (glob)
220 220 mercurial.error.Abort: cannot register multiple processors on flag '0x8'.
221 221 *** failed to set up extension duplicate: cannot register multiple processors on flag '0x8'.
@@ -358,7 +358,7 b' Status should be consistent for both sys'
358 358 $ hg status
359 359 heads mismatch, rebuilding dagcache
360 360 M beta
361 $ git status | egrep -v '^$|^ \(use '
361 $ git status | grep -E -v '^$|^ \(use '
362 362 On branch master
363 363 Changes not staged for commit:
364 364 modified: beta
@@ -799,7 +799,7 b' Disabled extension gets suggested'
799 799
800 800 Checking that help adapts based on the config:
801 801
802 $ hg help diff --config ui.tweakdefaults=true | egrep -e '^ *(-g|config)'
802 $ hg help diff --config ui.tweakdefaults=true | grep -E -e '^ *(-g|config)'
803 803 -g --[no-]git use git extended diff format (default: on from
804 804 config)
805 805
@@ -1585,7 +1585,7 b' Help subsection:'
1585 1585 Show nested definitions
1586 1586 ("profiling.type"[break]"ls"[break]"stat"[break])
1587 1587
1588 $ hg help config.type | egrep '^$'|wc -l
1588 $ hg help config.type | grep -E '^$'|wc -l
1589 1589 \s*3 (re)
1590 1590
1591 1591 $ hg help config.profiling.type.ls
@@ -1598,7 +1598,7 b' Show nested definitions'
1598 1598
1599 1599 Separate sections from subsections
1600 1600
1601 $ hg help config.format | egrep '^ ("|-)|^\s*$' | uniq
1601 $ hg help config.format | grep -E '^ ("|-)|^\s*$' | uniq
1602 1602 "format"
1603 1603 --------
1604 1604
@@ -1660,7 +1660,7 b' note to use help -c for general hg help '
1660 1660
1661 1661 Test templating help
1662 1662
1663 $ hg help templating | egrep '(desc|diffstat|firstline|nonempty) '
1663 $ hg help templating | grep -E '(desc|diffstat|firstline|nonempty) '
1664 1664 desc String. The text of the changeset description.
1665 1665 diffstat String. Statistics of changes with the following format:
1666 1666 firstline Any text. Returns the first line of text.
@@ -1701,12 +1701,12 b' Test help hooks'
1701 1701
1702 1702 help -c should only show debug --debug
1703 1703
1704 $ hg help -c --debug|egrep debug|wc -l|egrep '^\s*0\s*$'
1704 $ hg help -c --debug|grep -E debug|wc -l|grep -E '^\s*0\s*$'
1705 1705 [1]
1706 1706
1707 1707 help -c should only show deprecated for -v
1708 1708
1709 $ hg help -c -v|egrep DEPRECATED|wc -l|egrep '^\s*0\s*$'
1709 $ hg help -c -v|grep -E DEPRECATED|wc -l|grep -E '^\s*0\s*$'
1710 1710 [1]
1711 1711
1712 1712 Test -s / --system
@@ -1720,11 +1720,11 b' Test -s / --system'
1720 1720
1721 1721 Test -e / -c / -k combinations
1722 1722
1723 $ hg help -c|egrep '^[A-Z].*:|^ debug'
1723 $ hg help -c|grep -E '^[A-Z].*:|^ debug'
1724 1724 Commands:
1725 $ hg help -e|egrep '^[A-Z].*:|^ debug'
1725 $ hg help -e|grep -E '^[A-Z].*:|^ debug'
1726 1726 Extensions:
1727 $ hg help -k|egrep '^[A-Z].*:|^ debug'
1727 $ hg help -k|grep -E '^[A-Z].*:|^ debug'
1728 1728 Topics:
1729 1729 Commands:
1730 1730 Extensions:
@@ -1735,11 +1735,11 b' Test -e / -c / -k combinations'
1735 1735 [10]
1736 1736 $ hg help -e schemes |head -1
1737 1737 schemes extension - extend schemes with shortcuts to repository swarms
1738 $ hg help -c -k dates |egrep '^(Topics|Extensions|Commands):'
1738 $ hg help -c -k dates |grep -E '^(Topics|Extensions|Commands):'
1739 1739 Commands:
1740 $ hg help -e -k a |egrep '^(Topics|Extensions|Commands):'
1740 $ hg help -e -k a |grep -E '^(Topics|Extensions|Commands):'
1741 1741 Extensions:
1742 $ hg help -e -c -k date |egrep '^(Topics|Extensions|Commands):'
1742 $ hg help -e -c -k date |grep -E '^(Topics|Extensions|Commands):'
1743 1743 Extensions:
1744 1744 Commands:
1745 1745 $ hg help -c commit > /dev/null
@@ -69,7 +69,7 b' repo page should send CSP by default, in'
69 69
70 70 nonce should not be added to html if CSP doesn't use it
71 71
72 $ get-with-headers.py localhost:$HGPORT repo1/graph/tip | egrep 'content-security-policy|<script'
72 $ get-with-headers.py localhost:$HGPORT repo1/graph/tip | grep -E 'content-security-policy|<script'
73 73 <script type="text/javascript" src="/repo1/static/mercurial.js"></script>
74 74 <script type="text/javascript">
75 75 <script type="text/javascript">
@@ -104,7 +104,7 b' repo page should have nonce, no ETag'
104 104
105 105 nonce should be added to html when used
106 106
107 $ get-with-headers.py localhost:$HGPORT repo1/graph/tip content-security-policy | egrep 'content-security-policy|<script'
107 $ get-with-headers.py localhost:$HGPORT repo1/graph/tip content-security-policy | grep -E 'content-security-policy|<script'
108 108 content-security-policy: image-src 'self'; script-src https://example.com/ 'nonce-*' (glob)
109 109 <script type="text/javascript" src="/repo1/static/mercurial.js"></script>
110 110 <script type="text/javascript" nonce="*"> (glob)
@@ -125,7 +125,7 b' static page sends CSP'
125 125
126 126 nonce included in <script> and headers
127 127
128 $ get-with-headers.py localhost:$HGPORT graph/tip content-security-policy | egrep 'content-security-policy|<script'
128 $ get-with-headers.py localhost:$HGPORT graph/tip content-security-policy | grep -E 'content-security-policy|<script'
129 129 content-security-policy: image-src 'self'; script-src https://example.com/ 'nonce-*' (glob)
130 130 <script type="text/javascript" src="/static/mercurial.js"></script>
131 131 <script type="text/javascript" nonce="*"> (glob)
@@ -318,7 +318,7 b' set up hgweb with git diffs + noprefix'
318 318 patch header and diffstat
319 319
320 320 $ get-with-headers.py localhost:$HGPORT 'rev/0' \
321 > | egrep 'files changed|---|\+\+\+'
321 > | grep -E 'files changed|---|\+\+\+'
322 322 2 files changed, 2 insertions(+), 0 deletions(-)
323 323 <span id="l1.2" class="minusline">--- /dev/null</span><a href="#l1.2"></a>
324 324 <span id="l1.3" class="plusline">+++ a</span><a href="#l1.3"></a>
@@ -37,7 +37,7 b' Set up the repo'
37 37
38 38 (De)referencing symbolic revisions (paper)
39 39
40 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=paper' | egrep $REVLINKS
40 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=paper' | grep -E $REVLINKS
41 41 <li><a href="/graph/tip?style=paper">graph</a></li>
42 42 <li><a href="/rev/tip?style=paper">changeset</a></li>
43 43 <li><a href="/file/tip?style=paper">browse</a></li>
@@ -52,7 +52,7 b' Set up the repo'
52 52 <a href="/shortlog/tip?revcount=120&style=paper">more</a>
53 53 | rev 2: <a href="/shortlog/43c799df6e75?style=paper">(0)</a> <a href="/shortlog/tip?style=paper">tip</a>
54 54
55 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=paper' | egrep $REVLINKS
55 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=paper' | grep -E $REVLINKS
56 56 <li><a href="/shortlog/tip?style=paper">log</a></li>
57 57 <li><a href="/rev/tip?style=paper">changeset</a></li>
58 58 <li><a href="/file/tip?style=paper">browse</a></li>
@@ -67,7 +67,7 b' Set up the repo'
67 67 <a href="/graph/tip?revcount=120&style=paper">more</a>
68 68 | rev 2: <a href="/graph/43c799df6e75?style=paper">(0)</a> <a href="/graph/tip?style=paper">tip</a>
69 69
70 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=paper' | egrep $REVLINKS
70 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=paper' | grep -E $REVLINKS
71 71 <li><a href="/shortlog/tip?style=paper">log</a></li>
72 72 <li><a href="/graph/tip?style=paper">graph</a></li>
73 73 <li><a href="/rev/tip?style=paper">changeset</a></li>
@@ -77,24 +77,24 b' Set up the repo'
77 77 <a href="/file/tip/dir/?style=paper">
78 78 <a href="/file/tip/foo?style=paper">
79 79
80 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=paper' | egrep $REVLINKS
80 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=paper' | grep -E $REVLINKS
81 81 <a href="/shortlog/default?style=paper" class="open">
82 82 <a href="/shortlog/9d8c40cba617?style=paper" class="open">
83 83
84 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=paper' | egrep $REVLINKS
84 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=paper' | grep -E $REVLINKS
85 85 <a href="/rev/tip?style=paper">
86 86 <a href="/rev/9d8c40cba617?style=paper">
87 87
88 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=paper' | egrep $REVLINKS
88 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=paper' | grep -E $REVLINKS
89 89 <a href="/rev/xyzzy?style=paper">
90 90 <a href="/rev/a7c1559b7bba?style=paper">
91 91
92 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=paper&rev=all()' | egrep $REVLINKS
92 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=paper&rev=all()' | grep -E $REVLINKS
93 93 <a href="/rev/9d8c40cba617?style=paper">third</a>
94 94 <a href="/rev/a7c1559b7bba?style=paper">second</a>
95 95 <a href="/rev/43c799df6e75?style=paper">first</a>
96 96
97 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=paper' | egrep $REVLINKS
97 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=paper' | grep -E $REVLINKS
98 98 <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
99 99 <li><a href="/graph/xyzzy?style=paper">graph</a></li>
100 100 <li><a href="/raw-rev/xyzzy?style=paper">raw</a></li>
@@ -105,7 +105,7 b' Set up the repo'
105 105 <td class="author"> <a href="/rev/9d8c40cba617?style=paper">9d8c40cba617</a></td>
106 106 <td class="files"><a href="/file/a7c1559b7bba/foo?style=paper">foo</a> </td>
107 107
108 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=paper' | egrep $REVLINKS
108 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=paper' | grep -E $REVLINKS
109 109 <li><a href="/graph/xyzzy?style=paper">graph</a></li>
110 110 <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
111 111 <li><a href="/file/xyzzy?style=paper">browse</a></li>
@@ -119,7 +119,7 b' Set up the repo'
119 119 <a href="/shortlog/xyzzy?revcount=120&style=paper">more</a>
120 120 | rev 1: <a href="/shortlog/43c799df6e75?style=paper">(0)</a> <a href="/shortlog/tip?style=paper">tip</a>
121 121
122 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=paper' | egrep $REVLINKS
122 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=paper' | grep -E $REVLINKS
123 123 <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
124 124 <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
125 125 <li><a href="/file/xyzzy?style=paper">browse</a></li>
@@ -133,7 +133,7 b' Set up the repo'
133 133 <a href="/graph/xyzzy?revcount=120&style=paper">more</a>
134 134 | rev 1: <a href="/graph/43c799df6e75?style=paper">(0)</a> <a href="/graph/tip?style=paper">tip</a>
135 135
136 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=paper' | egrep $REVLINKS
136 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=paper' | grep -E $REVLINKS
137 137 <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
138 138 <li><a href="/graph/xyzzy?style=paper">graph</a></li>
139 139 <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
@@ -143,7 +143,7 b' Set up the repo'
143 143 <a href="/file/xyzzy/dir/?style=paper">
144 144 <a href="/file/xyzzy/foo?style=paper">
145 145
146 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=paper' | egrep $REVLINKS
146 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=paper' | grep -E $REVLINKS
147 147 <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
148 148 <li><a href="/graph/xyzzy?style=paper">graph</a></li>
149 149 <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
@@ -158,7 +158,7 b' Set up the repo'
158 158 <td class="author"><a href="/file/43c799df6e75/foo?style=paper">43c799df6e75</a> </td>
159 159 <td class="author"><a href="/file/9d8c40cba617/foo?style=paper">9d8c40cba617</a> </td>
160 160
161 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=paper' | egrep $REVLINKS
161 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=paper' | grep -E $REVLINKS
162 162 href="/atom-log/tip/foo" title="Atom feed for test:foo" />
163 163 href="/rss-log/tip/foo" title="RSS feed for test:foo" />
164 164 <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
@@ -181,7 +181,7 b' Set up the repo'
181 181 <a href="/log/xyzzy/foo?revcount=120&style=paper">more</a>
182 182 | <a href="/log/43c799df6e75/foo?style=paper">(0)</a> <a href="/log/tip/foo?style=paper">tip</a>
183 183
184 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=paper' | egrep $REVLINKS
184 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=paper' | grep -E $REVLINKS
185 185 <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
186 186 <li><a href="/graph/xyzzy?style=paper">graph</a></li>
187 187 <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
@@ -205,7 +205,7 b' Set up the repo'
205 205 <a href="/diff/a7c1559b7bba/foo?style=paper">diff</a>
206 206 <a href="/rev/a7c1559b7bba?style=paper">changeset</a>
207 207
208 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=paper' | egrep $REVLINKS
208 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=paper' | grep -E $REVLINKS
209 209 <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
210 210 <li><a href="/graph/xyzzy?style=paper">graph</a></li>
211 211 <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
@@ -220,7 +220,7 b' Set up the repo'
220 220 <td><a href="/file/43c799df6e75/foo?style=paper">43c799df6e75</a> </td>
221 221 <td><a href="/file/9d8c40cba617/foo?style=paper">9d8c40cba617</a> </td>
222 222
223 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=paper' | egrep $REVLINKS
223 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=paper' | grep -E $REVLINKS
224 224 <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
225 225 <li><a href="/graph/xyzzy?style=paper">graph</a></li>
226 226 <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
@@ -237,7 +237,7 b' Set up the repo'
237 237
238 238 (De)referencing symbolic revisions (coal)
239 239
240 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=coal' | egrep $REVLINKS
240 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=coal' | grep -E $REVLINKS
241 241 <li><a href="/graph/tip?style=coal">graph</a></li>
242 242 <li><a href="/rev/tip?style=coal">changeset</a></li>
243 243 <li><a href="/file/tip?style=coal">browse</a></li>
@@ -252,7 +252,7 b' Set up the repo'
252 252 <a href="/shortlog/tip?revcount=120&style=coal">more</a>
253 253 | rev 2: <a href="/shortlog/43c799df6e75?style=coal">(0)</a> <a href="/shortlog/tip?style=coal">tip</a>
254 254
255 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=coal' | egrep $REVLINKS
255 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=coal' | grep -E $REVLINKS
256 256 <li><a href="/shortlog/tip?style=coal">log</a></li>
257 257 <li><a href="/rev/tip?style=coal">changeset</a></li>
258 258 <li><a href="/file/tip?style=coal">browse</a></li>
@@ -267,7 +267,7 b' Set up the repo'
267 267 <a href="/graph/tip?revcount=120&style=coal">more</a>
268 268 | rev 2: <a href="/graph/43c799df6e75?style=coal">(0)</a> <a href="/graph/tip?style=coal">tip</a>
269 269
270 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=coal' | egrep $REVLINKS
270 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=coal' | grep -E $REVLINKS
271 271 <li><a href="/shortlog/tip?style=coal">log</a></li>
272 272 <li><a href="/graph/tip?style=coal">graph</a></li>
273 273 <li><a href="/rev/tip?style=coal">changeset</a></li>
@@ -277,24 +277,24 b' Set up the repo'
277 277 <a href="/file/tip/dir/?style=coal">
278 278 <a href="/file/tip/foo?style=coal">
279 279
280 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=coal' | egrep $REVLINKS
280 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=coal' | grep -E $REVLINKS
281 281 <a href="/shortlog/default?style=coal" class="open">
282 282 <a href="/shortlog/9d8c40cba617?style=coal" class="open">
283 283
284 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=coal' | egrep $REVLINKS
284 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=coal' | grep -E $REVLINKS
285 285 <a href="/rev/tip?style=coal">
286 286 <a href="/rev/9d8c40cba617?style=coal">
287 287
288 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=coal' | egrep $REVLINKS
288 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=coal' | grep -E $REVLINKS
289 289 <a href="/rev/xyzzy?style=coal">
290 290 <a href="/rev/a7c1559b7bba?style=coal">
291 291
292 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=coal&rev=all()' | egrep $REVLINKS
292 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=coal&rev=all()' | grep -E $REVLINKS
293 293 <a href="/rev/9d8c40cba617?style=coal">third</a>
294 294 <a href="/rev/a7c1559b7bba?style=coal">second</a>
295 295 <a href="/rev/43c799df6e75?style=coal">first</a>
296 296
297 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=coal' | egrep $REVLINKS
297 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=coal' | grep -E $REVLINKS
298 298 <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
299 299 <li><a href="/graph/xyzzy?style=coal">graph</a></li>
300 300 <li><a href="/raw-rev/xyzzy?style=coal">raw</a></li>
@@ -305,7 +305,7 b' Set up the repo'
305 305 <td class="author"> <a href="/rev/9d8c40cba617?style=coal">9d8c40cba617</a></td>
306 306 <td class="files"><a href="/file/a7c1559b7bba/foo?style=coal">foo</a> </td>
307 307
308 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=coal' | egrep $REVLINKS
308 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=coal' | grep -E $REVLINKS
309 309 <li><a href="/graph/xyzzy?style=coal">graph</a></li>
310 310 <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
311 311 <li><a href="/file/xyzzy?style=coal">browse</a></li>
@@ -319,7 +319,7 b' Set up the repo'
319 319 <a href="/shortlog/xyzzy?revcount=120&style=coal">more</a>
320 320 | rev 1: <a href="/shortlog/43c799df6e75?style=coal">(0)</a> <a href="/shortlog/tip?style=coal">tip</a>
321 321
322 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=coal' | egrep $REVLINKS
322 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=coal' | grep -E $REVLINKS
323 323 <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
324 324 <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
325 325 <li><a href="/file/xyzzy?style=coal">browse</a></li>
@@ -333,7 +333,7 b' Set up the repo'
333 333 <a href="/graph/xyzzy?revcount=120&style=coal">more</a>
334 334 | rev 1: <a href="/graph/43c799df6e75?style=coal">(0)</a> <a href="/graph/tip?style=coal">tip</a>
335 335
336 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=coal' | egrep $REVLINKS
336 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=coal' | grep -E $REVLINKS
337 337 <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
338 338 <li><a href="/graph/xyzzy?style=coal">graph</a></li>
339 339 <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
@@ -343,7 +343,7 b' Set up the repo'
343 343 <a href="/file/xyzzy/dir/?style=coal">
344 344 <a href="/file/xyzzy/foo?style=coal">
345 345
346 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=coal' | egrep $REVLINKS
346 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=coal' | grep -E $REVLINKS
347 347 <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
348 348 <li><a href="/graph/xyzzy?style=coal">graph</a></li>
349 349 <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
@@ -358,7 +358,7 b' Set up the repo'
358 358 <td class="author"><a href="/file/43c799df6e75/foo?style=coal">43c799df6e75</a> </td>
359 359 <td class="author"><a href="/file/9d8c40cba617/foo?style=coal">9d8c40cba617</a> </td>
360 360
361 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=coal' | egrep $REVLINKS
361 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=coal' | grep -E $REVLINKS
362 362 href="/atom-log/tip/foo" title="Atom feed for test:foo" />
363 363 href="/rss-log/tip/foo" title="RSS feed for test:foo" />
364 364 <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
@@ -381,7 +381,7 b' Set up the repo'
381 381 <a href="/log/xyzzy/foo?revcount=120&style=coal">more</a>
382 382 | <a href="/log/43c799df6e75/foo?style=coal">(0)</a> <a href="/log/tip/foo?style=coal">tip</a>
383 383
384 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=coal' | egrep $REVLINKS
384 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=coal' | grep -E $REVLINKS
385 385 <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
386 386 <li><a href="/graph/xyzzy?style=coal">graph</a></li>
387 387 <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
@@ -405,7 +405,7 b' Set up the repo'
405 405 <a href="/diff/a7c1559b7bba/foo?style=coal">diff</a>
406 406 <a href="/rev/a7c1559b7bba?style=coal">changeset</a>
407 407
408 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=coal' | egrep $REVLINKS
408 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=coal' | grep -E $REVLINKS
409 409 <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
410 410 <li><a href="/graph/xyzzy?style=coal">graph</a></li>
411 411 <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
@@ -420,7 +420,7 b' Set up the repo'
420 420 <td><a href="/file/43c799df6e75/foo?style=coal">43c799df6e75</a> </td>
421 421 <td><a href="/file/9d8c40cba617/foo?style=coal">9d8c40cba617</a> </td>
422 422
423 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=coal' | egrep $REVLINKS
423 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=coal' | grep -E $REVLINKS
424 424 <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
425 425 <li><a href="/graph/xyzzy?style=coal">graph</a></li>
426 426 <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
@@ -437,7 +437,7 b' Set up the repo'
437 437
438 438 (De)referencing symbolic revisions (gitweb)
439 439
440 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'summary?style=gitweb' | egrep $REVLINKS
440 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'summary?style=gitweb' | grep -E $REVLINKS
441 441 <a href="/file?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a> |
442 442 <a class="list" href="/rev/9d8c40cba617?style=gitweb">
443 443 <a href="/rev/9d8c40cba617?style=gitweb">changeset</a> |
@@ -457,7 +457,7 b' Set up the repo'
457 457 <a href="/log/9d8c40cba617?style=gitweb">changelog</a> |
458 458 <a href="/file/9d8c40cba617?style=gitweb">files</a>
459 459
460 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=gitweb' | egrep $REVLINKS
460 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=gitweb' | grep -E $REVLINKS
461 461 <a href="/log/tip?style=gitweb">changelog</a> |
462 462 <a href="/graph/tip?style=gitweb">graph</a> |
463 463 <a href="/file/tip?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a> |
@@ -473,7 +473,7 b' Set up the repo'
473 473 <a href="/file/43c799df6e75?style=gitweb">files</a>
474 474 <a href="/shortlog/43c799df6e75?style=gitweb">(0)</a> <a href="/shortlog/tip?style=gitweb">tip</a>
475 475
476 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=gitweb' | egrep $REVLINKS
476 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=gitweb' | grep -E $REVLINKS
477 477 <a href="/shortlog/tip?style=gitweb">shortlog</a> |
478 478 <a href="/graph/tip?style=gitweb">graph</a> |
479 479 <a href="/file/tip?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a> |
@@ -486,7 +486,7 b' Set up the repo'
486 486 <a href="/rev/43c799df6e75?style=gitweb">changeset</a><br/>
487 487 <a href="/log/43c799df6e75?style=gitweb">(0)</a> <a href="/log/tip?style=gitweb">tip</a> <br/>
488 488
489 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=gitweb' | egrep $REVLINKS
489 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=gitweb' | grep -E $REVLINKS
490 490 <a href="/shortlog/tip?style=gitweb">shortlog</a> |
491 491 <a href="/log/tip?style=gitweb">changelog</a> |
492 492 <a href="/file/tip?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a> |
@@ -500,25 +500,25 b' Set up the repo'
500 500 <a href="/graph/tip?revcount=120&style=gitweb">more</a>
501 501 | <a href="/graph/43c799df6e75?style=gitweb">(0)</a> <a href="/graph/tip?style=gitweb">tip</a>
502 502
503 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=gitweb' | egrep $REVLINKS
503 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=gitweb' | grep -E $REVLINKS
504 504 <td><a class="list" href="/rev/tip?style=gitweb"><b>tip</b></a></td>
505 505 <a href="/rev/9d8c40cba617?style=gitweb">changeset</a> |
506 506 <a href="/log/9d8c40cba617?style=gitweb">changelog</a> |
507 507 <a href="/file/9d8c40cba617?style=gitweb">files</a>
508 508
509 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=gitweb' | egrep $REVLINKS
509 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=gitweb' | grep -E $REVLINKS
510 510 <td><a class="list" href="/rev/xyzzy?style=gitweb"><b>xyzzy</b></a></td>
511 511 <a href="/rev/a7c1559b7bba?style=gitweb">changeset</a> |
512 512 <a href="/log/a7c1559b7bba?style=gitweb">changelog</a> |
513 513 <a href="/file/a7c1559b7bba?style=gitweb">files</a>
514 514
515 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=gitweb' | egrep $REVLINKS
515 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=gitweb' | grep -E $REVLINKS
516 516 <td class="open"><a class="list" href="/shortlog/default?style=gitweb"><b>default</b></a></td>
517 517 <a href="/changeset/9d8c40cba617?style=gitweb">changeset</a> |
518 518 <a href="/log/9d8c40cba617?style=gitweb">changelog</a> |
519 519 <a href="/file/9d8c40cba617?style=gitweb">files</a>
520 520
521 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=gitweb' | egrep $REVLINKS
521 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=gitweb' | grep -E $REVLINKS
522 522 <a href="/rev/tip?style=gitweb">changeset</a> | <a href="/archive/tip.zip">zip</a> |
523 523 <a href="/file/tip/dir?style=gitweb">dir</a>
524 524 <a href="/file/tip/dir/?style=gitweb"></a>
@@ -528,7 +528,7 b' Set up the repo'
528 528 <a href="/log/tip/foo?style=gitweb">revisions</a> |
529 529 <a href="/annotate/tip/foo?style=gitweb">annotate</a>
530 530
531 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=gitweb&rev=all()' | egrep $REVLINKS
531 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=gitweb&rev=all()' | grep -E $REVLINKS
532 532 <a href="/file?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>
533 533 <a class="title" href="/rev/9d8c40cba617?style=gitweb">
534 534 <a href="/rev/9d8c40cba617?style=gitweb">changeset</a><br/>
@@ -537,7 +537,7 b' Set up the repo'
537 537 <a class="title" href="/rev/43c799df6e75?style=gitweb">
538 538 <a href="/rev/43c799df6e75?style=gitweb">changeset</a><br/>
539 539
540 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=gitweb' | egrep $REVLINKS
540 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=gitweb' | grep -E $REVLINKS
541 541 <a href="/shortlog/xyzzy?style=gitweb">shortlog</a> |
542 542 <a href="/log/xyzzy?style=gitweb">changelog</a> |
543 543 <a href="/graph/xyzzy?style=gitweb">graph</a> |
@@ -554,7 +554,7 b' Set up the repo'
554 554 <a href="/comparison/a7c1559b7bba/foo?style=gitweb">comparison</a> |
555 555 <a href="/log/a7c1559b7bba/foo?style=gitweb">revisions</a>
556 556
557 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=gitweb' | egrep $REVLINKS
557 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=gitweb' | grep -E $REVLINKS
558 558 <a href="/log/xyzzy?style=gitweb">changelog</a> |
559 559 <a href="/graph/xyzzy?style=gitweb">graph</a> |
560 560 <a href="/file/xyzzy?style=gitweb">files</a> | <a href="/archive/xyzzy.zip">zip</a> |
@@ -567,7 +567,7 b' Set up the repo'
567 567 <a href="/file/43c799df6e75?style=gitweb">files</a>
568 568 <a href="/shortlog/43c799df6e75?style=gitweb">(0)</a> <a href="/shortlog/tip?style=gitweb">tip</a>
569 569
570 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=gitweb' | egrep $REVLINKS
570 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=gitweb' | grep -E $REVLINKS
571 571 <a href="/shortlog/xyzzy?style=gitweb">shortlog</a> |
572 572 <a href="/graph/xyzzy?style=gitweb">graph</a> |
573 573 <a href="/file/xyzzy?style=gitweb">files</a> | <a href="/archive/xyzzy.zip">zip</a> |
@@ -578,7 +578,7 b' Set up the repo'
578 578 <a href="/rev/43c799df6e75?style=gitweb">changeset</a><br/>
579 579 <a href="/log/43c799df6e75?style=gitweb">(0)</a> <a href="/log/tip?style=gitweb">tip</a> <br/>
580 580
581 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=gitweb' | egrep $REVLINKS
581 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=gitweb' | grep -E $REVLINKS
582 582 <a href="/shortlog/xyzzy?style=gitweb">shortlog</a> |
583 583 <a href="/log/xyzzy?style=gitweb">changelog</a> |
584 584 <a href="/file/xyzzy?style=gitweb">files</a> | <a href="/archive/xyzzy.zip">zip</a> |
@@ -591,7 +591,7 b' Set up the repo'
591 591 <a href="/graph/xyzzy?revcount=120&style=gitweb">more</a>
592 592 | <a href="/graph/43c799df6e75?style=gitweb">(0)</a> <a href="/graph/tip?style=gitweb">tip</a>
593 593
594 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=gitweb' | egrep $REVLINKS
594 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=gitweb' | grep -E $REVLINKS
595 595 <a href="/rev/xyzzy?style=gitweb">changeset</a> | <a href="/archive/xyzzy.zip">zip</a> |
596 596 <a href="/file/xyzzy/dir?style=gitweb">dir</a>
597 597 <a href="/file/xyzzy/dir/?style=gitweb"></a>
@@ -601,7 +601,7 b' Set up the repo'
601 601 <a href="/log/xyzzy/foo?style=gitweb">revisions</a> |
602 602 <a href="/annotate/xyzzy/foo?style=gitweb">annotate</a>
603 603
604 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=gitweb' | egrep $REVLINKS
604 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=gitweb' | grep -E $REVLINKS
605 605 <a href="/file/xyzzy/?style=gitweb">files</a> |
606 606 <a href="/rev/xyzzy?style=gitweb">changeset</a> |
607 607 <a href="/file/tip/foo?style=gitweb">latest</a> |
@@ -614,7 +614,7 b' Set up the repo'
614 614 <a class="list" href="/file/43c799df6e75/foo?style=gitweb">
615 615 <a class="list" href="/file/9d8c40cba617/foo?style=gitweb">9d8c40cba617</a></td>
616 616
617 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=gitweb' | egrep $REVLINKS
617 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=gitweb' | grep -E $REVLINKS
618 618 <a href="/file/xyzzy/foo?style=gitweb">file</a> |
619 619 <a href="/annotate/xyzzy/foo?style=gitweb">annotate</a> |
620 620 <a href="/diff/xyzzy/foo?style=gitweb">diff</a> |
@@ -633,7 +633,7 b' Set up the repo'
633 633 <a href="/log/xyzzy/foo?revcount=120&style=gitweb">more</a>
634 634 <a href="/log/43c799df6e75/foo?style=gitweb">(0)</a> <a href="/log/tip/foo?style=gitweb">tip</a>
635 635
636 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=gitweb' | egrep $REVLINKS
636 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=gitweb' | grep -E $REVLINKS
637 637 <a href="/file/xyzzy/?style=gitweb">files</a> |
638 638 <a href="/rev/xyzzy?style=gitweb">changeset</a> |
639 639 <a href="/file/xyzzy/foo?style=gitweb">file</a> |
@@ -655,7 +655,7 b' Set up the repo'
655 655 <a href="/diff/a7c1559b7bba/foo?style=gitweb">diff</a>
656 656 <a href="/rev/a7c1559b7bba?style=gitweb">changeset</a>
657 657
658 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=gitweb' | egrep $REVLINKS
658 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=gitweb' | grep -E $REVLINKS
659 659 <a href="/file/xyzzy?style=gitweb">files</a> |
660 660 <a href="/rev/xyzzy?style=gitweb">changeset</a> |
661 661 <a href="/file/xyzzy/foo?style=gitweb">file</a> |
@@ -668,7 +668,7 b' Set up the repo'
668 668 <a class="list" href="/diff/43c799df6e75/foo?style=gitweb">
669 669 <a class="list" href="/diff/9d8c40cba617/foo?style=gitweb">9d8c40cba617</a>
670 670
671 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=gitweb' | egrep $REVLINKS
671 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=gitweb' | grep -E $REVLINKS
672 672 <a href="/file/xyzzy?style=gitweb">files</a> |
673 673 <a href="/rev/xyzzy?style=gitweb">changeset</a> |
674 674 <a href="/file/xyzzy/foo?style=gitweb">file</a> |
@@ -683,7 +683,7 b' Set up the repo'
683 683
684 684 (De)referencing symbolic revisions (monoblue)
685 685
686 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'summary?style=monoblue' | egrep $REVLINKS
686 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'summary?style=monoblue' | grep -E $REVLINKS
687 687 <li><a href="/archive/tip.zip">zip</a></li>
688 688 <a href="/rev/9d8c40cba617?style=monoblue">
689 689 <a href="/rev/9d8c40cba617?style=monoblue">changeset</a> |
@@ -703,7 +703,7 b' Set up the repo'
703 703 <a href="/log/9d8c40cba617?style=monoblue">changelog</a> |
704 704 <a href="/file/9d8c40cba617?style=monoblue">files</a>
705 705
706 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=monoblue' | egrep $REVLINKS
706 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=monoblue' | grep -E $REVLINKS
707 707 <li><a href="/graph/tip?style=monoblue">graph</a></li>
708 708 <li><a href="/file/tip?style=monoblue">files</a></li>
709 709 <li><a href="/archive/tip.zip">zip</a></li>
@@ -718,7 +718,7 b' Set up the repo'
718 718 <a href="/file/43c799df6e75?style=monoblue">files</a>
719 719 <a href="/shortlog/43c799df6e75?style=monoblue">(0)</a> <a href="/shortlog/tip?style=monoblue">tip</a>
720 720
721 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=monoblue' | egrep $REVLINKS
721 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=monoblue' | grep -E $REVLINKS
722 722 <li><a href="/graph/tip?style=monoblue">graph</a></li>
723 723 <li><a href="/file/tip?style=monoblue">files</a></li>
724 724 <li><a href="/archive/tip.zip">zip</a></li>
@@ -727,7 +727,7 b' Set up the repo'
727 727 <a class="title" href="/rev/43c799df6e75?style=monoblue">
728 728 <a href="/log/43c799df6e75?style=monoblue">(0)</a> <a href="/log/tip?style=monoblue">tip</a>
729 729
730 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=monoblue' | egrep $REVLINKS
730 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=monoblue' | grep -E $REVLINKS
731 731 <li><a href="/file/tip?style=monoblue">files</a></li>
732 732 <li><a href="/archive/tip.zip">zip</a></li>
733 733 <a href="/rev/9d8c40cba617?style=monoblue">third</a>
@@ -737,25 +737,25 b' Set up the repo'
737 737 <a href="/graph/tip?revcount=120&style=monoblue">more</a>
738 738 | <a href="/graph/43c799df6e75?style=monoblue">(0)</a> <a href="/graph/tip?style=monoblue">tip</a>
739 739
740 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=monoblue' | egrep $REVLINKS
740 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=monoblue' | grep -E $REVLINKS
741 741 <td><a href="/rev/tip?style=monoblue">tip</a></td>
742 742 <a href="/rev/9d8c40cba617?style=monoblue">changeset</a> |
743 743 <a href="/log/9d8c40cba617?style=monoblue">changelog</a> |
744 744 <a href="/file/9d8c40cba617?style=monoblue">files</a>
745 745
746 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=monoblue' | egrep $REVLINKS
746 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=monoblue' | grep -E $REVLINKS
747 747 <td><a href="/rev/xyzzy?style=monoblue">xyzzy</a></td>
748 748 <a href="/rev/a7c1559b7bba?style=monoblue">changeset</a> |
749 749 <a href="/log/a7c1559b7bba?style=monoblue">changelog</a> |
750 750 <a href="/file/a7c1559b7bba?style=monoblue">files</a>
751 751
752 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=monoblue' | egrep $REVLINKS
752 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=monoblue' | grep -E $REVLINKS
753 753 <td class="open"><a href="/shortlog/default?style=monoblue">default</a></td>
754 754 <a href="/rev/9d8c40cba617?style=monoblue">changeset</a> |
755 755 <a href="/log/9d8c40cba617?style=monoblue">changelog</a> |
756 756 <a href="/file/9d8c40cba617?style=monoblue">files</a>
757 757
758 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=monoblue' | egrep $REVLINKS
758 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=monoblue' | grep -E $REVLINKS
759 759 <li><a href="/graph/tip?style=monoblue">graph</a></li>
760 760 <li><a href="/rev/tip?style=monoblue">changeset</a></li>
761 761 <li><a href="/archive/tip.zip">zip</a></li>
@@ -767,13 +767,13 b' Set up the repo'
767 767 <a href="/log/tip/foo?style=monoblue">revisions</a> |
768 768 <a href="/annotate/tip/foo?style=monoblue">annotate</a>
769 769
770 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=monoblue&rev=all()' | egrep $REVLINKS
770 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=monoblue&rev=all()' | grep -E $REVLINKS
771 771 <li><a href="/archive/tip.zip">zip</a></li>
772 772 <a class="title" href="/rev/9d8c40cba617?style=monoblue">
773 773 <a class="title" href="/rev/a7c1559b7bba?style=monoblue">
774 774 <a class="title" href="/rev/43c799df6e75?style=monoblue">
775 775
776 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=monoblue' | egrep $REVLINKS
776 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=monoblue' | grep -E $REVLINKS
777 777 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
778 778 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
779 779 <li><a href="/raw-rev/xyzzy">raw</a></li>
@@ -789,7 +789,7 b' Set up the repo'
789 789 <a href="/comparison/a7c1559b7bba/foo?style=monoblue">comparison</a> |
790 790 <a href="/log/a7c1559b7bba/foo?style=monoblue">revisions</a>
791 791
792 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=monoblue' | egrep $REVLINKS
792 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=monoblue' | grep -E $REVLINKS
793 793 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
794 794 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
795 795 <li><a href="/archive/xyzzy.zip">zip</a></li>
@@ -801,7 +801,7 b' Set up the repo'
801 801 <a href="/file/43c799df6e75?style=monoblue">files</a>
802 802 <a href="/shortlog/43c799df6e75?style=monoblue">(0)</a> <a href="/shortlog/tip?style=monoblue">tip</a>
803 803
804 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=monoblue' | egrep $REVLINKS
804 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=monoblue' | grep -E $REVLINKS
805 805 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
806 806 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
807 807 <li><a href="/archive/xyzzy.zip">zip</a></li>
@@ -809,7 +809,7 b' Set up the repo'
809 809 <a class="title" href="/rev/43c799df6e75?style=monoblue">
810 810 <a href="/log/43c799df6e75?style=monoblue">(0)</a> <a href="/log/tip?style=monoblue">tip</a>
811 811
812 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=monoblue' | egrep $REVLINKS
812 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=monoblue' | grep -E $REVLINKS
813 813 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
814 814 <li><a href="/archive/xyzzy.zip">zip</a></li>
815 815 <a href="/rev/a7c1559b7bba?style=monoblue">second</a>
@@ -818,7 +818,7 b' Set up the repo'
818 818 <a href="/graph/xyzzy?revcount=120&style=monoblue">more</a>
819 819 | <a href="/graph/43c799df6e75?style=monoblue">(0)</a> <a href="/graph/tip?style=monoblue">tip</a>
820 820
821 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=monoblue' | egrep $REVLINKS
821 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=monoblue' | grep -E $REVLINKS
822 822 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
823 823 <li><a href="/rev/xyzzy?style=monoblue">changeset</a></li>
824 824 <li><a href="/archive/xyzzy.zip">zip</a></li>
@@ -830,7 +830,7 b' Set up the repo'
830 830 <a href="/log/xyzzy/foo?style=monoblue">revisions</a> |
831 831 <a href="/annotate/xyzzy/foo?style=monoblue">annotate</a>
832 832
833 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=monoblue' | egrep $REVLINKS
833 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=monoblue' | grep -E $REVLINKS
834 834 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
835 835 <li><a href="/file/xyzzy/?style=monoblue">files</a></li>
836 836 <li><a href="/file/tip/foo?style=monoblue">latest</a></li>
@@ -843,7 +843,7 b' Set up the repo'
843 843 <a href="/file/43c799df6e75/foo?style=monoblue">
844 844 <a href="/file/9d8c40cba617/foo?style=monoblue">9d8c40cba617</a>
845 845
846 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=monoblue' | egrep $REVLINKS
846 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=monoblue' | grep -E $REVLINKS
847 847 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
848 848 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
849 849 <li><a href="/file/xyzzy/foo?style=monoblue">file</a></li>
@@ -861,7 +861,7 b' Set up the repo'
861 861 <a href="/annotate/43c799df6e75/foo?style=monoblue">annotate</a>
862 862 <a href="/log/43c799df6e75/foo?style=monoblue">(0)</a> <a href="/log/tip/foo?style=monoblue">tip</a>
863 863
864 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=monoblue' | egrep $REVLINKS
864 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=monoblue' | grep -E $REVLINKS
865 865 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
866 866 <li><a href="/file/xyzzy/?style=monoblue">files</a></li>
867 867 <li><a href="/file/xyzzy/foo?style=monoblue">file</a></li>
@@ -883,7 +883,7 b' Set up the repo'
883 883 <a href="/diff/a7c1559b7bba/foo?style=monoblue">diff</a>
884 884 <a href="/rev/a7c1559b7bba?style=monoblue">changeset</a>
885 885
886 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=monoblue' | egrep $REVLINKS
886 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=monoblue' | grep -E $REVLINKS
887 887 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
888 888 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
889 889 <li><a href="/file/xyzzy/foo?style=monoblue">file</a></li>
@@ -896,7 +896,7 b' Set up the repo'
896 896 <dd><a href="/diff/43c799df6e75/foo?style=monoblue">43c799df6e75</a></dd>
897 897 <dd><a href="/diff/9d8c40cba617/foo?style=monoblue">9d8c40cba617</a></dd>
898 898
899 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=monoblue' | egrep $REVLINKS
899 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=monoblue' | grep -E $REVLINKS
900 900 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
901 901 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
902 902 <li><a href="/file/xyzzy/foo?style=monoblue">file</a></li>
@@ -911,7 +911,7 b' Set up the repo'
911 911
912 912 (De)referencing symbolic revisions (spartan)
913 913
914 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=spartan' | egrep $REVLINKS
914 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=spartan' | grep -E $REVLINKS
915 915 <a href="/log/tip?style=spartan">changelog</a>
916 916 <a href="/graph/tip?style=spartan">graph</a>
917 917 <a href="/file/tip/?style=spartan">files</a>
@@ -922,7 +922,7 b' Set up the repo'
922 922 <td class="node"><a href="/rev/43c799df6e75?style=spartan">first</a></td>
923 923 navigate: <small class="navigate"><a href="/shortlog/43c799df6e75?style=spartan">(0)</a> <a href="/shortlog/tip?style=spartan">tip</a> </small>
924 924
925 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=spartan' | egrep $REVLINKS
925 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=spartan' | grep -E $REVLINKS
926 926 <a href="/shortlog/tip?style=spartan">shortlog</a>
927 927 <a href="/graph/tip?style=spartan">graph</a>
928 928 <a href="/file/tip?style=spartan">files</a>
@@ -939,7 +939,7 b' Set up the repo'
939 939 <td class="files"><a href="/diff/43c799df6e75/dir/bar?style=spartan">dir/bar</a> <a href="/diff/43c799df6e75/foo?style=spartan">foo</a> </td>
940 940 navigate: <small class="navigate"><a href="/log/43c799df6e75?style=spartan">(0)</a> <a href="/log/tip?style=spartan">tip</a> </small>
941 941
942 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=spartan' | egrep $REVLINKS
942 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=spartan' | grep -E $REVLINKS
943 943 <a href="/log/tip?style=spartan">changelog</a>
944 944 <a href="/shortlog/tip?style=spartan">shortlog</a>
945 945 <a href="/file/tip/?style=spartan">files</a>
@@ -949,13 +949,13 b' Set up the repo'
949 949 <a href="/rev/43c799df6e75?style=spartan">first</a>
950 950 navigate: <small class="navigate"><a href="/graph/43c799df6e75?style=spartan">(0)</a> <a href="/graph/tip?style=spartan">tip</a> </small>
951 951
952 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=spartan' | egrep $REVLINKS
952 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=spartan' | grep -E $REVLINKS
953 953 <a href="/rev/9d8c40cba617?style=spartan">tip</a>
954 954
955 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=spartan' | egrep $REVLINKS
955 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=spartan' | grep -E $REVLINKS
956 956 <a href="/shortlog/9d8c40cba617?style=spartan" class="open">default</a>
957 957
958 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=spartan' | egrep $REVLINKS
958 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=spartan' | grep -E $REVLINKS
959 959 <a href="/log/tip?style=spartan">changelog</a>
960 960 <a href="/shortlog/tip?style=spartan">shortlog</a>
961 961 <a href="/graph/tip?style=spartan">graph</a>
@@ -966,7 +966,7 b' Set up the repo'
966 966 <a href="/file/tip/dir/?style=spartan">
967 967 <td><a href="/file/tip/foo?style=spartan">foo</a></td>
968 968
969 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=spartan&rev=all()' | egrep $REVLINKS
969 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=spartan&rev=all()' | grep -E $REVLINKS
970 970 <a href="/archive/tip.zip">zip</a>
971 971 <td class="node"><a href="/rev/9d8c40cba617?style=spartan">9d8c40cba617</a></td>
972 972 <a href="/rev/a7c1559b7bba?style=spartan">a7c1559b7bba</a>
@@ -982,7 +982,7 b' Set up the repo'
982 982 <th class="files"><a href="/file/43c799df6e75?style=spartan">files</a>:</th>
983 983 <td class="files"><a href="/diff/43c799df6e75/dir/bar?style=spartan">dir/bar</a> <a href="/diff/43c799df6e75/foo?style=spartan">foo</a> </td>
984 984
985 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=spartan' | egrep $REVLINKS
985 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=spartan' | grep -E $REVLINKS
986 986 <a href="/log/xyzzy?style=spartan">changelog</a>
987 987 <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
988 988 <a href="/graph/xyzzy?style=spartan">graph</a>
@@ -994,7 +994,7 b' Set up the repo'
994 994 <td class="child"><a href="/rev/9d8c40cba617?style=spartan">9d8c40cba617</a></td>
995 995 <td class="files"><a href="/file/a7c1559b7bba/foo?style=spartan">foo</a> </td>
996 996
997 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=spartan' | egrep $REVLINKS
997 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=spartan' | grep -E $REVLINKS
998 998 <a href="/log/xyzzy?style=spartan">changelog</a>
999 999 <a href="/graph/xyzzy?style=spartan">graph</a>
1000 1000 <a href="/file/xyzzy/?style=spartan">files</a>
@@ -1004,7 +1004,7 b' Set up the repo'
1004 1004 <td class="node"><a href="/rev/43c799df6e75?style=spartan">first</a></td>
1005 1005 navigate: <small class="navigate"><a href="/shortlog/43c799df6e75?style=spartan">(0)</a> <a href="/shortlog/tip?style=spartan">tip</a> </small>
1006 1006
1007 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=spartan' | egrep $REVLINKS
1007 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=spartan' | grep -E $REVLINKS
1008 1008 <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
1009 1009 <a href="/graph/xyzzy?style=spartan">graph</a>
1010 1010 <a href="/file/xyzzy?style=spartan">files</a>
@@ -1018,7 +1018,7 b' Set up the repo'
1018 1018 <td class="files"><a href="/diff/43c799df6e75/dir/bar?style=spartan">dir/bar</a> <a href="/diff/43c799df6e75/foo?style=spartan">foo</a> </td>
1019 1019 navigate: <small class="navigate"><a href="/log/43c799df6e75?style=spartan">(0)</a> <a href="/log/tip?style=spartan">tip</a> </small>
1020 1020
1021 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=spartan' | egrep $REVLINKS
1021 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=spartan' | grep -E $REVLINKS
1022 1022 <a href="/log/xyzzy?style=spartan">changelog</a>
1023 1023 <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
1024 1024 <a href="/file/xyzzy/?style=spartan">files</a>
@@ -1027,7 +1027,7 b' Set up the repo'
1027 1027 <a href="/rev/43c799df6e75?style=spartan">first</a>
1028 1028 navigate: <small class="navigate"><a href="/graph/43c799df6e75?style=spartan">(0)</a> <a href="/graph/tip?style=spartan">tip</a> </small>
1029 1029
1030 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=spartan' | egrep $REVLINKS
1030 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=spartan' | grep -E $REVLINKS
1031 1031 <a href="/log/xyzzy?style=spartan">changelog</a>
1032 1032 <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
1033 1033 <a href="/graph/xyzzy?style=spartan">graph</a>
@@ -1038,7 +1038,7 b' Set up the repo'
1038 1038 <a href="/file/xyzzy/dir/?style=spartan">
1039 1039 <td><a href="/file/xyzzy/foo?style=spartan">foo</a></td>
1040 1040
1041 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=spartan' | egrep $REVLINKS
1041 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=spartan' | grep -E $REVLINKS
1042 1042 <a href="/log/xyzzy?style=spartan">changelog</a>
1043 1043 <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
1044 1044 <a href="/graph/xyzzy?style=spartan">graph</a>
@@ -1051,7 +1051,7 b' Set up the repo'
1051 1051 <a href="/file/43c799df6e75/foo?style=spartan">
1052 1052 <td><a href="/file/9d8c40cba617/foo?style=spartan">9d8c40cba617</a></td>
1053 1053
1054 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=spartan' | egrep $REVLINKS
1054 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=spartan' | grep -E $REVLINKS
1055 1055 href="/atom-log/tip/foo" title="Atom feed for test:foo">
1056 1056 href="/rss-log/tip/foo" title="RSS feed for test:foo">
1057 1057 <a href="/file/xyzzy/foo?style=spartan">file</a>
@@ -1068,7 +1068,7 b' Set up the repo'
1068 1068 <a href="/diff/43c799df6e75/foo?style=spartan">(diff)</a>
1069 1069 <a href="/annotate/43c799df6e75/foo?style=spartan">(annotate)</a>
1070 1070
1071 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=spartan' | egrep $REVLINKS
1071 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=spartan' | grep -E $REVLINKS
1072 1072 <a href="/log/xyzzy?style=spartan">changelog</a>
1073 1073 <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
1074 1074 <a href="/graph/xyzzy?style=spartan">graph</a>
@@ -1090,7 +1090,7 b' Set up the repo'
1090 1090 <a href="/diff/a7c1559b7bba/foo?style=spartan">diff</a>
1091 1091 <a href="/rev/a7c1559b7bba?style=spartan">changeset</a>
1092 1092
1093 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=spartan' | egrep $REVLINKS
1093 $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=spartan' | grep -E $REVLINKS
1094 1094 <a href="/log/xyzzy?style=spartan">changelog</a>
1095 1095 <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
1096 1096 <a href="/graph/xyzzy?style=spartan">graph</a>
@@ -783,19 +783,19 b' phase changes are refreshed (issue4061)'
783 783
784 784 access bookmarks
785 785
786 $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | egrep '^200|changeset 0:'
786 $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | grep -E '^200|changeset 0:'
787 787 200 Script output follows
788 788 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
789 789
790 $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | egrep '^200|changeset 0:'
790 $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | grep -E '^200|changeset 0:'
791 791 200 Script output follows
792 792 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
793 793
794 $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | egrep '^200|changeset 0:'
794 $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | grep -E '^200|changeset 0:'
795 795 200 Script output follows
796 796 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
797 797
798 $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | egrep '^200|changeset 0:'
798 $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | grep -E '^200|changeset 0:'
799 799 200 Script output follows
800 800 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
801 801
@@ -236,7 +236,7 b' tip before edit'
236 236
237 237 $ hg --config progress.debug=1 --debug \
238 238 > histedit 1ddb6c90f2ee --commands - 2>&1 <<EOF | \
239 > egrep 'editing|unresolved'
239 > grep -E 'editing|unresolved'
240 240 > pick 1ddb6c90f2ee e
241 241 > fold 10c36dd37515 f
242 242 > EOF
@@ -975,7 +975,7 b' test python hooks'
975 975 (run with --traceback for stack trace)
976 976 [255]
977 977
978 $ hg pull ../a --traceback 2>&1 | egrep 'pulling|searching|^exception|Traceback|SyntaxError|ImportError|ModuleNotFoundError|HookLoadError|abort'
978 $ hg pull ../a --traceback 2>&1 | grep -E 'pulling|searching|^exception|Traceback|SyntaxError|ImportError|ModuleNotFoundError|HookLoadError|abort'
979 979 pulling from ../a
980 980 searching for changes
981 981 exception from first failed import attempt:
@@ -1142,7 +1142,7 b' make sure --traceback works on hook impo'
1142 1142 $ echo 'precommit.importfail = python:importfail.whatever' >> .hg/hgrc
1143 1143
1144 1144 $ echo a >> a
1145 $ hg --traceback commit -ma 2>&1 | egrep '^exception|ImportError|ModuleNotFoundError|Traceback|HookLoadError|abort'
1145 $ hg --traceback commit -ma 2>&1 | grep -E '^exception|ImportError|ModuleNotFoundError|Traceback|HookLoadError|abort'
1146 1146 exception from first failed import attempt:
1147 1147 Traceback (most recent call last):
1148 1148 ModuleNotFoundError: No module named 'somebogusmodule'
@@ -371,7 +371,7 b' plain diff in email, no subject, no mess'
371 371 new changesets 80971e65b431
372 372 updating to branch default
373 373 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
374 $ egrep -v '^(Subject|email)' msg.patch | hg --cwd b import -
374 $ grep -E -v '^(Subject|email)' msg.patch | hg --cwd b import -
375 375 applying patch from stdin
376 376 abort: empty commit message
377 377 [10]
@@ -26,7 +26,7 b' https://bz.mercurial-scm.org/show_bug.cg'
26 26
27 27 $ hg log -r . --debug | grep files
28 28 [1]
29 $ hg log -r . --debug -T json | egrep '(added|removed|modified)'
29 $ hg log -r . --debug -T json | grep -E '(added|removed|modified)'
30 30 "added": [],
31 31 "modified": [],
32 32 "removed": [],
@@ -186,7 +186,7 b' conditional above.'
186 186 share_dst/.hg/largefiles/dirstate
187 187 share_dst/.hg/largefiles/undo.backup.dirstate.bck
188 188
189 $ find src/.hg/largefiles/* | egrep "(dirstate|$hash)" | sort
189 $ find src/.hg/largefiles/* | grep -E "(dirstate|$hash)" | sort
190 190 src/.hg/largefiles/dirstate
191 191 src/.hg/largefiles/e2fb5f2139d086ded2cb600d5a91a196e76bf020
192 192
@@ -411,7 +411,7 b' the GET/PUT request.'
411 411 > -A $TESTTMP/access.log -E $TESTTMP/errors.log
412 412 $ mv hg.pid $DAEMON_PIDS
413 413
414 $ hg clone --debug http://localhost:$HGPORT1 auth_clone | egrep '^[{}]| '
414 $ hg clone --debug http://localhost:$HGPORT1 auth_clone | grep -E '^[{}]| '
415 415 {
416 416 "objects": [
417 417 {
@@ -460,7 +460,7 b' Test that Digest Auth fails gracefully b'
460 460 (api=http://localhost:$HGPORT1/.git/info/lfs/objects/batch, action=upload)
461 461 [50]
462 462
463 $ hg -R auth_clone --debug push | egrep '^[{}]| '
463 $ hg -R auth_clone --debug push | grep -E '^[{}]| '
464 464 {
465 465 "objects": [
466 466 {
@@ -116,7 +116,7 b' lfs requirement'
116 116
117 117 $ hg debugrequires -R $TESTTMP/server/ | grep lfs
118 118 [1]
119 $ hg push -v | egrep -v '^(uncompressed| )'
119 $ hg push -v | grep -E -v '^(uncompressed| )'
120 120 pushing to $TESTTMP/server
121 121 searching for changes
122 122 lfs: found f11e77c257047a398492d8d6cb9f6acf3aa7c4384bb23080b43546053e183e4b in the local lfs store
@@ -41,7 +41,7 b' Spot-check some randomly selected files:'
41 41 ./usr/local/share/zsh/site-functions/_hg 100644 0/0
42 42 $ grep bash-completion/completions/hg boms.txt | cut -d ' ' -f 1,2,3
43 43 ./usr/local/share/bash-completion-completions/hg 100644 0/0
44 $ egrep 'man[15]' boms.txt | cut -d ' ' -f 1,2,3
44 $ grep -E 'man[15]' boms.txt | cut -d ' ' -f 1,2,3
45 45 ./usr/local/share/man/man1 40755 0/0
46 46 ./usr/local/share/man/man1/chg.1 100644 0/0
47 47 ./usr/local/share/man/man1/hg.1 100644 0/0
@@ -57,7 +57,7 b' Spot-check some randomly selected files:'
57 57 ./Library/Python/2.7/site-packages/mercurial/localrepo.py 100644 0/0
58 58 ./Library/Python/2.7/site-packages/mercurial/localrepo.pyc 100644 0/0
59 59 ./Library/Python/2.7/site-packages/mercurial/localrepo.pyo 100644 0/0
60 $ egrep 'bin/' boms.txt | cut -d ' ' -f 1,2,3
60 $ grep -E 'bin/' boms.txt | cut -d ' ' -f 1,2,3
61 61 ./usr/local/bin/chg 100755 0/0
62 62 ./usr/local/bin/hg 100755 0/0
63 63
@@ -1581,8 +1581,6 b' Test that secret mq patch does not break'
1581 1581 > from mercurial import demandimport; demandimport.enable()
1582 1582 > from mercurial.hgweb import hgweb
1583 1583 > from mercurial.hgweb import wsgicgi
1584 > import cgitb
1585 > cgitb.enable()
1586 1584 > app = hgweb(b'.', b'test')
1587 1585 > wsgicgi.launch(app)
1588 1586 > HGWEB
@@ -54,7 +54,7 b' create full repo'
54 54
55 55 $ hg update -r 'desc("outside 4a")'
56 56 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
57 $ hg merge -r 'desc("outside 4b")' 2>&1 | egrep -v '(warning:|incomplete!)'
57 $ hg merge -r 'desc("outside 4b")' 2>&1 | grep -E -v '(warning:|incomplete!)'
58 58 merging outside/f
59 59 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
60 60 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
@@ -66,7 +66,7 b' create full repo'
66 66 $ echo 6 > outside/f
67 67 $ hg commit -Aqm 'outside 6'
68 68
69 $ hg merge -r 'desc("outside 4c")' 2>&1 | egrep -v '(warning:|incomplete!)'
69 $ hg merge -r 'desc("outside 4c")' 2>&1 | grep -E -v '(warning:|incomplete!)'
70 70 merging outside/f
71 71 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
72 72 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
@@ -78,7 +78,7 b' create full repo'
78 78 $ echo 8 > outside/f
79 79 $ hg commit -Aqm 'outside 8'
80 80
81 $ hg merge -r 'desc("outside 4d")' 2>&1 | egrep -v '(warning:|incomplete!)'
81 $ hg merge -r 'desc("outside 4d")' 2>&1 | grep -E -v '(warning:|incomplete!)'
82 82 merging outside/f
83 83 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
84 84 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
@@ -71,7 +71,7 b' Can merge in when no files outside narro'
71 71 Can merge conflicting changes inside narrow spec
72 72
73 73 $ hg update -q 'desc("modify inside/f1")'
74 $ hg merge 'desc("conflicting inside/f1")' 2>&1 | egrep -v '(warning:|incomplete!)'
74 $ hg merge 'desc("conflicting inside/f1")' 2>&1 | grep -E -v '(warning:|incomplete!)'
75 75 merging inside/f1
76 76 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
77 77 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
@@ -69,7 +69,7 b' Can rebase onto conflicting changes insi'
69 69 $ hg update -q 0
70 70 $ echo conflicting > inside/f1
71 71 $ hg ci -qm 'conflicting inside/f1'
72 $ hg rebase -d 'desc("modify inside/f1")' 2>&1 | egrep -v '(warning:|incomplete!)'
72 $ hg rebase -d 'desc("modify inside/f1")' 2>&1 | grep -E -v '(warning:|incomplete!)'
73 73 rebasing 6:cdce97fbf653 tip "conflicting inside/f1"
74 74 merging inside/f1
75 75 unresolved conflicts (see 'hg resolve', then 'hg rebase --continue')
@@ -55,7 +55,7 b' create full repo'
55 55
56 56 $ hg update -r 'desc("outside 4a")'
57 57 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
58 $ hg merge -r 'desc("outside 4b")' 2>&1 | egrep -v '(warning:|incomplete!)'
58 $ hg merge -r 'desc("outside 4b")' 2>&1 | grep -E -v '(warning:|incomplete!)'
59 59 merging outside/f
60 60 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
61 61 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
@@ -67,7 +67,7 b' create full repo'
67 67 $ echo 6 > outside/f
68 68 $ hg commit -Aqm 'outside 6'
69 69
70 $ hg merge -r 'desc("outside 4c")' 2>&1 | egrep -v '(warning:|incomplete!)'
70 $ hg merge -r 'desc("outside 4c")' 2>&1 | grep -E -v '(warning:|incomplete!)'
71 71 merging outside/f
72 72 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
73 73 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
@@ -79,7 +79,7 b' create full repo'
79 79 $ echo 8 > outside/f
80 80 $ hg commit -Aqm 'outside 8'
81 81
82 $ hg merge -r 'desc("outside 4d")' 2>&1 | egrep -v '(warning:|incomplete!)'
82 $ hg merge -r 'desc("outside 4d")' 2>&1 | grep -E -v '(warning:|incomplete!)'
83 83 merging outside/f
84 84 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
85 85 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
@@ -279,7 +279,7 b' Incremental test case: show a pull can p'
279 279 $ cd ../pullmaster
280 280 $ hg update -r 'desc("outside 4a")'
281 281 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
282 $ hg merge -r 'desc("outside 4b")' 2>&1 | egrep -v '(warning:|incomplete!)'
282 $ hg merge -r 'desc("outside 4b")' 2>&1 | grep -E -v '(warning:|incomplete!)'
283 283 merging inside/f
284 284 merging outside/f
285 285 0 files updated, 0 files merged, 0 files removed, 2 files unresolved
@@ -293,7 +293,7 b' Incremental test case: show a pull can p'
293 293
294 294 $ hg update -r 'desc("outside 4c")'
295 295 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
296 $ hg merge -r 'desc("outside 4d")' 2>&1 | egrep -v '(warning:|incomplete!)'
296 $ hg merge -r 'desc("outside 4d")' 2>&1 | grep -E -v '(warning:|incomplete!)'
297 297 merging inside/f
298 298 merging outside/f
299 299 0 files updated, 0 files merged, 0 files removed, 2 files unresolved
@@ -9,9 +9,6 b' before d74fc8dec2b4 still work.'
9 9 > #
10 10 > # An example CGI script to use hgweb, edit as necessary
11 11 >
12 > import cgitb
13 > cgitb.enable()
14 >
15 12 > from mercurial import demandimport; demandimport.enable()
16 13 > from mercurial.hgweb import hgweb
17 14 > from mercurial.hgweb import wsgicgi
@@ -35,9 +32,6 b' before d74fc8dec2b4 still work.'
35 32 > #
36 33 > # An example CGI script to export multiple hgweb repos, edit as necessary
37 34 >
38 > import cgitb
39 > cgitb.enable()
40 >
41 35 > from mercurial import demandimport; demandimport.enable()
42 36 > from mercurial.hgweb import hgwebdir
43 37 > from mercurial.hgweb import wsgicgi
@@ -9,9 +9,6 b' This is a rudimentary test of the CGI fi'
9 9 > #
10 10 > # An example CGI script to use hgweb, edit as necessary
11 11 >
12 > import cgitb
13 > cgitb.enable()
14 >
15 12 > from mercurial import demandimport; demandimport.enable()
16 13 > from mercurial.hgweb import hgweb
17 14 > from mercurial.hgweb import wsgicgi
@@ -32,9 +29,6 b' This is a rudimentary test of the CGI fi'
32 29 > #
33 30 > # An example CGI script to export multiple hgweb repos, edit as necessary
34 31 >
35 > import cgitb
36 > cgitb.enable()
37 >
38 32 > from mercurial import demandimport; demandimport.enable()
39 33 > from mercurial.hgweb import hgwebdir
40 34 > from mercurial.hgweb import wsgicgi
@@ -17,7 +17,7 b' Create a repo, set the username to somet'
17 17 adding a
18 18 $ hg commit -m "Initial commit"
19 19 $ echo a >> a
20 $ hg amend 2>&1 | egrep -v '^(\*\*| )'
20 $ hg amend 2>&1 | grep -E -v '^(\*\*| )'
21 21 transaction abort!
22 22 rollback completed
23 23 Traceback (most recent call last):
@@ -674,19 +674,19 b' fix the divergence'
674 674
675 675 check an obsolete changeset that was rewritten and also split
676 676
677 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=paper' | egrep 'rewritten|split'
677 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=paper' | grep -E 'rewritten|split'
678 678 <td>rewritten as <a href="/rev/bed64f5d2f5a?style=paper">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span><br>
679 679 split as <a href="/rev/7ae126973a96?style=paper">7ae126973a96</a> <a href="/rev/14608b260df8?style=paper">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
680 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=coal' | egrep 'rewritten|split'
680 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=coal' | grep -E 'rewritten|split'
681 681 <td>rewritten as <a href="/rev/bed64f5d2f5a?style=coal">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span><br>
682 682 split as <a href="/rev/7ae126973a96?style=coal">7ae126973a96</a> <a href="/rev/14608b260df8?style=coal">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
683 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=gitweb' | egrep 'rewritten|split'
683 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=gitweb' | grep -E 'rewritten|split'
684 684 <td>rewritten as <a class="list" href="/rev/bed64f5d2f5a?style=gitweb">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
685 685 <td>split as <a class="list" href="/rev/7ae126973a96?style=gitweb">7ae126973a96</a> <a class="list" href="/rev/14608b260df8?style=gitweb">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
686 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=monoblue' | egrep 'rewritten|split'
686 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=monoblue' | grep -E 'rewritten|split'
687 687 <dd>rewritten as <a href="/rev/bed64f5d2f5a?style=monoblue">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></dd>
688 688 <dd>split as <a href="/rev/7ae126973a96?style=monoblue">7ae126973a96</a> <a href="/rev/14608b260df8?style=monoblue">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></dd>
689 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=spartan' | egrep 'rewritten|split'
689 $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=spartan' | grep -E 'rewritten|split'
690 690 <td class="obsolete">rewritten as <a href="/rev/bed64f5d2f5a?style=spartan">bed64f5d2f5a</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
691 691 <td class="obsolete">split as <a href="/rev/7ae126973a96?style=spartan">7ae126973a96</a> <a href="/rev/14608b260df8?style=spartan">14608b260df8</a> by &#116;&#101;&#115;&#116; <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
692 692
@@ -1233,23 +1233,23 b' check changeset with instabilities'
1233 1233
1234 1234 check explanation for an orphan, phase-divergent and content-divergent changeset
1235 1235
1236 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=paper' | egrep '(orphan|phase-divergent|content-divergent):'
1236 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=paper' | grep -E '(orphan|phase-divergent|content-divergent):'
1237 1237 <td>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=paper">3de5eca88c00</a><br>
1238 1238 phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=paper">245bde4270cd</a><br>
1239 1239 content-divergent: <a href="/rev/6f9641995072?style=paper">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=paper">245bde4270cd</a></td>
1240 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=coal' | egrep '(orphan|phase-divergent|content-divergent):'
1240 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=coal' | grep -E '(orphan|phase-divergent|content-divergent):'
1241 1241 <td>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=coal">3de5eca88c00</a><br>
1242 1242 phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=coal">245bde4270cd</a><br>
1243 1243 content-divergent: <a href="/rev/6f9641995072?style=coal">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=coal">245bde4270cd</a></td>
1244 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=gitweb' | egrep '(orphan|phase-divergent|content-divergent):'
1244 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=gitweb' | grep -E '(orphan|phase-divergent|content-divergent):'
1245 1245 <td>orphan: obsolete parent <a class="list" href="/rev/3de5eca88c00?style=gitweb">3de5eca88c00</a></td>
1246 1246 <td>phase-divergent: immutable predecessor <a class="list" href="/rev/245bde4270cd?style=gitweb">245bde4270cd</a></td>
1247 1247 <td>content-divergent: <a class="list" href="/rev/6f9641995072?style=gitweb">6f9641995072</a> (draft) predecessor <a class="list" href="/rev/245bde4270cd?style=gitweb">245bde4270cd</a></td>
1248 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=monoblue' | egrep '(orphan|phase-divergent|content-divergent):'
1248 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=monoblue' | grep -E '(orphan|phase-divergent|content-divergent):'
1249 1249 <dd>orphan: obsolete parent <a href="/rev/3de5eca88c00?style=monoblue">3de5eca88c00</a></dd>
1250 1250 <dd>phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=monoblue">245bde4270cd</a></dd>
1251 1251 <dd>content-divergent: <a href="/rev/6f9641995072?style=monoblue">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=monoblue">245bde4270cd</a></dd>
1252 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=spartan' | egrep '(orphan|phase-divergent|content-divergent):'
1252 $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=spartan' | grep -E '(orphan|phase-divergent|content-divergent):'
1253 1253 <td class="unstable">orphan: obsolete parent <a href="/rev/3de5eca88c00?style=spartan">3de5eca88c00</a></td>
1254 1254 <td class="unstable">phase-divergent: immutable predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td>
1255 1255 <td class="unstable">content-divergent: <a href="/rev/6f9641995072?style=spartan">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td>
@@ -8,8 +8,7 b' This tests if CGI files from before d0db'
8 8 > #
9 9 > # An example CGI script to use hgweb, edit as necessary
10 10 >
11 > import cgitb, os, sys
12 > cgitb.enable()
11 > import os, sys
13 12 >
14 13 > # sys.path.insert(0, "/path/to/python/lib") # if not a system-wide install
15 14 > from mercurial import hgweb
@@ -30,8 +29,7 b' This tests if CGI files from before d0db'
30 29 > #
31 30 > # An example CGI script to export multiple hgweb repos, edit as necessary
32 31 >
33 > import cgitb, sys
34 > cgitb.enable()
32 > import sys
35 33 >
36 34 > # sys.path.insert(0, "/path/to/python/lib") # if not a system-wide install
37 35 > from mercurial import hgweb
@@ -5,9 +5,8 b' Set up SMTP server:'
5 5 $ CERTSDIR="$TESTDIR/sslcerts"
6 6 $ cat "$CERTSDIR/priv.pem" "$CERTSDIR/pub.pem" >> server.pem
7 7
8 $ "$PYTHON" "$TESTDIR/dummysmtpd.py" -p $HGPORT --pid-file a.pid -d \
8 $ "$PYTHON" "$TESTDIR/dummysmtpd.py" -p $HGPORT --pid-file a.pid --logfile log -d \
9 9 > --tls smtps --certificate `pwd`/server.pem
10 listening at localhost:$HGPORT (?)
11 10 $ cat a.pid >> $DAEMON_PIDS
12 11
13 12 Set up repository:
@@ -47,6 +46,11 b' we are able to load CA certs:'
47 46 (an attempt was made to load CA certificates but none were loaded; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this error)
48 47 (?i)abort: .*?certificate.verify.failed.* (re)
49 48 [255]
49
50 $ cat ../log
51 * ssl error: * (glob)
52 $ : > ../log
53
50 54 #endif
51 55
52 56 #if defaultcacertsloaded
@@ -58,6 +62,10 b' we are able to load CA certs:'
58 62 (?i)abort: .*?certificate.verify.failed.* (re)
59 63 [255]
60 64
65 $ cat ../log
66 * ssl error: * (glob)
67 $ : > ../log
68
61 69 #endif
62 70
63 71 $ DISABLECACERTS="--config devel.disableloaddefaultcerts=true"
@@ -75,6 +83,11 b' Without certificates:'
75 83 (see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this error or set hostsecurity.localhost:fingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e to trust this server)
76 84 [150]
77 85
86 $ cat ../log
87 connection from * (glob)
88 no hello: b''
89 $ : > ../log
90
78 91 With global certificates:
79 92
80 93 $ try --debug --config web.cacerts="$CERTSDIR/pub.pem"
@@ -86,6 +99,40 b' With global certificates:'
86 99 (verifying remote certificate)
87 100 sending [PATCH] a ...
88 101
102 $ cat ../log
103 connection from * (glob)
104 * from=quux to=foo, bar (glob)
105 MIME-Version: 1.0
106 Content-Type: text/plain; charset="us-ascii"
107 Content-Transfer-Encoding: 7bit
108 Subject: [PATCH] a
109 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
110 X-Mercurial-Series-Index: 1
111 X-Mercurial-Series-Total: 1
112 Message-Id: <*@test-hostname> (glob)
113 X-Mercurial-Series-Id: <*@test-hostname> (glob)
114 User-Agent: Mercurial-patchbomb* (glob)
115 Date: * (glob)
116 From: quux
117 To: foo
118 Cc: bar
119
120 # HG changeset patch
121 # User test
122 # Date 1 0
123 # Thu Jan 01 00:00:01 1970 +0000
124 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
125 # Parent 0000000000000000000000000000000000000000
126 a
127
128 diff -r 0000000000000000000000000000000000000000 -r 8580ff50825a50c8f716709acdf8de0deddcd6ab a
129 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
130 +++ b/a Thu Jan 01 00:00:01 1970 +0000
131 @@ -0,0 +1,1 @@
132 +a
133
134 $ : > ../log
135
89 136 With invalid certificates:
90 137
91 138 $ try --config web.cacerts="$CERTSDIR/pub-other.pem"
@@ -96,4 +143,8 b' With invalid certificates:'
96 143 (?i)abort: .*?certificate.verify.failed.* (re)
97 144 [255]
98 145
146 $ cat ../log
147 * ssl error: * (glob)
148 $ : > ../log
149
99 150 $ cd ..
@@ -43,7 +43,7 b' Simple case'
43 43
44 44 No race condition
45 45
46 $ hg clone -U --stream ssh://user@dummy/test-repo stream-clone --debug | egrep '00(changelog|manifest)'
46 $ hg clone -U --stream ssh://user@dummy/test-repo stream-clone --debug | grep -E '00(changelog|manifest)'
47 47 adding [s] 00manifest.n (62 bytes)
48 48 adding [s] 00manifest-*.nd (118 KB) (glob)
49 49 adding [s] 00manifest.d (4?? KB) (glob)
@@ -52,7 +52,7 b' No race condition'
52 52 adding [s] 00changelog-*.nd (118 KB) (glob)
53 53 adding [s] 00changelog.d (3?? KB) (glob)
54 54 adding [s] 00changelog.i (313 KB)
55 $ ls -1 stream-clone/.hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
55 $ ls -1 stream-clone/.hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
56 56 00changelog-*.nd (glob)
57 57 00changelog.n
58 58 00manifest-*.nd (glob)
@@ -112,7 +112,7 b' Prepare a commit'
112 112
113 113 Do a mix of clone and commit at the same time so that the file listed on disk differ at actual transfer time.
114 114
115 $ (hg clone -U --stream ssh://user@dummy/test-repo stream-clone-race-1 --debug 2>> clone-output | egrep '00(changelog|manifest)' >> clone-output; touch $HG_TEST_STREAM_WALKED_FILE_3) &
115 $ (hg clone -U --stream ssh://user@dummy/test-repo stream-clone-race-1 --debug 2>> clone-output | grep -E '00(changelog|manifest)' >> clone-output; touch $HG_TEST_STREAM_WALKED_FILE_3) &
116 116 $ $RUNTESTDIR/testlib/wait-on-file 10 $HG_TEST_STREAM_WALKED_FILE_1
117 117 $ hg -R test-repo/ commit -m foo
118 118 created new head
@@ -211,7 +211,7 b' Check the initial state'
211 211 Performe the mix of clone and full refresh of the nodemap, so that the files
212 212 (and filenames) are different between listing time and actual transfer time.
213 213
214 $ (hg clone -U --stream ssh://user@dummy/test-repo stream-clone-race-2 --debug 2>> clone-output-2 | egrep '00(changelog|manifest)' >> clone-output-2; touch $HG_TEST_STREAM_WALKED_FILE_3) &
214 $ (hg clone -U --stream ssh://user@dummy/test-repo stream-clone-race-2 --debug 2>> clone-output-2 | grep -E '00(changelog|manifest)' >> clone-output-2; touch $HG_TEST_STREAM_WALKED_FILE_3) &
215 215 $ $RUNTESTDIR/testlib/wait-on-file 10 $HG_TEST_STREAM_WALKED_FILE_1
216 216 $ rm test-repo/.hg/store/00changelog.n
217 217 $ rm test-repo/.hg/store/00changelog-*.nd
@@ -615,10 +615,10 b' read/write patterns.'
615 615 $ hg share race-repo ./other-wc --config format.use-share-safe=yes
616 616 updating working directory
617 617 5001 files updated, 0 files merged, 0 files removed, 0 files unresolved
618 $ hg debugformat -R ./race-repo | egrep 'share-safe|persistent-nodemap'
618 $ hg debugformat -R ./race-repo | grep -E 'share-safe|persistent-nodemap'
619 619 share-safe: yes
620 620 persistent-nodemap: yes
621 $ hg debugformat -R ./other-wc/ | egrep 'share-safe|persistent-nodemap'
621 $ hg debugformat -R ./other-wc/ | grep -E 'share-safe|persistent-nodemap'
622 622 share-safe: yes
623 623 persistent-nodemap: yes
624 624 $ hg -R ./other-wc update 'min(head())'
@@ -818,7 +818,7 b' downgrading'
818 818 - changelog
819 819 - manifest
820 820
821 $ ls -1 .hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
821 $ ls -1 .hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
822 822 [1]
823 823 $ hg debugnodemap --metadata
824 824
@@ -860,7 +860,7 b' upgrading'
860 860 - changelog
861 861 - manifest
862 862
863 $ ls -1 .hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
863 $ ls -1 .hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
864 864 00changelog-*.nd (glob)
865 865 00changelog.n
866 866 00manifest-*.nd (glob)
@@ -891,7 +891,7 b' Running unrelated upgrade'
891 891 - changelog
892 892 - manifest
893 893
894 $ ls -1 .hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
894 $ ls -1 .hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
895 895 00changelog-*.nd (glob)
896 896 00changelog.n
897 897 00manifest-*.nd (glob)
@@ -916,7 +916,7 b' standard clone'
916 916 The persistent nodemap should exist after a streaming clone
917 917
918 918 $ hg clone --pull --quiet -U test-repo standard-clone
919 $ ls -1 standard-clone/.hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
919 $ ls -1 standard-clone/.hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
920 920 00changelog-*.nd (glob)
921 921 00changelog.n
922 922 00manifest-*.nd (glob)
@@ -936,7 +936,7 b' local clone'
936 936 The persistent nodemap should exist after a streaming clone
937 937
938 938 $ hg clone -U test-repo local-clone
939 $ ls -1 local-clone/.hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
939 $ ls -1 local-clone/.hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
940 940 00changelog-*.nd (glob)
941 941 00changelog.n
942 942 00manifest-*.nd (glob)
@@ -6,7 +6,7 b' test --time'
6 6
7 7 Function to check that statprof ran
8 8 $ statprofran () {
9 > egrep 'Sample count:|No samples recorded' > /dev/null
9 > grep -E 'Sample count:|No samples recorded' > /dev/null
10 10 > }
11 11
12 12 test --profile
@@ -16,8 +16,6 b' initialize repository'
16 16 create hgweb invocation script
17 17
18 18 $ cat >hgweb.cgi <<HGWEB
19 > import cgitb
20 > cgitb.enable()
21 19 > from mercurial import demandimport; demandimport.enable()
22 20 > from mercurial.hgweb import hgweb
23 21 > from mercurial.hgweb import wsgicgi
@@ -5,7 +5,7 b' Setup'
5 5
6 6 $ cat > $TESTTMP/pretxnchangegroup.sh << EOF
7 7 > #!/bin/sh
8 > env | egrep "^HG_USERVAR_(DEBUG|BYPASS_REVIEW)" | sort
8 > env | grep -E "^HG_USERVAR_(DEBUG|BYPASS_REVIEW)" | sort
9 9 > exit 0
10 10 > EOF
11 11 $ cat >> $HGRCPATH << EOF
@@ -37,7 +37,7 b' Verify corrupt cache error message'
37 37 > EOF
38 38 $ chmod u+w $CACHEDIR/master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/1406e74118627694268417491f018a4a883152f0
39 39 $ echo x > $CACHEDIR/master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/1406e74118627694268417491f018a4a883152f0
40 $ hg up tip 2>&1 | egrep "^[^ ].*unexpected remotefilelog"
40 $ hg up tip 2>&1 | grep -E "^[^ ].*unexpected remotefilelog"
41 41 abort: unexpected remotefilelog header: illegal format
42 42
43 43 Verify detection and remediation when remotefilelog.validatecachelog is set
@@ -106,6 +106,11 b''
106 106 # Test that warning is displayed when the repo path is malformed
107 107
108 108 $ printf "asdas\0das" >> $CACHEDIR/repos
109 #if py311
110 $ hg gc
111 finished: removed 0 of 4 files (0.00 GB to 0.00 GB)
112 #else
109 113 $ hg gc
110 114 abort: invalid path asdas\x00da: .*(null|NULL).* (re)
111 115 [255]
116 #endif
@@ -41,7 +41,7 b''
41 41 2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob)
42 42 $ hg repack
43 43
44 $ find $CACHEDIR | sort | egrep ".datapack|.histpack"
44 $ find $CACHEDIR | sort | grep -E ".datapack|.histpack"
45 45 $TESTTMP/hgcache/master/packs/7bcd2d90b99395ca43172a0dd24e18860b2902f9.histpack
46 46 $TESTTMP/hgcache/master/packs/dc8f8fdc76690ce27791ce9f53a18da379e50d37.datapack
47 47
@@ -72,7 +72,7 b''
72 72
73 73 $ hg repack
74 74
75 $ find $CACHEDIR | sort | egrep ".datapack|.histpack"
75 $ find $CACHEDIR | sort | grep -E ".datapack|.histpack"
76 76 $TESTTMP/hgcache/master/packs/7bcd2d90b99395ca43172a0dd24e18860b2902f9.histpack
77 77 $TESTTMP/hgcache/master/packs/a4e1d094ec2aee8a08a4d6d95a13c634cc7d7394.datapack
78 78
@@ -98,7 +98,7 b''
98 98 2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob)
99 99 $ hg repack
100 100
101 $ find $CACHEDIR | sort | egrep ".datapack|.histpack"
101 $ find $CACHEDIR | sort | grep -E ".datapack|.histpack"
102 102 $TESTTMP/hgcache/master/packs/7bcd2d90b99395ca43172a0dd24e18860b2902f9.histpack
103 103 $TESTTMP/hgcache/master/packs/dc8f8fdc76690ce27791ce9f53a18da379e50d37.datapack
104 104
@@ -130,7 +130,7 b''
130 130
131 131 $ hg repack
132 132
133 $ find $CACHEDIR | sort | egrep ".datapack|.histpack"
133 $ find $CACHEDIR | sort | grep -E ".datapack|.histpack"
134 134 $TESTTMP/hgcache/master/packs/7bcd2d90b99395ca43172a0dd24e18860b2902f9.histpack
135 135 $TESTTMP/hgcache/master/packs/dc8f8fdc76690ce27791ce9f53a18da379e50d37.datapack
136 136
@@ -61,10 +61,10 b' Check that we can upgrade to sidedata'
61 61 -------------------------------------
62 62
63 63 $ hg init up-no-side-data --config experimental.revlogv2=no
64 $ hg debugformat -v -R up-no-side-data | egrep 'changelog-v2|revlog-v2'
64 $ hg debugformat -v -R up-no-side-data | grep -E 'changelog-v2|revlog-v2'
65 65 revlog-v2: no no no
66 66 changelog-v2: no no no
67 $ hg debugformat -v -R up-no-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data | egrep 'changelog-v2|revlog-v2'
67 $ hg debugformat -v -R up-no-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data | grep -E 'changelog-v2|revlog-v2'
68 68 revlog-v2: no yes no
69 69 changelog-v2: no no no
70 70 $ hg debugupgraderepo -R up-no-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data > /dev/null
@@ -73,10 +73,10 b' Check that we can downgrade from sidedat'
73 73 -----------------------------------------
74 74
75 75 $ hg init up-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data
76 $ hg debugformat -v -R up-side-data | egrep 'changelog-v2|revlog-v2'
76 $ hg debugformat -v -R up-side-data | grep -E 'changelog-v2|revlog-v2'
77 77 revlog-v2: yes no no
78 78 changelog-v2: no no no
79 $ hg debugformat -v -R up-side-data --config experimental.revlogv2=no | egrep 'changelog-v2|revlog-v2'
79 $ hg debugformat -v -R up-side-data --config experimental.revlogv2=no | grep -E 'changelog-v2|revlog-v2'
80 80 revlog-v2: yes no no
81 81 changelog-v2: no no no
82 82 $ hg debugupgraderepo -R up-side-data --config experimental.revlogv2=no > /dev/null
@@ -312,7 +312,7 b' Mix files and subdirectories, both "glob'
312 312 $ touch dir1/notshown
313 313 $ hg commit -A dir1/notshown -m "notshown"
314 314 $ hg debugsparse --include 'dir1/dir2'
315 $ "$PYTHON" $TESTDIR/list-tree.py . | egrep -v '\.[\/]\.hg'
315 $ "$PYTHON" $TESTDIR/list-tree.py . | grep -E -v '\.[\/]\.hg'
316 316 ./
317 317 ./dir1/
318 318 ./dir1/dir2/
@@ -320,7 +320,7 b' Mix files and subdirectories, both "glob'
320 320 ./hide.orig
321 321 $ hg debugsparse --delete 'dir1/dir2'
322 322 $ hg debugsparse --include 'glob:dir1/dir2'
323 $ "$PYTHON" $TESTDIR/list-tree.py . | egrep -v '\.[\/]\.hg'
323 $ "$PYTHON" $TESTDIR/list-tree.py . | grep -E -v '\.[\/]\.hg'
324 324 ./
325 325 ./dir1/
326 326 ./dir1/dir2/
@@ -396,7 +396,7 b' Archive wdir() with subrepos'
396 396 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (esc)
397 397 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (esc)
398 398 \r (no-eol) (esc)
399 $ diff -r . ../wdir | egrep -v '\.hg$|^Common subdirectories:'
399 $ diff -r . ../wdir | grep -E -v '\.hg$|^Common subdirectories:'
400 400 Only in ../wdir: .hg_archival.txt
401 401
402 402 $ find ../wdir -type f | sort
@@ -815,7 +815,7 b' largefile and a normal file. Then a lar'
815 815 $ hg add sub1/sub2
816 816
817 817 $ hg archive -S -r 'wdir()' ../wdir2
818 $ diff -r . ../wdir2 | egrep -v '\.hg$|^Common subdirectories:'
818 $ diff -r . ../wdir2 | grep -E -v '\.hg$|^Common subdirectories:'
819 819 Only in ../wdir2: .hg_archival.txt
820 820 Only in .: .hglf
821 821 Only in .: foo
@@ -854,7 +854,7 b" Test 'wdir()' modified file archiving wi"
854 854 $ echo 'mod' > large.bin
855 855 $ echo 'mod' > sub1/sub2/large.dat
856 856 $ hg archive -S -r 'wdir()' ../wdir3
857 $ diff -r . ../wdir3 | egrep -v '\.hg$|^Common subdirectories'
857 $ diff -r . ../wdir3 | grep -E -v '\.hg$|^Common subdirectories'
858 858 Only in ../wdir3: .hg_archival.txt
859 859 Only in .: .hglf
860 860 Only in .: foo
@@ -263,7 +263,7 b' make upstream git changes'
263 263 make and push changes to hg without updating the subrepo
264 264
265 265 $ cd ../t
266 $ hg clone . ../td 2>&1 | egrep -v '^Cloning into|^done\.'
266 $ hg clone . ../td 2>&1 | grep -E -v '^Cloning into|^done\.'
267 267 updating to branch default
268 268 cloning subrepo s from $TESTTMP/gitroot
269 269 checking out detached HEAD in subrepository "s"
@@ -436,7 +436,7 b' Test archiving to zip file (unzip output'
436 436
437 437 (unzip date formating is unstable, we do not care about it and glob it out)
438 438
439 $ unzip -l ../archive.zip | grep -v -- ----- | egrep -v files$
439 $ unzip -l ../archive.zip | grep -v -- ----- | grep -E -v files$
440 440 Archive: ../archive.zip
441 441 Length [ ]* Date [ ]* Time [ ]* Name (re)
442 442 172 [0-9:\- ]* .hg_archival.txt (re)
@@ -4,7 +4,7 b''
4 4 $ SVNREPOURL="`"$PYTHON" $TESTDIR/svnurlof.py \"$SVNREPOPATH\"`"
5 5
6 6 $ filter_svn_output () {
7 > egrep -v 'Committing|Transmitting|Updating|(^$)' || true
7 > grep -E -v 'Committing|Transmitting|Updating|(^$)' || true
8 8 > }
9 9
10 10 create subversion repo
@@ -227,7 +227,7 b' as default style, except for extra phase'
227 227 $ hg log --style default > style.out
228 228 $ cmp log.out style.out || diff -u log.out style.out
229 229 $ hg log -T phases > phases.out
230 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
230 $ diff -U 0 log.out phases.out | grep -E -v '^---|^\+\+\+|^@@'
231 231 +phase: draft
232 232 +phase: draft
233 233 +phase: draft
@@ -243,7 +243,7 b' as default style, except for extra phase'
243 243 $ hg log -v --style default > style.out
244 244 $ cmp log.out style.out || diff -u log.out style.out
245 245 $ hg log -v -T phases > phases.out
246 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
246 $ diff -U 0 log.out phases.out | grep -E -v '^---|^\+\+\+|^@@'
247 247 +phase: draft
248 248 +phase: draft
249 249 +phase: draft
@@ -299,7 +299,7 b' Default style should also preserve color'
299 299 $ hg --color=debug log --style default > style.out
300 300 $ cmp log.out style.out || diff -u log.out style.out
301 301 $ hg --color=debug log -T phases > phases.out
302 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
302 $ diff -U 0 log.out phases.out | grep -E -v '^---|^\+\+\+|^@@'
303 303 +[log.phase|phase: draft]
304 304 +[log.phase|phase: draft]
305 305 +[log.phase|phase: draft]
@@ -315,7 +315,7 b' Default style should also preserve color'
315 315 $ hg --color=debug -v log --style default > style.out
316 316 $ cmp log.out style.out || diff -u log.out style.out
317 317 $ hg --color=debug -v log -T phases > phases.out
318 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
318 $ diff -U 0 log.out phases.out | grep -E -v '^---|^\+\+\+|^@@'
319 319 +[log.phase|phase: draft]
320 320 +[log.phase|phase: draft]
321 321 +[log.phase|phase: draft]
@@ -2013,7 +2013,7 b' downgrade it from dirstate-v2 automatica'
2013 2013 For multiple change at the same time
2014 2014 ------------------------------------
2015 2015
2016 $ hg debugformat -R auto-upgrade | egrep '(dirstate-v2|tracked|share-safe)'
2016 $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
2017 2017 dirstate-v2: no
2018 2018 tracked-hint: yes
2019 2019 share-safe: no
@@ -2031,7 +2031,7 b' For multiple change at the same time'
2031 2031 (see `hg help config.format.use-share-safe` for details)
2032 2032 automatically downgrading repository from the `tracked-hint` feature
2033 2033 (see `hg help config.format.use-dirstate-tracked-hint` for details)
2034 $ hg debugformat -R auto-upgrade | egrep '(dirstate-v2|tracked|share-safe)'
2034 $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
2035 2035 dirstate-v2: yes
2036 2036 tracked-hint: no
2037 2037 share-safe: yes
@@ -2040,7 +2040,7 b' Quiet upgrade and downgrade'
2040 2040 ---------------------------
2041 2041
2042 2042
2043 $ hg debugformat -R auto-upgrade | egrep '(dirstate-v2|tracked|share-safe)'
2043 $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
2044 2044 dirstate-v2: yes
2045 2045 tracked-hint: no
2046 2046 share-safe: yes
@@ -2055,7 +2055,7 b' Quiet upgrade and downgrade'
2055 2055 > --config format.use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet=yes \
2056 2056 > --config format.use-share-safe=no
2057 2057
2058 $ hg debugformat -R auto-upgrade | egrep '(dirstate-v2|tracked|share-safe)'
2058 $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
2059 2059 dirstate-v2: no
2060 2060 tracked-hint: yes
2061 2061 share-safe: no
@@ -2070,7 +2070,7 b' Quiet upgrade and downgrade'
2070 2070 > --config format.use-share-safe.automatic-upgrade-of-mismatching-repositories=yes \
2071 2071 > --config format.use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet=yes \
2072 2072 > --config format.use-share-safe=yes
2073 $ hg debugformat -R auto-upgrade | egrep '(dirstate-v2|tracked|share-safe)'
2073 $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
2074 2074 dirstate-v2: yes
2075 2075 tracked-hint: no
2076 2076 share-safe: yes
@@ -676,7 +676,7 b' Test split patterns on overflow'
676 676 > EOF
677 677 $ "$PYTHON" printnum.py >> overflow.list
678 678 $ echo fenugreek >> overflow.list
679 $ hg debugwalk 'listfile:overflow.list' 2>&1 | egrep -v '^xxx'
679 $ hg debugwalk 'listfile:overflow.list' 2>&1 | grep -E -v '^xxx'
680 680 f fennel fennel exact
681 681 f fenugreek fenugreek exact
682 682 $ cd ..
@@ -84,7 +84,7 b' Known exception should be caught, but pr'
84 84 [255]
85 85
86 86 $ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
87 > test 100000.0 abort --traceback 2>&1 | egrep '(WorkerError|Abort)'
87 > test 100000.0 abort --traceback 2>&1 | grep -E '(WorkerError|Abort)'
88 88 raise error.Abort(b'known exception')
89 89 mercurial.error.Abort: known exception
90 90 raise error.WorkerError(status)
General Comments 0
You need to be logged in to leave comments. Login now