##// END OF EJS Templates
internals: extract frame-based protocol docs to own document...
internals: extract frame-based protocol docs to own document wireprotocol.txt is quite long and difficult to digest. The frame-based protocol is effectively a standalone concept (and could even be used outside of Mercurial). So this commit extracts its docs to a standalone file. The first few paragraphs were rewritten as part of the extraction. Sections headers were adjusted accordingly. Existing referalls in wireprotocol.txt were updated to refer to the new doc / concept, which I've started referring to as `hgrpc`. I'm on the fence as to whether to move the HTTP and SSH transport details to the new doc as well. For now, I'm leaving them in wireprotocol.txt. Differential Revision: https://phab.mercurial-scm.org/D4443

File last commit:

r37907:cf76642c default
r39594:b0e0db15 default
Show More
test-convert-cvs.t
659 lines | 13.3 KiB | text/troff | Tads3Lexer
/ tests / test-convert-cvs.t
Matt Mackall
tests: replace exit 80 with #require
r22046 #require cvs
Matt Mackall
tests: unify test-convert-cvs
r12519
$ cvscall()
> {
> cvs -f "$@"
> }
$ hgcat()
> {
> hg --cwd src-hg cat -r tip "$1"
> }
$ echo "[extensions]" >> $HGRCPATH
$ echo "convert = " >> $HGRCPATH
$ cat > cvshooks.py <<EOF
> def cvslog(ui,repo,hooktype,log):
Augie Fackler
tests: port inline extension in test-convert-cvs.t to py3...
r37902 > ui.write(b'%s hook: %d entries\n' % (hooktype,len(log)))
Matt Mackall
tests: unify test-convert-cvs
r12519 >
> def cvschangesets(ui,repo,hooktype,changesets):
Augie Fackler
tests: port inline extension in test-convert-cvs.t to py3...
r37902 > ui.write(b'%s hook: %d changesets\n' % (hooktype,len(changesets)))
Matt Mackall
tests: unify test-convert-cvs
r12519 > EOF
$ hookpath=`pwd`
Yuya Nishihara
tests: write hgrc of more than two lines by using shell heredoc...
r23172 $ cat <<EOF >> $HGRCPATH
> [hooks]
> cvslog = python:$hookpath/cvshooks.py:cvslog
> cvschangesets = python:$hookpath/cvshooks.py:cvschangesets
> EOF
Matt Mackall
tests: unify test-convert-cvs
r12519
create cvs repository
$ mkdir cvsrepo
$ cd cvsrepo
$ CVSROOT=`pwd`
$ export CVSROOT
$ CVS_OPTIONS=-f
$ export CVS_OPTIONS
$ cd ..
Thomas Klausner
tests: run 'cvs init' only on non-existent directories (issue4482)...
r23675 $ rmdir cvsrepo
Matt Mackall
tests: unify test-convert-cvs
r12519 $ cvscall -q -d "$CVSROOT" init
create source directory
$ mkdir src-temp
$ cd src-temp
$ echo a > a
$ mkdir b
$ cd b
$ echo c > c
$ cd ..
import source directory
$ cvscall -q import -m import src INITIAL start
N src/a
N src/b/c
No conflicts created by this import
$ cd ..
checkout source directory
$ cvscall -q checkout src
U src/a
U src/b/c
commit a new revision changing b/c
$ cd src
$ sleep 1
$ echo c >> b/c
$ cvscall -q commit -mci0 . | grep '<--'
Mads Kiilerich
tests: remove redundant globs...
r12640 $TESTTMP/cvsrepo/src/b/c,v <-- *c (glob)
Matt Mackall
tests: unify test-convert-cvs
r12519 $ cd ..
Julian Cowley
convert: add config option to use the local time zone...
r17974 convert fresh repo and also check localtimezone option
NOTE: This doesn't check all time zones -- it merely determines that
the configuration option is taking effect.
Matt Mackall
tests: unify test-convert-cvs
r12519
Julian Cowley
convert: add config option to use the local time zone...
r17974 An arbitrary (U.S.) time zone is used here. TZ=US/Hawaii is selected
since it does not use DST (unlike other U.S. time zones) and is always
a fixed difference from UTC.
Elmar Bartel
test-convert-cvs: change TZ=US/Hawaii to TZ=Pacific/Johnston...
r35534 This choice is limited to work on Linux environments. At least on
FreeBSD 11 this timezone is not known. A better choice is
TZ=Pacific/Johnston. On Linux "US/Hawaii" is just a symlink to this
name and also it is known on FreeBSD and on Solaris.
$ TZ=Pacific/Johnston hg convert --config convert.localtimezone=True src src-hg
Matt Mackall
tests: unify test-convert-cvs
r12519 initializing destination src-hg repository
Mads Kiilerich
tests: remove redundant globs...
r12640 connecting to $TESTTMP/cvsrepo
Matt Mackall
tests: unify test-convert-cvs
r12519 scanning source...
collecting CVS rlog
5 log entries
cvslog hook: 5 entries
creating changesets
3 changeset entries
cvschangesets hook: 3 changesets
sorting...
converting...
2 Initial revision
Mads Kiilerich
convert: make toposort order stable when multiple orderings are possible...
r18376 1 ci0
0 import
Matt Mackall
tests: unify test-convert-cvs
r12519 updating tags
$ hgcat a
a
$ hgcat b/c
c
c
convert fresh repo with --filemap
$ echo include b/c > filemap
$ hg convert --filemap filemap src src-filemap
initializing destination src-filemap repository
Mads Kiilerich
tests: remove redundant globs...
r12640 connecting to $TESTTMP/cvsrepo
Matt Mackall
tests: unify test-convert-cvs
r12519 scanning source...
collecting CVS rlog
5 log entries
cvslog hook: 5 entries
creating changesets
3 changeset entries
cvschangesets hook: 3 changesets
sorting...
converting...
2 Initial revision
Mads Kiilerich
convert: make toposort order stable when multiple orderings are possible...
r18376 1 ci0
0 import
Matt Mackall
tests: unify test-convert-cvs
r12519 filtering out empty revision
Matt Harbison
convert: apply the appropriate phases to the destination (issue4165)...
r25571 repository tip rolled back to revision 1 (undo convert)
Matt Mackall
tests: unify test-convert-cvs
r12519 updating tags
$ hgcat b/c
c
c
$ hg -R src-filemap log --template '{rev} {desc} files: {files}\n'
2 update tags files: .hgtags
1 ci0 files: b/c
0 Initial revision files: b/c
convert full repository (issue1649)
$ cvscall -q -d "$CVSROOT" checkout -d srcfull "." | grep -v CVSROOT
U srcfull/src/a
U srcfull/src/b/c
$ ls srcfull
CVS
CVSROOT
src
$ hg convert srcfull srcfull-hg \
> | grep -v 'log entries' | grep -v 'hook:' \
> | grep -v '^[0-3] .*' # filter instable changeset order
initializing destination srcfull-hg repository
Mads Kiilerich
tests: remove redundant globs...
r12640 connecting to $TESTTMP/cvsrepo
Matt Mackall
tests: unify test-convert-cvs
r12519 scanning source...
collecting CVS rlog
creating changesets
4 changeset entries
sorting...
converting...
updating tags
Mads Kiilerich
tests: add missing no-outer-repo requirements...
r17015 $ hg cat -r tip --cwd srcfull-hg src/a
Matt Mackall
tests: unify test-convert-cvs
r12519 a
Mads Kiilerich
tests: add missing no-outer-repo requirements...
r17015 $ hg cat -r tip --cwd srcfull-hg src/b/c
Matt Mackall
tests: unify test-convert-cvs
r12519 c
c
commit new file revisions
$ cd src
$ echo a >> a
$ echo c >> b/c
$ cvscall -q commit -mci1 . | grep '<--'
Mads Kiilerich
tests: remove redundant globs...
r12640 $TESTTMP/cvsrepo/src/a,v <-- a
$TESTTMP/cvsrepo/src/b/c,v <-- *c (glob)
Matt Mackall
tests: unify test-convert-cvs
r12519 $ cd ..
convert again
Elmar Bartel
test-convert-cvs: change TZ=US/Hawaii to TZ=Pacific/Johnston...
r35534 $ TZ=Pacific/Johnston hg convert --config convert.localtimezone=True src src-hg
Mads Kiilerich
tests: remove redundant globs...
r12640 connecting to $TESTTMP/cvsrepo
Matt Mackall
tests: unify test-convert-cvs
r12519 scanning source...
collecting CVS rlog
7 log entries
cvslog hook: 7 entries
creating changesets
4 changeset entries
cvschangesets hook: 4 changesets
sorting...
converting...
0 ci1
$ hgcat a
a
a
$ hgcat b/c
c
c
c
convert again with --filemap
$ hg convert --filemap filemap src src-filemap
Mads Kiilerich
tests: remove redundant globs...
r12640 connecting to $TESTTMP/cvsrepo
Matt Mackall
tests: unify test-convert-cvs
r12519 scanning source...
collecting CVS rlog
7 log entries
cvslog hook: 7 entries
creating changesets
4 changeset entries
cvschangesets hook: 4 changesets
sorting...
converting...
0 ci1
$ hgcat b/c
c
c
c
$ hg -R src-filemap log --template '{rev} {desc} files: {files}\n'
3 ci1 files: b/c
2 update tags files: .hgtags
1 ci0 files: b/c
0 Initial revision files: b/c
commit branch
$ cd src
$ cvs -q update -r1.1 b/c
U b/c
$ cvs -q tag -b branch
T a
T b/c
$ cvs -q update -r branch > /dev/null
Emanuele Giaquinta
test-convert-cvs: add sleep so cvs notices changes...
r26594 $ sleep 1
Matt Mackall
tests: unify test-convert-cvs
r12519 $ echo d >> b/c
$ cvs -q commit -mci2 . | grep '<--'
Mads Kiilerich
tests: remove redundant globs...
r12640 $TESTTMP/cvsrepo/src/b/c,v <-- *c (glob)
Matt Mackall
tests: unify test-convert-cvs
r12519 $ cd ..
convert again
Elmar Bartel
test-convert-cvs: change TZ=US/Hawaii to TZ=Pacific/Johnston...
r35534 $ TZ=Pacific/Johnston hg convert --config convert.localtimezone=True src src-hg
Mads Kiilerich
tests: remove redundant globs...
r12640 connecting to $TESTTMP/cvsrepo
Matt Mackall
tests: unify test-convert-cvs
r12519 scanning source...
collecting CVS rlog
8 log entries
cvslog hook: 8 entries
creating changesets
5 changeset entries
cvschangesets hook: 5 changesets
sorting...
converting...
0 ci2
$ hgcat b/c
c
d
convert again with --filemap
Elmar Bartel
test-convert-cvs: change TZ=US/Hawaii to TZ=Pacific/Johnston...
r35534 $ TZ=Pacific/Johnston hg convert --config convert.localtimezone=True --filemap filemap src src-filemap
Mads Kiilerich
tests: remove redundant globs...
r12640 connecting to $TESTTMP/cvsrepo
Matt Mackall
tests: unify test-convert-cvs
r12519 scanning source...
collecting CVS rlog
8 log entries
cvslog hook: 8 entries
creating changesets
5 changeset entries
cvschangesets hook: 5 changesets
sorting...
converting...
0 ci2
$ hgcat b/c
c
d
$ hg -R src-filemap log --template '{rev} {desc} files: {files}\n'
4 ci2 files: b/c
3 ci1 files: b/c
2 update tags files: .hgtags
1 ci0 files: b/c
0 Initial revision files: b/c
commit a new revision with funny log message
$ cd src
$ sleep 1
$ echo e >> a
$ cvscall -q commit -m'funny
> ----------------------------
> log message' . | grep '<--' |\
> sed -e 's:.*src/\(.*\),v.*:checking in src/\1,v:g'
checking in src/a,v
commit new file revisions with some fuzz
$ sleep 1
$ echo f >> a
$ cvscall -q commit -mfuzzy . | grep '<--'
Mads Kiilerich
tests: remove redundant globs...
r12640 $TESTTMP/cvsrepo/src/a,v <-- a
Matt Mackall
tests: unify test-convert-cvs
r12519 $ sleep 4 # the two changes will be split if fuzz < 4
$ echo g >> b/c
$ cvscall -q commit -mfuzzy . | grep '<--'
Mads Kiilerich
tests: remove redundant globs...
r12640 $TESTTMP/cvsrepo/src/b/c,v <-- *c (glob)
Matt Mackall
tests: unify test-convert-cvs
r12519 $ cd ..
convert again
Elmar Bartel
test-convert-cvs: change TZ=US/Hawaii to TZ=Pacific/Johnston...
r35534 $ TZ=Pacific/Johnston hg convert --config convert.cvsps.fuzz=2 --config convert.localtimezone=True src src-hg
Mads Kiilerich
tests: remove redundant globs...
r12640 connecting to $TESTTMP/cvsrepo
Matt Mackall
tests: unify test-convert-cvs
r12519 scanning source...
collecting CVS rlog
11 log entries
cvslog hook: 11 entries
creating changesets
8 changeset entries
cvschangesets hook: 8 changesets
sorting...
converting...
2 funny
1 fuzzy
0 fuzzy
Martin Geisler
tests: don't load unnecessary graphlog extension...
r20117 $ hg -R src-hg log -G --template '{rev} ({branches}) {desc} date: {date|date} files: {files}\n'
Julian Cowley
convert: add config option to use the local time zone...
r17974 o 8 (branch) fuzzy date: * -1000 files: b/c (glob)
Matt Mackall
tests: unify test-convert-cvs
r12519 |
Julian Cowley
convert: add config option to use the local time zone...
r17974 o 7 (branch) fuzzy date: * -1000 files: a (glob)
Matt Mackall
tests: unify test-convert-cvs
r12519 |
o 6 (branch) funny
| ----------------------------
Julian Cowley
convert: add config option to use the local time zone...
r17974 | log message date: * -1000 files: a (glob)
o 5 (branch) ci2 date: * -1000 files: b/c (glob)
Matt Mackall
tests: unify test-convert-cvs
r12519
Julian Cowley
convert: add config option to use the local time zone...
r17974 o 4 () ci1 date: * -1000 files: a b/c (glob)
Matt Mackall
tests: unify test-convert-cvs
r12519 |
Julian Cowley
convert: add config option to use the local time zone...
r17974 o 3 () update tags date: * +0000 files: .hgtags (glob)
Matt Mackall
tests: unify test-convert-cvs
r12519 |
Mads Kiilerich
convert: make toposort order stable when multiple orderings are possible...
r18376 | o 2 (INITIAL) import date: * -1000 files: (glob)
| |
o | 1 () ci0 date: * -1000 files: b/c (glob)
Matt Mackall
tests: unify test-convert-cvs
r12519 |/
Julian Cowley
convert: add config option to use the local time zone...
r17974 o 0 () Initial revision date: * -1000 files: a b/c (glob)
Matt Mackall
tests: unify test-convert-cvs
r12519
testing debugcvsps
$ cd src
Emanuele Giaquinta
cvsps: fix computation of parent revisions when log caching is on...
r26593 $ hg debugcvsps --fuzz=2 -x >/dev/null
commit a new revision changing a and removing b/c
$ cvscall -q update -A
U a
U b/c
$ sleep 1
$ echo h >> a
$ cvscall -Q remove -f b/c
$ cvscall -q commit -mci | grep '<--'
$TESTTMP/cvsrepo/src/a,v <-- a
$TESTTMP/cvsrepo/src/b/c,v <-- *c (glob)
update and verify the cvsps cache
$ hg debugcvsps --fuzz=2 -u
Matt Mackall
tests: unify test-convert-cvs
r12519 collecting CVS rlog
Emanuele Giaquinta
cvsps: fix computation of parent revisions when log caching is on...
r26593 13 log entries
cvslog hook: 13 entries
Matt Mackall
tests: unify test-convert-cvs
r12519 creating changesets
Emanuele Giaquinta
cvsps: fix computation of parent revisions when log caching is on...
r26593 11 changeset entries
cvschangesets hook: 11 changesets
Matt Mackall
tests: unify test-convert-cvs
r12519 ---------------------
PatchSet 1
Date: * (glob)
Author: * (glob)
Branch: HEAD
Tag: (none)
Branchpoints: INITIAL
Log:
Initial revision
Members:
a:INITIAL->1.1
---------------------
PatchSet 2
Date: * (glob)
Author: * (glob)
Branch: HEAD
Tag: (none)
Branchpoints: INITIAL, branch
Log:
Initial revision
Members:
b/c:INITIAL->1.1
---------------------
PatchSet 3
Date: * (glob)
Author: * (glob)
Branch: INITIAL
Tag: start
Log:
import
Members:
a:1.1->1.1.1.1
b/c:1.1->1.1.1.1
---------------------
PatchSet 4
Date: * (glob)
Author: * (glob)
Branch: HEAD
Tag: (none)
Log:
ci0
Members:
b/c:1.1->1.2
---------------------
PatchSet 5
Date: * (glob)
Author: * (glob)
Branch: HEAD
Tag: (none)
Augie Fackler
cvsps: use a different tiebreaker to avoid flaky test...
r24305 Branchpoints: branch
Matt Mackall
tests: unify test-convert-cvs
r12519 Log:
ci1
Members:
Augie Fackler
cvsps: use a different tiebreaker to avoid flaky test...
r24305 a:1.1->1.2
Matt Mackall
tests: unify test-convert-cvs
r12519
---------------------
PatchSet 6
Date: * (glob)
Author: * (glob)
Branch: HEAD
Tag: (none)
Log:
ci1
Members:
Augie Fackler
cvsps: use a different tiebreaker to avoid flaky test...
r24305 b/c:1.2->1.3
Matt Mackall
tests: unify test-convert-cvs
r12519
---------------------
PatchSet 7
Date: * (glob)
Author: * (glob)
Branch: branch
Tag: (none)
Log:
ci2
Members:
b/c:1.1->1.1.2.1
---------------------
PatchSet 8
Date: * (glob)
Author: * (glob)
Branch: branch
Tag: (none)
Log:
funny
----------------------------
log message
Members:
a:1.2->1.2.2.1
---------------------
PatchSet 9
Date: * (glob)
Author: * (glob)
Branch: branch
Tag: (none)
Log:
fuzzy
Members:
a:1.2.2.1->1.2.2.2
---------------------
PatchSet 10
Date: * (glob)
Author: * (glob)
Branch: branch
Tag: (none)
Log:
fuzzy
Members:
b/c:1.1.2.1->1.1.2.2
Emanuele Giaquinta
cvsps: fix computation of parent revisions when log caching is on...
r26593 ---------------------
PatchSet 11
Date: * (glob)
Author: * (glob)
Branch: HEAD
Tag: (none)
Log:
ci
Members:
a:1.2->1.3
b/c:1.3->1.4(DEAD)
Matt Mackall
tests: unify test-convert-cvs
r12519
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913 $ cd ..
FUJIWARA Katsunori
convert: transcode CVS log messages by specified encoding (issue5597)...
r33388
Test transcoding CVS log messages (issue5597)
=============================================
To emulate commit messages in (non-ascii) multiple encodings portably,
this test scenario writes CVS history file (*,v file) directly via
python code.
Commit messages of version 1.2 - 1.4 use u3042 in 3 encodings below.
|encoding |byte sequence | decodable as: |
| | | utf-8 euc-jp cp932 |
+----------+--------------+--------------------+
|utf-8 |\xe3\x81\x82 | o x x |
|euc-jp |\xa4\xa2 | x o o |
|cp932 |\x82\xa0 | x x o |
$ mkdir -p cvsrepo/transcoding
$ python <<EOF
Augie Fackler
tests: b prefixes on some inline python in test-convert-cvs.t...
r37907 > fp = open('cvsrepo/transcoding/file,v', 'wb')
> fp.write((b'''
FUJIWARA Katsunori
convert: transcode CVS log messages by specified encoding (issue5597)...
r33388 > head 1.4;
> access;
> symbols
> start:1.1.1.1 INITIAL:1.1.1;
> locks; strict;
> comment @# @;
>
>
> 1.4
> date 2017.07.10.00.00.04; author nobody; state Exp;
> branches;
> next 1.3;
> commitid 10059635D016A510FFA;
>
> 1.3
> date 2017.07.10.00.00.03; author nobody; state Exp;
> branches;
> next 1.2;
> commitid 10059635CFF6A4FF34E;
>
> 1.2
> date 2017.07.10.00.00.02; author nobody; state Exp;
> branches;
> next 1.1;
> commitid 10059635CFD6A4D5095;
>
> 1.1
> date 2017.07.10.00.00.01; author nobody; state Exp;
> branches
> 1.1.1.1;
> next ;
> commitid 10059635CFB6A4A3C33;
>
> 1.1.1.1
> date 2017.07.10.00.00.01; author nobody; state Exp;
> branches;
> next ;
> commitid 10059635CFB6A4A3C33;
>
>
> desc
> @@
>
>
> 1.4
> log
Augie Fackler
tests: b prefixes on some inline python in test-convert-cvs.t...
r37907 > @''' + u'\u3042'.encode('cp932') + b''' (cp932)
FUJIWARA Katsunori
convert: transcode CVS log messages by specified encoding (issue5597)...
r33388 > @
> text
> @1
> 2
> 3
> 4
> @
>
>
> 1.3
> log
Augie Fackler
tests: b prefixes on some inline python in test-convert-cvs.t...
r37907 > @''' + u'\u3042'.encode('euc-jp') + b''' (euc-jp)
FUJIWARA Katsunori
convert: transcode CVS log messages by specified encoding (issue5597)...
r33388 > @
> text
> @d4 1
> @
>
>
> 1.2
> log
Augie Fackler
tests: b prefixes on some inline python in test-convert-cvs.t...
r37907 > @''' + u'\u3042'.encode('utf-8') + b''' (utf-8)
FUJIWARA Katsunori
convert: transcode CVS log messages by specified encoding (issue5597)...
r33388 > @
> text
> @d3 1
> @
>
>
> 1.1
> log
> @Initial revision
> @
> text
> @d2 1
> @
>
>
> 1.1.1.1
> log
> @import
> @
> text
> @@
> ''').lstrip())
> EOF
$ cvscall -q checkout transcoding
U transcoding/file
Test converting in normal case
------------------------------
(filtering by grep in order to check only form of debug messages)
$ hg convert --config convert.cvsps.logencoding=utf-8,euc-jp,cp932 -q --debug transcoding transcoding-hg | grep 'transcoding by'
transcoding by utf-8: 1.1 of file
transcoding by utf-8: 1.1.1.1 of file
transcoding by utf-8: 1.2 of file
transcoding by euc-jp: 1.3 of file
transcoding by cp932: 1.4 of file
$ hg -R transcoding-hg --encoding utf-8 log -T "{rev}: {desc}\n"
5: update tags
4: import
3: \xe3\x81\x82 (cp932) (esc)
2: \xe3\x81\x82 (euc-jp) (esc)
1: \xe3\x81\x82 (utf-8) (esc)
0: Initial revision
$ rm -rf transcoding-hg
Test converting in error cases
------------------------------
unknown encoding in convert.cvsps.logencoding
$ hg convert --config convert.cvsps.logencoding=foobar -q transcoding transcoding-hg
abort: unknown encoding: foobar
(check convert.cvsps.logencoding configuration)
[255]
$ rm -rf transcoding-hg
no acceptable encoding in convert.cvsps.logencoding
$ hg convert --config convert.cvsps.logencoding=utf-8,euc-jp -q transcoding transcoding-hg
abort: no encoding can transcode CVS log message for 1.4 of file
(check convert.cvsps.logencoding configuration)
[255]
$ rm -rf transcoding-hg