view tests/test-convert-cvs-detectmerge.out @ 12252:4481f8a93c7a stable

convert/darcs: handle non-ASCII metadata in darcs changelog (issue2354) Given a commit author or message with non-ASCII characters in a darcs repo, convert would raise a UnicodeEncodeError when adding changesets to the hg changelog. This happened because etree returns back unicode objects for any text it can't encode into ASCII. convert was passing these objects to changelog.add(), which would then attempt encoding.fromlocal() on them. This patch ensures converter_source.recode() is called on each piece of commit data returned by etree. (Also note that darcs is currently encoding agnostic and will print out whatever is in a patch's metadata byte-for-byte, even in the XML changelog.)
author Brodie Rao <brodie@bitheap.org>
date Fri, 10 Sep 2010 09:30:50 -0500
parents 56a5f80556f5
children
line wrap: on
line source

% create cvs repository with one project
cvs -f -q -d *REPO* init
% populate cvs repository
cvs -f -Q co proj
cvs -f -Q add file1
cvs -f ci -madd file1 on trunk
% create two release branches
cvs -f -q tag -b v1_0
T file1
cvs -f -q tag -b v1_1
T file1
% modify file1 on branch v1_0
cvs -f -Q update -rv1_0
cvs -f ci -madd text
% make unrelated change on v1_1
cvs -f -Q update -rv1_1
cvs -f -Q add unrelated
cvs -f ci -munrelated change
% merge file1 to v1_1
cvs -f -Q update -jv1_0
RCS file: *REPO*/proj/file1,v
retrieving revision 1.1
retrieving revision 1.1.2.1
Merging differences between 1.1 and 1.1.2.1 into file1
cvs -f ci -madd text [MERGE from v1_0]
% merge change to trunk
cvs -f -Q update -A
cvs -f -Q update -jv1_1
RCS file: *REPO*/proj/file1,v
retrieving revision 1.1
retrieving revision 1.1.4.1
Merging differences between 1.1 and 1.1.4.1 into file1
cvs -f ci -madd text [MERGE from v1_1]
% non-merged change on trunk
cvs -f -Q add file2
cvs -f ci -madd file2 on trunk file2
% change on trunk to backport
cvs -f ci -madd other text file1
revision 1.3
add other text
----------------------------
revision 1.2
add text [MERGE from v1_1]
----------------------------
revision 1.1
branches:  1.1.2;  1.1.4;
add file1 on trunk
----------------------------
revision 1.1.4.1
add text [MERGE from v1_0]
----------------------------
revision 1.1.2.1
add text
=============================================================================
% backport trunk change to v1_1
cvs -f -Q update -rv1_1
cvs -f -Q update -j1.2 -j1.3 file1
RCS file: *REPO*/proj/file1,v
retrieving revision 1.2
retrieving revision 1.3
Merging differences between 1.2 and 1.3 into file1
cvs -f ci -madd other text [MERGE from HEAD] file1
% fix bug on v1_1, merge to trunk with error
cvs -f -Q update -rv1_1
cvs -f -Q tag unmerged
cvs -f ci -mfix file1
cvs -f -Q update -A
cvs -f -Q update -junmerged -jv1_1
RCS file: *REPO*/proj/file1,v
retrieving revision 1.1.4.2
retrieving revision 1.1.4.3
Merging differences between 1.1.4.2 and 1.1.4.3 into file1
cvs -f ci -mfix file1 [MERGE from v1-1]
% convert to hg
warning: CVS commit message references non-existent branch 'v1-1':
fix file1 [MERGE from v1-1]
initializing destination proj.hg repository
connecting to *REPO*
scanning source...
collecting CVS rlog
12 log entries
creating changesets
10 changeset entries
sorting...
converting...
9 add file1 on trunk
8 add text
7 unrelated change
6 add text [MERGE from v1_0]
5 add text [MERGE from v1_1]
4 add file2 on trunk
3 add other text
2 add other text [MERGE from HEAD]
1 fix file1
0 fix file1 [MERGE from v1-1]
% complete log
9: '' fix file1 [MERGE from v1-1]
8: 'v1_1' fix file1
7: 'v1_1' add other text [MERGE from HEAD]
6: '' add other text
5: '' add file2 on trunk
4: '' add text [MERGE from v1_1]
3: 'v1_1' add text [MERGE from v1_0]
2: 'v1_1' unrelated change
1: 'v1_0' add text
0: '' add file1 on trunk
% graphical log
o  9: '' fix file1 [MERGE from v1-1]
|
| o  8: 'v1_1' fix file1
| |
| o  7: 'v1_1' add other text [MERGE from HEAD]
|/|
o |  6: '' add other text
| |
o |  5: '' add file2 on trunk
| |
o |  4: '' add text [MERGE from v1_1]
|\|
| o    3: 'v1_1' add text [MERGE from v1_0]
| |\
+---o  2: 'v1_1' unrelated change
| |
| o  1: 'v1_0' add text
|/
o  0: '' add file1 on trunk