Show More
@@ -7,22 +7,22 b'' | |||||
7 |
|
7 | |||
8 | from common import NoRepo, checktool, commandline, commit, converter_source |
|
8 | from common import NoRepo, checktool, commandline, commit, converter_source | |
9 | from mercurial.i18n import _ |
|
9 | from mercurial.i18n import _ | |
10 | from mercurial import util |
|
10 | from mercurial import encoding, util | |
11 | import os, shutil, tempfile, re |
|
11 | import os, shutil, tempfile, re | |
12 |
|
12 | |||
13 | # The naming drift of ElementTree is fun! |
|
13 | # The naming drift of ElementTree is fun! | |
14 |
|
14 | |||
15 | try: |
|
15 | try: | |
16 | from xml.etree.cElementTree import ElementTree |
|
16 | from xml.etree.cElementTree import ElementTree, XMLParser | |
17 | except ImportError: |
|
17 | except ImportError: | |
18 | try: |
|
18 | try: | |
19 | from xml.etree.ElementTree import ElementTree |
|
19 | from xml.etree.ElementTree import ElementTree, XMLParser | |
20 | except ImportError: |
|
20 | except ImportError: | |
21 | try: |
|
21 | try: | |
22 | from elementtree.cElementTree import ElementTree |
|
22 | from elementtree.cElementTree import ElementTree, XMLParser | |
23 | except ImportError: |
|
23 | except ImportError: | |
24 | try: |
|
24 | try: | |
25 | from elementtree.ElementTree import ElementTree |
|
25 | from elementtree.ElementTree import ElementTree, XMLParser | |
26 | except ImportError: |
|
26 | except ImportError: | |
27 | ElementTree = None |
|
27 | ElementTree = None | |
28 |
|
28 | |||
@@ -88,12 +88,24 b' class darcs_source(converter_source, com' | |||||
88 | self.ui.debug('cleaning up %s\n' % self.tmppath) |
|
88 | self.ui.debug('cleaning up %s\n' % self.tmppath) | |
89 | shutil.rmtree(self.tmppath, ignore_errors=True) |
|
89 | shutil.rmtree(self.tmppath, ignore_errors=True) | |
90 |
|
90 | |||
|
91 | def recode(self, s, encoding=None): | |||
|
92 | if isinstance(s, unicode): | |||
|
93 | # XMLParser returns unicode objects for anything it can't | |||
|
94 | # encode into ASCII. We convert them back to str to get | |||
|
95 | # recode's normal conversion behavior. | |||
|
96 | s = s.encode('latin-1') | |||
|
97 | return super(darcs_source, self).recode(s, encoding) | |||
|
98 | ||||
91 | def xml(self, cmd, **kwargs): |
|
99 | def xml(self, cmd, **kwargs): | |
92 | # NOTE: darcs is currently encoding agnostic and will print |
|
100 | # NOTE: darcs is currently encoding agnostic and will print | |
93 | # patch metadata byte-for-byte, even in the XML changelog. |
|
101 | # patch metadata byte-for-byte, even in the XML changelog. | |
94 | etree = ElementTree() |
|
102 | etree = ElementTree() | |
|
103 | # While we are decoding the XML as latin-1 to be as liberal as | |||
|
104 | # possible, etree will still raise an exception if any | |||
|
105 | # non-printable characters are in the XML changelog. | |||
|
106 | parser = XMLParser(encoding='latin-1') | |||
95 | fp = self._run(cmd, **kwargs) |
|
107 | fp = self._run(cmd, **kwargs) | |
96 | etree.parse(fp) |
|
108 | etree.parse(fp, parser=parser) | |
97 | self.checkexit(fp.close()) |
|
109 | self.checkexit(fp.close()) | |
98 | return etree.getroot() |
|
110 | return etree.getroot() | |
99 |
|
111 |
@@ -49,8 +49,6 b' update source' | |||||
49 | $ darcs record -a -l -m p1.2 |
|
49 | $ darcs record -a -l -m p1.2 | |
50 | Finished recording patch 'p1.2' |
|
50 | Finished recording patch 'p1.2' | |
51 |
|
51 | |||
52 | merge branch |
|
|||
53 |
|
||||
54 | $ darcs pull -a ../darcs-clone |
|
52 | $ darcs pull -a ../darcs-clone | |
55 | Backing up ./a(-darcs-backup0) |
|
53 | Backing up ./a(-darcs-backup0) | |
56 | We have conflicts in the following files: |
|
54 | We have conflicts in the following files: | |
@@ -85,6 +83,15 b' darcs is encoding agnostic, so it takes ' | |||||
85 |
|
83 | |||
86 | $ darcs record -a -l -m 'p4: desc ñ' -A 'author ñ' |
|
84 | $ darcs record -a -l -m 'p4: desc ñ' -A 'author ñ' | |
87 | Finished recording patch 'p4: desc ñ' |
|
85 | Finished recording patch 'p4: desc ñ' | |
|
86 | ||||
|
87 | Test latin-1 commit message | |||
|
88 | ||||
|
89 | $ echo h > h | |||
|
90 | $ printf "p5: desc " > ../p5 | |||
|
91 | $ python -c 'print "".join([chr(i) for i in range(128, 256)])' >> ../p5 | |||
|
92 | $ darcs record -a -l --logfile ../p5 | |||
|
93 | Finished recording patch 'p5: desc ��������������������������������������������������������������������������������������������������������������������������������' | |||
|
94 | ||||
88 | $ glog() |
|
95 | $ glog() | |
89 | > { |
|
96 | > { | |
90 | > HGENCODING=utf-8 hg glog --template '{rev} "{desc|firstline}" ({author}) files: {files}\n' "$@" |
|
97 | > HGENCODING=utf-8 hg glog --template '{rev} "{desc|firstline}" ({author}) files: {files}\n' "$@" | |
@@ -95,12 +102,13 b' darcs is encoding agnostic, so it takes ' | |||||
95 | scanning source... |
|
102 | scanning source... | |
96 | sorting... |
|
103 | sorting... | |
97 | converting... |
|
104 | converting... | |
98 |
|
|
105 | 6 p0 | |
99 |
|
|
106 | 5 p1.2 | |
100 |
|
|
107 | 4 p1.1 | |
101 |
|
|
108 | 3 p2 | |
102 |
|
|
109 | 2 p3 | |
103 |
|
|
110 | 1 p4: desc ? | |
|
111 | 0 p5: desc ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? | |||
104 |
|
112 | |||
105 | The converter does not currently handle patch conflicts very well. |
|
113 | The converter does not currently handle patch conflicts very well. | |
106 | When they occur, it reverts *all* changes and moves forward, |
|
114 | When they occur, it reverts *all* changes and moves forward, | |
@@ -109,8 +117,11 b' Unfortunately, non-conflicting changes, ' | |||||
109 | "c" file in p1.1 patch are reverted too. |
|
117 | "c" file in p1.1 patch are reverted too. | |
110 | Just to say that manifest not listing "c" here is a bug. |
|
118 | Just to say that manifest not listing "c" here is a bug. | |
111 |
|
119 | |||
112 | $ glog -R darcs-repo-hg |
|
120 | $ HGENCODING=latin-1 glog -R darcs-repo-hg -r 6 | "$TESTDIR"/printrepr.py | |
113 | o 5 "p4: desc ñ" (author ñ) files: g |
|
121 | o 6 "p5: desc \xc2\x80\xc2\x81\xc2\x82\xc2\x83\xc2\x84\xc2\x85\xc2\x86\xc2\x87\xc2\x88\xc2\x89\xc2\x8a\xc2\x8b\xc2\x8c\xc2\x8d\xc2\x8e\xc2\x8f\xc2\x90\xc2\x91\xc2\x92\xc2\x93\xc2\x94\xc2\x95\xc2\x96\xc2\x97\xc2\x98\xc2\x99\xc2\x9a\xc2\x9b\xc2\x9c\xc2\x9d\xc2\x9e\xc2\x9f\xc2\xa0\xc2\xa1\xc2\xa2\xc2\xa3\xc2\xa4\xc2\xa5\xc2\xa6\xc2\xa7\xc2\xa8\xc2\xa9\xc2\xaa\xc2\xab\xc2\xac\xc2\xad\xc2\xae\xc2\xaf\xc2\xb0\xc2\xb1\xc2\xb2\xc2\xb3\xc2\xb4\xc2\xb5\xc2\xb6\xc2\xb7\xc2\xb8\xc2\xb9\xc2\xba\xc2\xbb\xc2\xbc\xc2\xbd\xc2\xbe\xc2\xbf\xc3\x80\xc3\x81\xc3\x82\xc3\x83\xc3\x84\xc3\x85\xc3\x86\xc3\x87\xc3\x88\xc3\x89\xc3\x8a\xc3\x8b\xc3\x8c\xc3\x8d\xc3\x8e\xc3\x8f\xc3\x90\xc3\x91\xc3\x92\xc3\x93\xc3\x94\xc3\x95\xc3\x96\xc3\x97\xc3\x98\xc3\x99\xc3\x9a\xc3\x9b\xc3\x9c\xc3\x9d\xc3\x9e\xc3\x9f\xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4\xc3\xa5\xc3\xa6\xc3\xa7\xc3\xa8\xc3\xa9\xc3\xaa\xc3\xab\xc3\xac\xc3\xad\xc3\xae\xc3\xaf\xc3\xb0\xc3\xb1\xc3\xb2\xc3\xb3\xc3\xb4\xc3\xb5\xc3\xb6\xc3\xb7\xc3\xb8\xc3\xb9\xc3\xba\xc3\xbb\xc3\xbc\xc3\xbd\xc3\xbe\xc3\xbf" (test@example.org) files: h | |
|
122 | | | |||
|
123 | $ HGENCODING=utf-8 glog -R darcs-repo-hg -r 0:5 | "$TESTDIR"/printrepr.py | |||
|
124 | o 5 "p4: desc \xc3\xb1" (author \xc3\xb1) files: g | |||
114 | | |
|
125 | | | |
115 | o 4 "p3" (test@example.org) files: dir/d dir/d2 dir2/d f ff |
|
126 | o 4 "p3" (test@example.org) files: dir/d dir/d2 dir2/d f ff | |
116 | | |
|
127 | | | |
@@ -122,6 +133,7 b' Just to say that manifest not listing "c' | |||||
122 | | |
|
133 | | | |
123 | o 0 "p0" (test@example.org) files: a |
|
134 | o 0 "p0" (test@example.org) files: a | |
124 |
|
135 | |||
|
136 | ||||
125 | $ hg up -q -R darcs-repo-hg |
|
137 | $ hg up -q -R darcs-repo-hg | |
126 | $ hg -R darcs-repo-hg manifest --debug |
|
138 | $ hg -R darcs-repo-hg manifest --debug | |
127 | 7225b30cdf38257d5cc7780772c051b6f33e6d6b 644 a |
|
139 | 7225b30cdf38257d5cc7780772c051b6f33e6d6b 644 a | |
@@ -129,3 +141,4 b' Just to say that manifest not listing "c' | |||||
129 | 37406831adc447ec2385014019599dfec953c806 644 dir2/d |
|
141 | 37406831adc447ec2385014019599dfec953c806 644 dir2/d | |
130 | b783a337463792a5c7d548ad85a7d3253c16ba8c 644 ff |
|
142 | b783a337463792a5c7d548ad85a7d3253c16ba8c 644 ff | |
131 | 0973eb1b2ecc4de7fafe7447ce1b7462108b4848 644 g |
|
143 | 0973eb1b2ecc4de7fafe7447ce1b7462108b4848 644 g | |
|
144 | fe6f8b4f507fe3eb524c527192a84920a4288dac 644 h |
General Comments 0
You need to be logged in to leave comments.
Login now