Mercurial > hg
view tests/test-grep.t @ 44216:281b6690e646
packaging: add support for PyOxidizer
I've successfully built Mercurial on the development tip of
PyOxidizer on Linux and Windows. It mostly "just works" on Linux.
Windows is a bit more finicky.
In-memory resource files are probably not all working correctly
due to bugs in PyOxidizer's naming of modules. PyOxidizer now
now supports installing files next to the produced binary. (We
do this for templates in the added file.) So a workaround
should be available.
Also, since the last time I submitted support for PyOxidizer,
PyOxidizer gained the ability to auto-generate Rust projects
to build executables. So we don't need to worry about vendoring
any Rust code to initially support PyOxidizer. However, at some
point we will likely want to write our own command line driver
that embeds a Python interpreter via PyOxidizer so we can run
Rust code outside the confines of a Python interpreter. But that
will be a follow-up.
I would also like to add packaging.py CLI commands to build
PyOxidizer distributions. This can come later, if ever.
PyOxidizer's new "targets" feature makes it really easy to define
packaging tasks in its Starlark configuration file. While not
much is implemented yet, eventually we should be able to produce
MSIs, etc using a `pyoxidizer build` one-liner. We'll get there...
Differential Revision: https://phab.mercurial-scm.org/D7450
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 26 Jan 2020 16:23:57 -0800 |
parents | 8cb5f96db235 |
children | 7e7080ab8ba8 |
line wrap: on
line source
$ hg init t $ cd t $ echo import > port $ hg add port $ hg commit -m 0 -u spam -d '0 0' $ echo export >> port $ hg commit -m 1 -u eggs -d '1 0' $ echo export > port $ echo vaportight >> port $ echo 'import/export' >> port $ hg commit -m 2 -u spam -d '2 0' $ echo 'import/export' >> port $ hg commit -m 3 -u eggs -d '3 0' $ head -n 3 port > port1 $ mv port1 port $ hg commit -m 4 -u spam -d '4 0' pattern error $ hg grep '**test**' grep: invalid match pattern: nothing to repeat* (glob) [1] simple $ hg grep -r tip:0 '.*' port:4:export port:4:vaportight port:4:import/export port:3:export port:3:vaportight port:3:import/export port:3:import/export port:2:export port:2:vaportight port:2:import/export port:1:import port:1:export port:0:import $ hg grep -r tip:0 port port port:4:export port:4:vaportight port:4:import/export port:3:export port:3:vaportight port:3:import/export port:3:import/export port:2:export port:2:vaportight port:2:import/export port:1:import port:1:export port:0:import simple from subdirectory $ mkdir dir $ cd dir $ hg grep -r tip:0 port port:4:export port:4:vaportight port:4:import/export port:3:export port:3:vaportight port:3:import/export port:3:import/export port:2:export port:2:vaportight port:2:import/export port:1:import port:1:export port:0:import $ hg grep -r tip:0 port --config ui.relative-paths=yes ../port:4:export ../port:4:vaportight ../port:4:import/export ../port:3:export ../port:3:vaportight ../port:3:import/export ../port:3:import/export ../port:2:export ../port:2:vaportight ../port:2:import/export ../port:1:import ../port:1:export ../port:0:import $ cd .. simple with color $ hg --config extensions.color= grep --config color.mode=ansi \ > --color=always port port -r tip:0 \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m4\x1b[0m\x1b[0;36m:\x1b[0mex\x1b[0;31;1mport\x1b[0m (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m4\x1b[0m\x1b[0;36m:\x1b[0mva\x1b[0;31;1mport\x1b[0might (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m4\x1b[0m\x1b[0;36m:\x1b[0mim\x1b[0;31;1mport\x1b[0m/ex\x1b[0;31;1mport\x1b[0m (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m3\x1b[0m\x1b[0;36m:\x1b[0mex\x1b[0;31;1mport\x1b[0m (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m3\x1b[0m\x1b[0;36m:\x1b[0mva\x1b[0;31;1mport\x1b[0might (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m3\x1b[0m\x1b[0;36m:\x1b[0mim\x1b[0;31;1mport\x1b[0m/ex\x1b[0;31;1mport\x1b[0m (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m3\x1b[0m\x1b[0;36m:\x1b[0mim\x1b[0;31;1mport\x1b[0m/ex\x1b[0;31;1mport\x1b[0m (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m2\x1b[0m\x1b[0;36m:\x1b[0mex\x1b[0;31;1mport\x1b[0m (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m2\x1b[0m\x1b[0;36m:\x1b[0mva\x1b[0;31;1mport\x1b[0might (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m2\x1b[0m\x1b[0;36m:\x1b[0mim\x1b[0;31;1mport\x1b[0m/ex\x1b[0;31;1mport\x1b[0m (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m1\x1b[0m\x1b[0;36m:\x1b[0mim\x1b[0;31;1mport\x1b[0m (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m1\x1b[0m\x1b[0;36m:\x1b[0mex\x1b[0;31;1mport\x1b[0m (esc) \x1b[0;35mport\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m0\x1b[0m\x1b[0;36m:\x1b[0mim\x1b[0;31;1mport\x1b[0m (esc) simple templated $ hg grep port -r tip:0 \ > -T '{path}:{rev}:{node|short}:{texts % "{if(matched, text|upper, text)}"}\n' port:4:914fa752cdea:exPORT port:4:914fa752cdea:vaPORTight port:4:914fa752cdea:imPORT/exPORT port:3:95040cfd017d:exPORT port:3:95040cfd017d:vaPORTight port:3:95040cfd017d:imPORT/exPORT port:3:95040cfd017d:imPORT/exPORT port:2:3b325e3481a1:exPORT port:2:3b325e3481a1:vaPORTight port:2:3b325e3481a1:imPORT/exPORT port:1:8b20f75c1585:imPORT port:1:8b20f75c1585:exPORT port:0:f31323c92170:imPORT $ hg grep port -r tip:0 -T '{path}:{rev}:{texts}\n' port:4:export port:4:vaportight port:4:import/export port:3:export port:3:vaportight port:3:import/export port:3:import/export port:2:export port:2:vaportight port:2:import/export port:1:import port:1:export port:0:import $ hg grep port -r tip:0 -T '{path}:{tags}:{texts}\n' port:tip:export port:tip:vaportight port:tip:import/export port::export port::vaportight port::import/export port::import/export port::export port::vaportight port::import/export port::import port::export port::import simple JSON (no "change" field) $ hg grep -r tip:0 -Tjson port [ { "date": [4, 0], "lineno": 1, "node": "914fa752cdea87777ac1a8d5c858b0c736218f6c", "path": "port", "rev": 4, "texts": [{"matched": false, "text": "ex"}, {"matched": true, "text": "port"}], "user": "spam" }, { "date": [4, 0], "lineno": 2, "node": "914fa752cdea87777ac1a8d5c858b0c736218f6c", "path": "port", "rev": 4, "texts": [{"matched": false, "text": "va"}, {"matched": true, "text": "port"}, {"matched": false, "text": "ight"}], "user": "spam" }, { "date": [4, 0], "lineno": 3, "node": "914fa752cdea87777ac1a8d5c858b0c736218f6c", "path": "port", "rev": 4, "texts": [{"matched": false, "text": "im"}, {"matched": true, "text": "port"}, {"matched": false, "text": "/ex"}, {"matched": true, "text": "port"}], "user": "spam" }, { "date": [3, 0], "lineno": 1, "node": "95040cfd017d658c536071c6290230a613c4c2a6", "path": "port", "rev": 3, "texts": [{"matched": false, "text": "ex"}, {"matched": true, "text": "port"}], "user": "eggs" }, { "date": [3, 0], "lineno": 2, "node": "95040cfd017d658c536071c6290230a613c4c2a6", "path": "port", "rev": 3, "texts": [{"matched": false, "text": "va"}, {"matched": true, "text": "port"}, {"matched": false, "text": "ight"}], "user": "eggs" }, { "date": [3, 0], "lineno": 3, "node": "95040cfd017d658c536071c6290230a613c4c2a6", "path": "port", "rev": 3, "texts": [{"matched": false, "text": "im"}, {"matched": true, "text": "port"}, {"matched": false, "text": "/ex"}, {"matched": true, "text": "port"}], "user": "eggs" }, { "date": [3, 0], "lineno": 4, "node": "95040cfd017d658c536071c6290230a613c4c2a6", "path": "port", "rev": 3, "texts": [{"matched": false, "text": "im"}, {"matched": true, "text": "port"}, {"matched": false, "text": "/ex"}, {"matched": true, "text": "port"}], "user": "eggs" }, { "date": [2, 0], "lineno": 1, "node": "3b325e3481a1f07435d81dfdbfa434d9a0245b47", "path": "port", "rev": 2, "texts": [{"matched": false, "text": "ex"}, {"matched": true, "text": "port"}], "user": "spam" }, { "date": [2, 0], "lineno": 2, "node": "3b325e3481a1f07435d81dfdbfa434d9a0245b47", "path": "port", "rev": 2, "texts": [{"matched": false, "text": "va"}, {"matched": true, "text": "port"}, {"matched": false, "text": "ight"}], "user": "spam" }, { "date": [2, 0], "lineno": 3, "node": "3b325e3481a1f07435d81dfdbfa434d9a0245b47", "path": "port", "rev": 2, "texts": [{"matched": false, "text": "im"}, {"matched": true, "text": "port"}, {"matched": false, "text": "/ex"}, {"matched": true, "text": "port"}], "user": "spam" }, { "date": [1, 0], "lineno": 1, "node": "8b20f75c158513ff5ac80bd0e5219bfb6f0eb587", "path": "port", "rev": 1, "texts": [{"matched": false, "text": "im"}, {"matched": true, "text": "port"}], "user": "eggs" }, { "date": [1, 0], "lineno": 2, "node": "8b20f75c158513ff5ac80bd0e5219bfb6f0eb587", "path": "port", "rev": 1, "texts": [{"matched": false, "text": "ex"}, {"matched": true, "text": "port"}], "user": "eggs" }, { "date": [0, 0], "lineno": 1, "node": "f31323c9217050ba245ee8b537c713ec2e8ab226", "path": "port", "rev": 0, "texts": [{"matched": false, "text": "im"}, {"matched": true, "text": "port"}], "user": "spam" } ] simple JSON without matching lines $ hg grep -r tip:0 -Tjson -l port [ { "date": [4, 0], "lineno": 1, "node": "914fa752cdea87777ac1a8d5c858b0c736218f6c", "path": "port", "rev": 4, "user": "spam" }, { "date": [3, 0], "lineno": 1, "node": "95040cfd017d658c536071c6290230a613c4c2a6", "path": "port", "rev": 3, "user": "eggs" }, { "date": [2, 0], "lineno": 1, "node": "3b325e3481a1f07435d81dfdbfa434d9a0245b47", "path": "port", "rev": 2, "user": "spam" }, { "date": [1, 0], "lineno": 1, "node": "8b20f75c158513ff5ac80bd0e5219bfb6f0eb587", "path": "port", "rev": 1, "user": "eggs" }, { "date": [0, 0], "lineno": 1, "node": "f31323c9217050ba245ee8b537c713ec2e8ab226", "path": "port", "rev": 0, "user": "spam" } ] all $ hg grep --traceback --all -nu port port port:4:4:-:spam:import/export port:3:4:+:eggs:import/export port:2:1:-:spam:import port:2:2:-:spam:export port:2:1:+:spam:export port:2:2:+:spam:vaportight port:2:3:+:spam:import/export port:1:2:+:eggs:export port:0:1:+:spam:import all JSON $ hg grep --all -Tjson port port [ { "change": "-", "date": [4, 0], "lineno": 4, "node": "914fa752cdea87777ac1a8d5c858b0c736218f6c", "path": "port", "rev": 4, "texts": [{"matched": false, "text": "im"}, {"matched": true, "text": "port"}, {"matched": false, "text": "/ex"}, {"matched": true, "text": "port"}], "user": "spam" }, { "change": "+", "date": [3, 0], "lineno": 4, "node": "95040cfd017d658c536071c6290230a613c4c2a6", "path": "port", "rev": 3, "texts": [{"matched": false, "text": "im"}, {"matched": true, "text": "port"}, {"matched": false, "text": "/ex"}, {"matched": true, "text": "port"}], "user": "eggs" }, { "change": "-", "date": [2, 0], "lineno": 1, "node": "3b325e3481a1f07435d81dfdbfa434d9a0245b47", "path": "port", "rev": 2, "texts": [{"matched": false, "text": "im"}, {"matched": true, "text": "port"}], "user": "spam" }, { "change": "-", "date": [2, 0], "lineno": 2, "node": "3b325e3481a1f07435d81dfdbfa434d9a0245b47", "path": "port", "rev": 2, "texts": [{"matched": false, "text": "ex"}, {"matched": true, "text": "port"}], "user": "spam" }, { "change": "+", "date": [2, 0], "lineno": 1, "node": "3b325e3481a1f07435d81dfdbfa434d9a0245b47", "path": "port", "rev": 2, "texts": [{"matched": false, "text": "ex"}, {"matched": true, "text": "port"}], "user": "spam" }, { "change": "+", "date": [2, 0], "lineno": 2, "node": "3b325e3481a1f07435d81dfdbfa434d9a0245b47", "path": "port", "rev": 2, "texts": [{"matched": false, "text": "va"}, {"matched": true, "text": "port"}, {"matched": false, "text": "ight"}], "user": "spam" }, { "change": "+", "date": [2, 0], "lineno": 3, "node": "3b325e3481a1f07435d81dfdbfa434d9a0245b47", "path": "port", "rev": 2, "texts": [{"matched": false, "text": "im"}, {"matched": true, "text": "port"}, {"matched": false, "text": "/ex"}, {"matched": true, "text": "port"}], "user": "spam" }, { "change": "+", "date": [1, 0], "lineno": 2, "node": "8b20f75c158513ff5ac80bd0e5219bfb6f0eb587", "path": "port", "rev": 1, "texts": [{"matched": false, "text": "ex"}, {"matched": true, "text": "port"}], "user": "eggs" }, { "change": "+", "date": [0, 0], "lineno": 1, "node": "f31323c9217050ba245ee8b537c713ec2e8ab226", "path": "port", "rev": 0, "texts": [{"matched": false, "text": "im"}, {"matched": true, "text": "port"}], "user": "spam" } ] other $ hg grep -r tip:0 -l port port port:4 port:3 port:2 port:1 port:0 $ hg grep -r tip:0 import port port:4:import/export port:3:import/export port:3:import/export port:2:import/export port:1:import port:0:import $ hg cp port port2 $ hg commit -m 4 -u spam -d '5 0' follow $ hg grep -r tip:0 --traceback -f 'import\n\Z' port2 [1] $ echo deport >> port2 $ hg commit -m 5 -u eggs -d '6 0' $ hg grep -f --all -nu port port2 port2:6:4:+:eggs:deport port:4:4:-:spam:import/export port:3:4:+:eggs:import/export port:2:1:-:spam:import port:2:2:-:spam:export port:2:1:+:spam:export port:2:2:+:spam:vaportight port:2:3:+:spam:import/export port:1:2:+:eggs:export port:0:1:+:spam:import $ hg up -q null $ hg grep -r 'reverse(:.)' -f port port:0:import Test wdir (at least, this shouldn't crash) $ hg up -q $ echo wport >> port2 $ hg stat M port2 $ hg grep -r 'wdir()' port port:2147483647:export port:2147483647:vaportight port:2147483647:import/export port2:2147483647:export port2:2147483647:vaportight port2:2147483647:import/export port2:2147483647:deport port2:2147483647:wport $ cd .. $ hg init t2 $ cd t2 $ hg grep -r tip:0 foobar foo [1] $ hg grep -r tip:0 foobar [1] $ echo blue >> color $ echo black >> color $ hg add color $ hg ci -m 0 $ echo orange >> color $ hg ci -m 1 $ echo black > color $ hg ci -m 2 $ echo orange >> color $ echo blue >> color $ hg ci -m 3 $ hg grep -r tip:0 orange color:3:orange color:1:orange $ hg grep --all orange color:3:+:orange color:2:-:orange color:1:+:orange $ hg grep --diff orange --color=debug [grep.filename|color][grep.sep|:][grep.rev|3][grep.sep|:][grep.inserted grep.change|+][grep.sep|:][grep.match|orange] [grep.filename|color][grep.sep|:][grep.rev|2][grep.sep|:][grep.deleted grep.change|-][grep.sep|:][grep.match|orange] [grep.filename|color][grep.sep|:][grep.rev|1][grep.sep|:][grep.inserted grep.change|+][grep.sep|:][grep.match|orange] $ hg grep --diff orange --color=yes \x1b[0;35mcolor\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m3\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;32;1m+\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;31;1morange\x1b[0m (esc) \x1b[0;35mcolor\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m2\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;31;1m-\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;31;1morange\x1b[0m (esc) \x1b[0;35mcolor\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;34m1\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;32;1m+\x1b[0m\x1b[0;36m:\x1b[0m\x1b[0;31;1morange\x1b[0m (esc) $ hg grep --diff orange color:3:+:orange color:2:-:orange color:1:+:orange test substring match: '^' should only match at the beginning $ hg grep -r tip:0 '^.' --config extensions.color= --color debug [grep.filename|color][grep.sep|:][grep.rev|3][grep.sep|:][grep.match|b]lack [grep.filename|color][grep.sep|:][grep.rev|3][grep.sep|:][grep.match|o]range [grep.filename|color][grep.sep|:][grep.rev|3][grep.sep|:][grep.match|b]lue [grep.filename|color][grep.sep|:][grep.rev|2][grep.sep|:][grep.match|b]lack [grep.filename|color][grep.sep|:][grep.rev|1][grep.sep|:][grep.match|b]lue [grep.filename|color][grep.sep|:][grep.rev|1][grep.sep|:][grep.match|b]lack [grep.filename|color][grep.sep|:][grep.rev|1][grep.sep|:][grep.match|o]range [grep.filename|color][grep.sep|:][grep.rev|0][grep.sep|:][grep.match|b]lue [grep.filename|color][grep.sep|:][grep.rev|0][grep.sep|:][grep.match|b]lack match in last "line" without newline $ "$PYTHON" -c 'fp = open("noeol", "wb"); fp.write(b"no infinite loop"); fp.close();' $ hg ci -Amnoeol adding noeol $ hg grep -r tip:0 loop noeol:4:no infinite loop $ cd .. Issue685: traceback in grep -r after rename Got a traceback when using grep on a single revision with renamed files. $ hg init issue685 $ cd issue685 $ echo octarine > color $ hg ci -Amcolor adding color $ hg rename color colour $ hg ci -Am rename $ hg grep -r tip:0 octarine colour:1:octarine color:0:octarine Used to crash here $ hg grep -r 1 octarine colour:1:octarine $ cd .. Issue337: test that grep follows parent-child relationships instead of just using revision numbers. $ hg init issue337 $ cd issue337 $ echo white > color $ hg commit -A -m "0 white" adding color $ echo red > color $ hg commit -A -m "1 red" $ hg update 0 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo black > color $ hg commit -A -m "2 black" created new head $ hg update --clean 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo blue > color $ hg commit -A -m "3 blue" $ hg grep --all red color:3:-:red color:1:+:red $ hg grep --diff red color:3:-:red color:1:+:red Issue3885: test that changing revision order does not alter the revisions printed, just their order. $ hg grep --all red -r "all()" color:1:+:red color:3:-:red $ hg grep --all red -r "reverse(all())" color:3:-:red color:1:+:red $ hg grep --diff red -r "all()" color:1:+:red color:3:-:red $ hg grep --diff red -r "reverse(all())" color:3:-:red color:1:+:red $ cd .. $ hg init a $ cd a $ cp "$TESTDIR/binfile.bin" . $ hg add binfile.bin $ hg ci -m 'add binfile.bin' $ hg grep "MaCam" --all binfile.bin:0:+: Binary file matches $ hg grep "MaCam" --diff binfile.bin:0:+: Binary file matches $ cd .. Test for showing working of allfiles flag $ hg init sng $ cd sng $ echo "unmod" >> um $ hg ci -A -m "adds unmod to um" adding um $ echo "something else" >> new $ hg ci -A -m "second commit" adding new $ hg grep -r "." "unmod" um:1:unmod Working directory is searched by default $ echo modified >> new $ hg grep mod new:modified um:unmod which can be overridden by -rREV $ hg grep -r. mod um:1:unmod $ hg grep --diff mod um:0:+:unmod $ cd .. Fix_Wdir(): test that passing wdir() t -r flag does greps on the files modified in the working directory $ cd a $ echo "abracadara" >> a $ hg add a $ hg grep -r "wdir()" "abra" a:2147483647:abracadara $ cd .. Change Default of grep by ui.tweakdefaults, that is, the files not in current working directory should not be grepp-ed on $ hg init ab $ cd ab $ cat <<'EOF' >> .hg/hgrc > [ui] > tweakdefaults = True > EOF $ echo "some text">>file1 $ hg add file1 $ hg commit -m "adds file1" $ hg mv file1 file2 wdir revision is hidden by default: $ hg grep "some" file2:some text but it should be available in template dict: $ hg grep "some" -Tjson [ { "date": [0, 0], "lineno": 1, "node": "ffffffffffffffffffffffffffffffffffffffff", "path": "file2", "rev": 2147483647, "texts": [{"matched": true, "text": "some"}, {"matched": false, "text": " text"}], "user": "test" } ] $ cd .. test -rMULTIREV $ cd sng $ hg rm um $ hg commit -m "deletes um" $ hg grep -r "0:2" "unmod" um:0:unmod um:1:unmod $ hg grep -r "0:2" "unmod" um um:0:unmod um:1:unmod $ hg grep -r "0:2" "unmod" "glob:**/um" # Check that patterns also work um:0:unmod um:1:unmod $ cd ..