Mercurial > hg
view tests/test-narrow-patterns.t @ 37295:45b39c69fae0
wireproto: separate commands tables for version 1 and 2 commands
We can't easily reuse existing command handlers for version 2
commands because the response types will be different. e.g. many
commands return nodes encoded as hex. Our new wire protocol is
binary safe, so we'll wish to encode nodes as binary.
We /could/ teach each command handler to look at the protocol
handler and change behavior based on the version in use. However,
this would make logic a bit unwieldy over time and would make
it harder to design a unified protocol handler interface. I think
it's better to create a clean break between version 1 and version 2
of commands on the server.
What I imagine happening is we will have separate @wireprotocommand
functions for each protocol generation. Those functions will parse the
request, dispatch to a common function to process it, then generate
the response in its own, transport-specific manner.
This commit establishes a separate table for tracking version 1
commands from version 2 commands. The HTTP server pieces have been
updated to use this new table.
Most commands are marked as both version 1 and version 2, so there is
little practical impact to this change.
A side-effect of this change is we now rely on transport registration
in wireprototypes.TRANSPORTS and certain properties of the protocol
interface. So a test had to be updated to conform.
Differential Revision: https://phab.mercurial-scm.org/D2982
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 28 Mar 2018 10:40:41 -0700 |
parents | 6767e7ce2c31 |
children | 7542e97c7867 |
line wrap: on
line source
$ . "$TESTDIR/narrow-library.sh" initialize nested directories to validate complex include/exclude patterns $ hg init master $ cd master $ cat >> .hg/hgrc <<EOF > [narrow] > serveellipses=True > EOF $ echo root > root $ hg add root $ hg commit -m 'add root' $ for d in dir1 dir2 dir1/dirA dir1/dirB dir2/dirA dir2/dirB > do > mkdir -p $d > echo $d/foo > $d/foo > hg add $d/foo > hg commit -m "add $d/foo" > echo $d/bar > $d/bar > hg add $d/bar > hg commit -m "add $d/bar" > done #if execbit $ chmod +x dir1/dirA/foo $ hg commit -m "make dir1/dirA/foo executable" #else $ hg import --bypass - <<EOF > # HG changeset patch > make dir1/dirA/foo executable > > diff --git a/dir1/dirA/foo b/dir1/dirA/foo > old mode 100644 > new mode 100755 > EOF applying patch from stdin $ hg update -qr tip #endif $ hg log -G -T '{rev} {node|short} {files}\n' @ 13 c87ca422d521 dir1/dirA/foo | o 12 951b8a83924e dir2/dirB/bar | o 11 01ae5a51b563 dir2/dirB/foo | o 10 5eababdf0ac5 dir2/dirA/bar | o 9 99d690663739 dir2/dirA/foo | o 8 8e80155d5445 dir1/dirB/bar | o 7 406760310428 dir1/dirB/foo | o 6 623466a5f475 dir1/dirA/bar | o 5 06ff3a5be997 dir1/dirA/foo | o 4 33227af02764 dir2/bar | o 3 5e1f9d8d7c69 dir2/foo | o 2 594bc4b13d4a dir1/bar | o 1 47f480a08324 dir1/foo | o 0 2a4f0c3b67da root $ cd .. clone a narrow portion of the master, such that we can widen it later $ hg clone --narrow ssh://user@dummy/master narrow \ > --include dir1 \ > --include dir2 \ > --exclude dir1/dirA \ > --exclude dir1/dirB \ > --exclude dir2/dirA \ > --exclude dir2/dirB requesting all changes adding changesets adding manifests adding file changes added 6 changesets with 4 changes to 4 files new changesets *:* (glob) updating to branch default 4 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd narrow $ cat .hg/narrowspec [includes] path:dir1 path:dir2 [excludes] path:dir1/dirA path:dir1/dirB path:dir2/dirA path:dir2/dirB $ hg manifest -r tip dir1/bar dir1/dirA/bar dir1/dirA/foo dir1/dirB/bar dir1/dirB/foo dir1/foo dir2/bar dir2/dirA/bar dir2/dirA/foo dir2/dirB/bar dir2/dirB/foo dir2/foo root $ find * | sort dir1 dir1/bar dir1/foo dir2 dir2/bar dir2/foo $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n' @ 5 c87ca422d521... dir1/dirA/foo | o 4 33227af02764 dir2/bar | o 3 5e1f9d8d7c69 dir2/foo | o 2 594bc4b13d4a dir1/bar | o 1 47f480a08324 dir1/foo | o 0 2a4f0c3b67da... root widen the narrow checkout $ hg tracked --removeexclude dir1/dirA comparing with ssh://user@dummy/master searching for changes no changes found saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-widen.hg (glob) adding changesets adding manifests adding file changes added 9 changesets with 6 changes to 6 files new changesets *:* (glob) $ cat .hg/narrowspec [includes] path:dir1 path:dir2 [excludes] path:dir1/dirB path:dir2/dirA path:dir2/dirB $ find * | sort dir1 dir1/bar dir1/dirA dir1/dirA/bar dir1/dirA/foo dir1/foo dir2 dir2/bar dir2/foo #if execbit $ test -x dir1/dirA/foo && echo executable executable $ test -x dir1/dirA/bar || echo not executable not executable #endif $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n' @ 8 c87ca422d521 dir1/dirA/foo | o 7 951b8a83924e... dir2/dirB/bar | o 6 623466a5f475 dir1/dirA/bar | o 5 06ff3a5be997 dir1/dirA/foo | o 4 33227af02764 dir2/bar | o 3 5e1f9d8d7c69 dir2/foo | o 2 594bc4b13d4a dir1/bar | o 1 47f480a08324 dir1/foo | o 0 2a4f0c3b67da... root widen narrow spec again, but exclude a file in previously included spec $ hg tracked --removeexclude dir2/dirB --addexclude dir1/dirA/bar comparing with ssh://user@dummy/master searching for changes looking for local changes to affected paths deleting data/dir1/dirA/bar.i no changes found saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-widen.hg (glob) adding changesets adding manifests adding file changes added 11 changesets with 7 changes to 7 files new changesets *:* (glob) $ cat .hg/narrowspec [includes] path:dir1 path:dir2 [excludes] path:dir1/dirA/bar path:dir1/dirB path:dir2/dirA $ find * | sort dir1 dir1/bar dir1/dirA dir1/dirA/foo dir1/foo dir2 dir2/bar dir2/dirB dir2/dirB/bar dir2/dirB/foo dir2/foo $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n' @ 10 c87ca422d521 dir1/dirA/foo | o 9 951b8a83924e dir2/dirB/bar | o 8 01ae5a51b563 dir2/dirB/foo | o 7 5eababdf0ac5... dir2/dirA/bar | o 6 623466a5f475... dir1/dirA/bar | o 5 06ff3a5be997 dir1/dirA/foo | o 4 33227af02764 dir2/bar | o 3 5e1f9d8d7c69 dir2/foo | o 2 594bc4b13d4a dir1/bar | o 1 47f480a08324 dir1/foo | o 0 2a4f0c3b67da... root widen narrow spec yet again, excluding a directory in previous spec $ hg tracked --removeexclude dir2/dirA --addexclude dir1/dirA comparing with ssh://user@dummy/master searching for changes looking for local changes to affected paths deleting data/dir1/dirA/foo.i no changes found saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-widen.hg (glob) adding changesets adding manifests adding file changes added 13 changesets with 8 changes to 8 files new changesets *:* (glob) $ cat .hg/narrowspec [includes] path:dir1 path:dir2 [excludes] path:dir1/dirA path:dir1/dirA/bar path:dir1/dirB $ find * | sort dir1 dir1/bar dir1/foo dir2 dir2/bar dir2/dirA dir2/dirA/bar dir2/dirA/foo dir2/dirB dir2/dirB/bar dir2/dirB/foo dir2/foo $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n' @ 12 c87ca422d521... dir1/dirA/foo | o 11 951b8a83924e dir2/dirB/bar | o 10 01ae5a51b563 dir2/dirB/foo | o 9 5eababdf0ac5 dir2/dirA/bar | o 8 99d690663739 dir2/dirA/foo | o 7 8e80155d5445... dir1/dirB/bar | o 6 623466a5f475... dir1/dirA/bar | o 5 06ff3a5be997... dir1/dirA/foo | o 4 33227af02764 dir2/bar | o 3 5e1f9d8d7c69 dir2/foo | o 2 594bc4b13d4a dir1/bar | o 1 47f480a08324 dir1/foo | o 0 2a4f0c3b67da... root include a directory that was previously explicitly excluded $ hg tracked --removeexclude dir1/dirA comparing with ssh://user@dummy/master searching for changes no changes found saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-widen.hg (glob) adding changesets adding manifests adding file changes added 13 changesets with 9 changes to 9 files new changesets *:* (glob) $ cat .hg/narrowspec [includes] path:dir1 path:dir2 [excludes] path:dir1/dirA/bar path:dir1/dirB $ find * | sort dir1 dir1/bar dir1/dirA dir1/dirA/foo dir1/foo dir2 dir2/bar dir2/dirA dir2/dirA/bar dir2/dirA/foo dir2/dirB dir2/dirB/bar dir2/dirB/foo dir2/foo $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n' @ 12 c87ca422d521 dir1/dirA/foo | o 11 951b8a83924e dir2/dirB/bar | o 10 01ae5a51b563 dir2/dirB/foo | o 9 5eababdf0ac5 dir2/dirA/bar | o 8 99d690663739 dir2/dirA/foo | o 7 8e80155d5445... dir1/dirB/bar | o 6 623466a5f475... dir1/dirA/bar | o 5 06ff3a5be997 dir1/dirA/foo | o 4 33227af02764 dir2/bar | o 3 5e1f9d8d7c69 dir2/foo | o 2 594bc4b13d4a dir1/bar | o 1 47f480a08324 dir1/foo | o 0 2a4f0c3b67da... root $ cd .. clone a narrow portion of the master, such that we can widen it later $ hg clone --narrow ssh://user@dummy/master narrow2 --include dir1/dirA requesting all changes adding changesets adding manifests adding file changes added 5 changesets with 2 changes to 2 files new changesets *:* (glob) updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd narrow2 $ find * | sort dir1 dir1/dirA dir1/dirA/bar dir1/dirA/foo $ hg tracked --addinclude dir1 comparing with ssh://user@dummy/master searching for changes no changes found saved backup bundle to $TESTTMP/narrow2/.hg/strip-backup/*-widen.hg (glob) adding changesets adding manifests adding file changes added 10 changesets with 6 changes to 6 files new changesets *:* (glob) $ find * | sort dir1 dir1/bar dir1/dirA dir1/dirA/bar dir1/dirA/foo dir1/dirB dir1/dirB/bar dir1/dirB/foo dir1/foo $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n' @ 9 c87ca422d521 dir1/dirA/foo | o 8 951b8a83924e... dir2/dirB/bar | o 7 8e80155d5445 dir1/dirB/bar | o 6 406760310428 dir1/dirB/foo | o 5 623466a5f475 dir1/dirA/bar | o 4 06ff3a5be997 dir1/dirA/foo | o 3 33227af02764... dir2/bar | o 2 594bc4b13d4a dir1/bar | o 1 47f480a08324 dir1/foo | o 0 2a4f0c3b67da... root