Mercurial > hg
view tests/test-narrow-clone-nonlinear.t @ 40093:726cfc47f17a
contrib: add an utility module to parse test scripts
This patch centralizes the logic to pick up code fragments embedded in
*.t script, in order to:
- apply checking with patterns in check-code.py on such embedded
code fragments
Now, check-code.py completely ignores embedded code
fragments. I'll post another patch series to check them.
- replace similar code path in contrib/import-checker.py
Current import-checker.py has problems below. Fixing each of them
is a little difficult, because parsing logic and pattern strings
are tightly coupled.
- overlook (or mis-detect) the end of inline script in doctest
style
8a8dd6e4a97a fixed a part of this issue, but not enough.
- it overlooks inline script in doctest style at the end of file
(and ignores invalid un-closed heredoc at the end of file, too)
- it overlooks code fragment in styles below
- "python <<EOF" (heredoc should be "cat > file <<EOF" style)
- "cat > foobar.py << ANYLIMIT" (limit mark should be "EOF")
- "cat << EOF > foobar.py" (filename should be placed before limit mark)
- "cat >> foobar.py << EOF" (appending is ignored)
- it is not extensible for other than python code fragments
(e.g. shell script, hgrc file, and so on)
This new module can detect python code fragments in styles below:
- inline script in doctest style (starting by " >>> " line)
- python invocation with heredoc script ("python <<EOF")
- python script in heredoc style (redirected into ".py" file)
As an example of extensibility of new module, this patch also contains
implementation to pick up code fragment below. This will be useful to
add additional restriction for them, for example.
- shell script in heredoc style (redirected into ".sh" file)
- hgrc configuration in heredoc style (redirected into hgrc or $HGRCPATH)
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Thu, 23 Aug 2018 12:25:54 +0900 |
parents | a2a6e724d61a |
children |
line wrap: on
line source
Testing narrow clones when changesets modifying a matching file exist on multiple branches $ . "$TESTDIR/narrow-library.sh" $ hg init master $ cd master $ cat >> .hg/hgrc <<EOF > [narrow] > serveellipses=True > EOF $ hg branch default marked working directory as branch default (branches are permanent and global, did you want a bookmark?) $ for x in `$TESTDIR/seq.py 10`; do > echo $x > "f$x" > hg add "f$x" > hg commit -m "Add $x" > done $ hg branch release-v1 marked working directory as branch release-v1 (branches are permanent and global, did you want a bookmark?) $ hg commit -m "Start release for v1" $ hg update default 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ for x in `$TESTDIR/seq.py 10`; do > echo "$x v2" > "f$x" > hg commit -m "Update $x to v2" > done $ hg update release-v1 10 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg branch release-v1 marked working directory as branch release-v1 $ for x in `$TESTDIR/seq.py 1 5`; do > echo "$x v1 hotfix" > "f$x" > hg commit -m "Hotfix $x in v1" > done $ hg update default 10 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg branch release-v2 marked working directory as branch release-v2 $ hg commit -m "Start release for v2" $ hg update default 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg branch default marked working directory as branch default $ for x in `$TESTDIR/seq.py 10`; do > echo "$x v3" > "f$x" > hg commit -m "Update $x to v3" > done $ hg update release-v2 10 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg branch release-v2 marked working directory as branch release-v2 $ for x in `$TESTDIR/seq.py 4 9`; do > echo "$x v2 hotfix" > "f$x" > hg commit -m "Hotfix $x in v2" > done $ hg heads -T '{rev} <- {p1rev} ({branch}): {desc}\n' 42 <- 41 (release-v2): Hotfix 9 in v2 36 <- 35 (default): Update 10 to v3 25 <- 24 (release-v1): Hotfix 5 in v1 $ cd .. We now have 3 branches: default, which has v3 of all files, release-v1 which has v1 of all files, and release-v2 with v2 of all files. Narrow clone which should get all branches $ hg clone --narrow ssh://user@dummy/master narrow --include "f5" requesting all changes adding changesets adding manifests adding file changes added 12 changesets with 5 changes to 1 files (+2 heads) new changesets *:* (glob) updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd narrow $ hg log -G -T "{if(ellipsis, '...')}{node|short} ({branch}): {desc}\n" o ...031f516143fe (release-v2): Hotfix 9 in v2 | o 9cd7f7bb9ca1 (release-v2): Hotfix 5 in v2 | o ...37bbc88f3ef0 (release-v2): Hotfix 4 in v2 | | @ ...dae2f368ca07 (default): Update 10 to v3 | | | o 9c224e89cb31 (default): Update 5 to v3 | | | o ...04fb59c7c9dc (default): Update 4 to v3 |/ | o b2253e82401f (release-v1): Hotfix 5 in v1 | | | o ...960ac37d74fd (release-v1): Hotfix 4 in v1 | | o | 986298e3f347 (default): Update 5 to v2 | | o | ...75d539c667ec (default): Update 4 to v2 |/ o 04c71bd5707f (default): Add 5 | o ...881b3891d041 (default): Add 4 Narrow clone the first file, hitting edge condition where unaligned changeset and manifest revnums cross branches. $ hg clone --narrow ssh://user@dummy/master narrow --include "f1" requesting all changes adding changesets adding manifests adding file changes added 10 changesets with 4 changes to 1 files (+2 heads) new changesets *:* (glob) updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd narrow $ hg log -G -T "{if(ellipsis, '...')}{node|short} ({branch}): {desc}\n" o ...031f516143fe (release-v2): Hotfix 9 in v2 | | @ ...dae2f368ca07 (default): Update 10 to v3 | | | o 1f5d184b8e96 (default): Update 1 to v3 |/ | o ...b2253e82401f (release-v1): Hotfix 5 in v1 | | | o 133502f6b7e5 (release-v1): Hotfix 1 in v1 | | o | ...79165c83d644 (default): Update 10 to v2 | | o | c7b7a5f2f088 (default): Update 1 to v2 | | | o ...f0531a3db7a9 (release-v1): Start release for v1 |/ o ...6a3f0f0abef3 (default): Add 10 | o e012ac15eaaa (default): Add 1