##// END OF EJS Templates
convert: darcs use absolute_import
timeless -
r28368:b9296b33 default
parent child Browse files
Show More
@@ -1,208 +1,221 b''
1 # darcs.py - darcs support for the convert extension
1 # darcs.py - darcs support for the convert extension
2 #
2 #
3 # Copyright 2007-2009 Matt Mackall <mpm@selenic.com> and others
3 # Copyright 2007-2009 Matt Mackall <mpm@selenic.com> and others
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7 from __future__ import absolute_import
7
8
8 from common import NoRepo, checktool, commandline, commit, converter_source
9 import errno
10 import os
11 import re
12 import shutil
13 import tempfile
9 from mercurial.i18n import _
14 from mercurial.i18n import _
10 from mercurial import util, error
15 from mercurial import (
11 import os, shutil, tempfile, re, errno
16 error,
17 util,
18 )
19 from . import common
20 NoRepo = common.NoRepo
12
21
13 # The naming drift of ElementTree is fun!
22 # The naming drift of ElementTree is fun!
14
23
15 try:
24 try:
16 from xml.etree.cElementTree import ElementTree, XMLParser
25 import xml.etree.cElementTree.ElementTree as ElementTree
26 import xml.etree.cElementTree.XMLParser as XMLParser
17 except ImportError:
27 except ImportError:
18 try:
28 try:
19 from xml.etree.ElementTree import ElementTree, XMLParser
29 import xml.etree.ElementTree.ElementTree as ElementTree
30 import xml.etree.ElementTree.XMLParser as XMLParser
20 except ImportError:
31 except ImportError:
21 try:
32 try:
22 from elementtree.cElementTree import ElementTree, XMLParser
33 import elementtree.cElementTree.ElementTree as ElementTree
34 import elementtree.cElementTree.XMLParser as XMLParser
23 except ImportError:
35 except ImportError:
24 try:
36 try:
25 from elementtree.ElementTree import ElementTree, XMLParser
37 import elementtree.ElementTree.ElementTree as ElementTree
38 import elementtree.ElementTree.XMLParser as XMLParser
26 except ImportError:
39 except ImportError:
27 pass
40 pass
28
41
29 class darcs_source(converter_source, commandline):
42 class darcs_source(common.converter_source, common.commandline):
30 def __init__(self, ui, path, revs=None):
43 def __init__(self, ui, path, revs=None):
31 converter_source.__init__(self, ui, path, revs=revs)
44 common.converter_source.__init__(self, ui, path, revs=revs)
32 commandline.__init__(self, ui, 'darcs')
45 common.commandline.__init__(self, ui, 'darcs')
33
46
34 # check for _darcs, ElementTree so that we can easily skip
47 # check for _darcs, ElementTree so that we can easily skip
35 # test-convert-darcs if ElementTree is not around
48 # test-convert-darcs if ElementTree is not around
36 if not os.path.exists(os.path.join(path, '_darcs')):
49 if not os.path.exists(os.path.join(path, '_darcs')):
37 raise NoRepo(_("%s does not look like a darcs repository") % path)
50 raise NoRepo(_("%s does not look like a darcs repository") % path)
38
51
39 checktool('darcs')
52 common.checktool('darcs')
40 version = self.run0('--version').splitlines()[0].strip()
53 version = self.run0('--version').splitlines()[0].strip()
41 if version < '2.1':
54 if version < '2.1':
42 raise error.Abort(_('darcs version 2.1 or newer needed (found %r)')
55 raise error.Abort(_('darcs version 2.1 or newer needed (found %r)')
43 % version)
56 % version)
44
57
45 if "ElementTree" not in globals():
58 if "ElementTree" not in globals():
46 raise error.Abort(_("Python ElementTree module is not available"))
59 raise error.Abort(_("Python ElementTree module is not available"))
47
60
48 self.path = os.path.realpath(path)
61 self.path = os.path.realpath(path)
49
62
50 self.lastrev = None
63 self.lastrev = None
51 self.changes = {}
64 self.changes = {}
52 self.parents = {}
65 self.parents = {}
53 self.tags = {}
66 self.tags = {}
54
67
55 # Check darcs repository format
68 # Check darcs repository format
56 format = self.format()
69 format = self.format()
57 if format:
70 if format:
58 if format in ('darcs-1.0', 'hashed'):
71 if format in ('darcs-1.0', 'hashed'):
59 raise NoRepo(_("%s repository format is unsupported, "
72 raise NoRepo(_("%s repository format is unsupported, "
60 "please upgrade") % format)
73 "please upgrade") % format)
61 else:
74 else:
62 self.ui.warn(_('failed to detect repository format!'))
75 self.ui.warn(_('failed to detect repository format!'))
63
76
64 def before(self):
77 def before(self):
65 self.tmppath = tempfile.mkdtemp(
78 self.tmppath = tempfile.mkdtemp(
66 prefix='convert-' + os.path.basename(self.path) + '-')
79 prefix='convert-' + os.path.basename(self.path) + '-')
67 output, status = self.run('init', repodir=self.tmppath)
80 output, status = self.run('init', repodir=self.tmppath)
68 self.checkexit(status)
81 self.checkexit(status)
69
82
70 tree = self.xml('changes', xml_output=True, summary=True,
83 tree = self.xml('changes', xml_output=True, summary=True,
71 repodir=self.path)
84 repodir=self.path)
72 tagname = None
85 tagname = None
73 child = None
86 child = None
74 for elt in tree.findall('patch'):
87 for elt in tree.findall('patch'):
75 node = elt.get('hash')
88 node = elt.get('hash')
76 name = elt.findtext('name', '')
89 name = elt.findtext('name', '')
77 if name.startswith('TAG '):
90 if name.startswith('TAG '):
78 tagname = name[4:].strip()
91 tagname = name[4:].strip()
79 elif tagname is not None:
92 elif tagname is not None:
80 self.tags[tagname] = node
93 self.tags[tagname] = node
81 tagname = None
94 tagname = None
82 self.changes[node] = elt
95 self.changes[node] = elt
83 self.parents[child] = [node]
96 self.parents[child] = [node]
84 child = node
97 child = node
85 self.parents[child] = []
98 self.parents[child] = []
86
99
87 def after(self):
100 def after(self):
88 self.ui.debug('cleaning up %s\n' % self.tmppath)
101 self.ui.debug('cleaning up %s\n' % self.tmppath)
89 shutil.rmtree(self.tmppath, ignore_errors=True)
102 shutil.rmtree(self.tmppath, ignore_errors=True)
90
103
91 def recode(self, s, encoding=None):
104 def recode(self, s, encoding=None):
92 if isinstance(s, unicode):
105 if isinstance(s, unicode):
93 # XMLParser returns unicode objects for anything it can't
106 # XMLParser returns unicode objects for anything it can't
94 # encode into ASCII. We convert them back to str to get
107 # encode into ASCII. We convert them back to str to get
95 # recode's normal conversion behavior.
108 # recode's normal conversion behavior.
96 s = s.encode('latin-1')
109 s = s.encode('latin-1')
97 return super(darcs_source, self).recode(s, encoding)
110 return super(darcs_source, self).recode(s, encoding)
98
111
99 def xml(self, cmd, **kwargs):
112 def xml(self, cmd, **kwargs):
100 # NOTE: darcs is currently encoding agnostic and will print
113 # NOTE: darcs is currently encoding agnostic and will print
101 # patch metadata byte-for-byte, even in the XML changelog.
114 # patch metadata byte-for-byte, even in the XML changelog.
102 etree = ElementTree()
115 etree = ElementTree()
103 # While we are decoding the XML as latin-1 to be as liberal as
116 # While we are decoding the XML as latin-1 to be as liberal as
104 # possible, etree will still raise an exception if any
117 # possible, etree will still raise an exception if any
105 # non-printable characters are in the XML changelog.
118 # non-printable characters are in the XML changelog.
106 parser = XMLParser(encoding='latin-1')
119 parser = XMLParser(encoding='latin-1')
107 p = self._run(cmd, **kwargs)
120 p = self._run(cmd, **kwargs)
108 etree.parse(p.stdout, parser=parser)
121 etree.parse(p.stdout, parser=parser)
109 p.wait()
122 p.wait()
110 self.checkexit(p.returncode)
123 self.checkexit(p.returncode)
111 return etree.getroot()
124 return etree.getroot()
112
125
113 def format(self):
126 def format(self):
114 output, status = self.run('show', 'repo', no_files=True,
127 output, status = self.run('show', 'repo', no_files=True,
115 repodir=self.path)
128 repodir=self.path)
116 self.checkexit(status)
129 self.checkexit(status)
117 m = re.search(r'^\s*Format:\s*(.*)$', output, re.MULTILINE)
130 m = re.search(r'^\s*Format:\s*(.*)$', output, re.MULTILINE)
118 if not m:
131 if not m:
119 return None
132 return None
120 return ','.join(sorted(f.strip() for f in m.group(1).split(',')))
133 return ','.join(sorted(f.strip() for f in m.group(1).split(',')))
121
134
122 def manifest(self):
135 def manifest(self):
123 man = []
136 man = []
124 output, status = self.run('show', 'files', no_directories=True,
137 output, status = self.run('show', 'files', no_directories=True,
125 repodir=self.tmppath)
138 repodir=self.tmppath)
126 self.checkexit(status)
139 self.checkexit(status)
127 for line in output.split('\n'):
140 for line in output.split('\n'):
128 path = line[2:]
141 path = line[2:]
129 if path:
142 if path:
130 man.append(path)
143 man.append(path)
131 return man
144 return man
132
145
133 def getheads(self):
146 def getheads(self):
134 return self.parents[None]
147 return self.parents[None]
135
148
136 def getcommit(self, rev):
149 def getcommit(self, rev):
137 elt = self.changes[rev]
150 elt = self.changes[rev]
138 date = util.strdate(elt.get('local_date'), '%a %b %d %H:%M:%S %Z %Y')
151 date = util.strdate(elt.get('local_date'), '%a %b %d %H:%M:%S %Z %Y')
139 desc = elt.findtext('name') + '\n' + elt.findtext('comment', '')
152 desc = elt.findtext('name') + '\n' + elt.findtext('comment', '')
140 # etree can return unicode objects for name, comment, and author,
153 # etree can return unicode objects for name, comment, and author,
141 # so recode() is used to ensure str objects are emitted.
154 # so recode() is used to ensure str objects are emitted.
142 return commit(author=self.recode(elt.get('author')),
155 return common.commit(author=self.recode(elt.get('author')),
143 date=util.datestr(date, '%Y-%m-%d %H:%M:%S %1%2'),
156 date=util.datestr(date, '%Y-%m-%d %H:%M:%S %1%2'),
144 desc=self.recode(desc).strip(),
157 desc=self.recode(desc).strip(),
145 parents=self.parents[rev])
158 parents=self.parents[rev])
146
159
147 def pull(self, rev):
160 def pull(self, rev):
148 output, status = self.run('pull', self.path, all=True,
161 output, status = self.run('pull', self.path, all=True,
149 match='hash %s' % rev,
162 match='hash %s' % rev,
150 no_test=True, no_posthook=True,
163 no_test=True, no_posthook=True,
151 external_merge='/bin/false',
164 external_merge='/bin/false',
152 repodir=self.tmppath)
165 repodir=self.tmppath)
153 if status:
166 if status:
154 if output.find('We have conflicts in') == -1:
167 if output.find('We have conflicts in') == -1:
155 self.checkexit(status, output)
168 self.checkexit(status, output)
156 output, status = self.run('revert', all=True, repodir=self.tmppath)
169 output, status = self.run('revert', all=True, repodir=self.tmppath)
157 self.checkexit(status, output)
170 self.checkexit(status, output)
158
171
159 def getchanges(self, rev, full):
172 def getchanges(self, rev, full):
160 if full:
173 if full:
161 raise error.Abort(_("convert from darcs does not support --full"))
174 raise error.Abort(_("convert from darcs does not support --full"))
162 copies = {}
175 copies = {}
163 changes = []
176 changes = []
164 man = None
177 man = None
165 for elt in self.changes[rev].find('summary').getchildren():
178 for elt in self.changes[rev].find('summary').getchildren():
166 if elt.tag in ('add_directory', 'remove_directory'):
179 if elt.tag in ('add_directory', 'remove_directory'):
167 continue
180 continue
168 if elt.tag == 'move':
181 if elt.tag == 'move':
169 if man is None:
182 if man is None:
170 man = self.manifest()
183 man = self.manifest()
171 source, dest = elt.get('from'), elt.get('to')
184 source, dest = elt.get('from'), elt.get('to')
172 if source in man:
185 if source in man:
173 # File move
186 # File move
174 changes.append((source, rev))
187 changes.append((source, rev))
175 changes.append((dest, rev))
188 changes.append((dest, rev))
176 copies[dest] = source
189 copies[dest] = source
177 else:
190 else:
178 # Directory move, deduce file moves from manifest
191 # Directory move, deduce file moves from manifest
179 source = source + '/'
192 source = source + '/'
180 for f in man:
193 for f in man:
181 if not f.startswith(source):
194 if not f.startswith(source):
182 continue
195 continue
183 fdest = dest + '/' + f[len(source):]
196 fdest = dest + '/' + f[len(source):]
184 changes.append((f, rev))
197 changes.append((f, rev))
185 changes.append((fdest, rev))
198 changes.append((fdest, rev))
186 copies[fdest] = f
199 copies[fdest] = f
187 else:
200 else:
188 changes.append((elt.text.strip(), rev))
201 changes.append((elt.text.strip(), rev))
189 self.pull(rev)
202 self.pull(rev)
190 self.lastrev = rev
203 self.lastrev = rev
191 return sorted(changes), copies, set()
204 return sorted(changes), copies, set()
192
205
193 def getfile(self, name, rev):
206 def getfile(self, name, rev):
194 if rev != self.lastrev:
207 if rev != self.lastrev:
195 raise error.Abort(_('internal calling inconsistency'))
208 raise error.Abort(_('internal calling inconsistency'))
196 path = os.path.join(self.tmppath, name)
209 path = os.path.join(self.tmppath, name)
197 try:
210 try:
198 data = util.readfile(path)
211 data = util.readfile(path)
199 mode = os.lstat(path).st_mode
212 mode = os.lstat(path).st_mode
200 except IOError as inst:
213 except IOError as inst:
201 if inst.errno == errno.ENOENT:
214 if inst.errno == errno.ENOENT:
202 return None, None
215 return None, None
203 raise
216 raise
204 mode = (mode & 0o111) and 'x' or ''
217 mode = (mode & 0o111) and 'x' or ''
205 return data, mode
218 return data, mode
206
219
207 def gettags(self):
220 def gettags(self):
208 return self.tags
221 return self.tags
@@ -1,155 +1,154 b''
1 #require test-repo
1 #require test-repo
2
2
3 $ cd "$TESTDIR"/..
3 $ cd "$TESTDIR"/..
4
4
5 $ hg files 'set:(**.py)' | sed 's|\\|/|g' | xargs python contrib/check-py3-compat.py
5 $ hg files 'set:(**.py)' | sed 's|\\|/|g' | xargs python contrib/check-py3-compat.py
6 contrib/check-code.py not using absolute_import
6 contrib/check-code.py not using absolute_import
7 contrib/check-code.py requires print_function
7 contrib/check-code.py requires print_function
8 contrib/debugshell.py not using absolute_import
8 contrib/debugshell.py not using absolute_import
9 contrib/hgfixes/fix_bytes.py not using absolute_import
9 contrib/hgfixes/fix_bytes.py not using absolute_import
10 contrib/hgfixes/fix_bytesmod.py not using absolute_import
10 contrib/hgfixes/fix_bytesmod.py not using absolute_import
11 contrib/hgfixes/fix_leftover_imports.py not using absolute_import
11 contrib/hgfixes/fix_leftover_imports.py not using absolute_import
12 contrib/import-checker.py not using absolute_import
12 contrib/import-checker.py not using absolute_import
13 contrib/import-checker.py requires print_function
13 contrib/import-checker.py requires print_function
14 contrib/memory.py not using absolute_import
14 contrib/memory.py not using absolute_import
15 contrib/perf.py not using absolute_import
15 contrib/perf.py not using absolute_import
16 contrib/python-hook-examples.py not using absolute_import
16 contrib/python-hook-examples.py not using absolute_import
17 contrib/revsetbenchmarks.py not using absolute_import
17 contrib/revsetbenchmarks.py not using absolute_import
18 contrib/revsetbenchmarks.py requires print_function
18 contrib/revsetbenchmarks.py requires print_function
19 contrib/showstack.py not using absolute_import
19 contrib/showstack.py not using absolute_import
20 contrib/synthrepo.py not using absolute_import
20 contrib/synthrepo.py not using absolute_import
21 contrib/win32/hgwebdir_wsgi.py not using absolute_import
21 contrib/win32/hgwebdir_wsgi.py not using absolute_import
22 doc/check-seclevel.py not using absolute_import
22 doc/check-seclevel.py not using absolute_import
23 doc/gendoc.py not using absolute_import
23 doc/gendoc.py not using absolute_import
24 doc/hgmanpage.py not using absolute_import
24 doc/hgmanpage.py not using absolute_import
25 hgext/__init__.py not using absolute_import
25 hgext/__init__.py not using absolute_import
26 hgext/color.py not using absolute_import
26 hgext/color.py not using absolute_import
27 hgext/convert/__init__.py not using absolute_import
27 hgext/convert/__init__.py not using absolute_import
28 hgext/convert/bzr.py not using absolute_import
28 hgext/convert/bzr.py not using absolute_import
29 hgext/convert/common.py not using absolute_import
29 hgext/convert/common.py not using absolute_import
30 hgext/convert/convcmd.py not using absolute_import
30 hgext/convert/convcmd.py not using absolute_import
31 hgext/convert/cvs.py not using absolute_import
31 hgext/convert/cvs.py not using absolute_import
32 hgext/convert/cvsps.py not using absolute_import
32 hgext/convert/cvsps.py not using absolute_import
33 hgext/convert/darcs.py not using absolute_import
34 hgext/convert/hg.py not using absolute_import
33 hgext/convert/hg.py not using absolute_import
35 hgext/convert/monotone.py not using absolute_import
34 hgext/convert/monotone.py not using absolute_import
36 hgext/convert/p4.py not using absolute_import
35 hgext/convert/p4.py not using absolute_import
37 hgext/convert/subversion.py not using absolute_import
36 hgext/convert/subversion.py not using absolute_import
38 hgext/convert/transport.py not using absolute_import
37 hgext/convert/transport.py not using absolute_import
39 hgext/eol.py not using absolute_import
38 hgext/eol.py not using absolute_import
40 hgext/extdiff.py not using absolute_import
39 hgext/extdiff.py not using absolute_import
41 hgext/factotum.py not using absolute_import
40 hgext/factotum.py not using absolute_import
42 hgext/fetch.py not using absolute_import
41 hgext/fetch.py not using absolute_import
43 hgext/gpg.py not using absolute_import
42 hgext/gpg.py not using absolute_import
44 hgext/graphlog.py not using absolute_import
43 hgext/graphlog.py not using absolute_import
45 hgext/hgcia.py not using absolute_import
44 hgext/hgcia.py not using absolute_import
46 hgext/hgk.py not using absolute_import
45 hgext/hgk.py not using absolute_import
47 hgext/highlight/__init__.py not using absolute_import
46 hgext/highlight/__init__.py not using absolute_import
48 hgext/highlight/highlight.py not using absolute_import
47 hgext/highlight/highlight.py not using absolute_import
49 hgext/histedit.py not using absolute_import
48 hgext/histedit.py not using absolute_import
50 hgext/largefiles/__init__.py not using absolute_import
49 hgext/largefiles/__init__.py not using absolute_import
51 hgext/largefiles/basestore.py not using absolute_import
50 hgext/largefiles/basestore.py not using absolute_import
52 hgext/largefiles/lfcommands.py not using absolute_import
51 hgext/largefiles/lfcommands.py not using absolute_import
53 hgext/largefiles/lfutil.py not using absolute_import
52 hgext/largefiles/lfutil.py not using absolute_import
54 hgext/largefiles/localstore.py not using absolute_import
53 hgext/largefiles/localstore.py not using absolute_import
55 hgext/largefiles/overrides.py not using absolute_import
54 hgext/largefiles/overrides.py not using absolute_import
56 hgext/largefiles/proto.py not using absolute_import
55 hgext/largefiles/proto.py not using absolute_import
57 hgext/largefiles/remotestore.py not using absolute_import
56 hgext/largefiles/remotestore.py not using absolute_import
58 hgext/largefiles/reposetup.py not using absolute_import
57 hgext/largefiles/reposetup.py not using absolute_import
59 hgext/largefiles/uisetup.py not using absolute_import
58 hgext/largefiles/uisetup.py not using absolute_import
60 hgext/largefiles/wirestore.py not using absolute_import
59 hgext/largefiles/wirestore.py not using absolute_import
61 hgext/mq.py not using absolute_import
60 hgext/mq.py not using absolute_import
62 hgext/notify.py not using absolute_import
61 hgext/notify.py not using absolute_import
63 hgext/patchbomb.py not using absolute_import
62 hgext/patchbomb.py not using absolute_import
64 hgext/purge.py not using absolute_import
63 hgext/purge.py not using absolute_import
65 hgext/rebase.py not using absolute_import
64 hgext/rebase.py not using absolute_import
66 hgext/record.py not using absolute_import
65 hgext/record.py not using absolute_import
67 hgext/relink.py not using absolute_import
66 hgext/relink.py not using absolute_import
68 hgext/schemes.py not using absolute_import
67 hgext/schemes.py not using absolute_import
69 hgext/share.py not using absolute_import
68 hgext/share.py not using absolute_import
70 hgext/shelve.py not using absolute_import
69 hgext/shelve.py not using absolute_import
71 hgext/strip.py not using absolute_import
70 hgext/strip.py not using absolute_import
72 hgext/transplant.py not using absolute_import
71 hgext/transplant.py not using absolute_import
73 hgext/win32mbcs.py not using absolute_import
72 hgext/win32mbcs.py not using absolute_import
74 hgext/win32text.py not using absolute_import
73 hgext/win32text.py not using absolute_import
75 i18n/check-translation.py not using absolute_import
74 i18n/check-translation.py not using absolute_import
76 i18n/polib.py not using absolute_import
75 i18n/polib.py not using absolute_import
77 setup.py not using absolute_import
76 setup.py not using absolute_import
78 tests/filterpyflakes.py requires print_function
77 tests/filterpyflakes.py requires print_function
79 tests/generate-working-copy-states.py requires print_function
78 tests/generate-working-copy-states.py requires print_function
80 tests/get-with-headers.py requires print_function
79 tests/get-with-headers.py requires print_function
81 tests/heredoctest.py requires print_function
80 tests/heredoctest.py requires print_function
82 tests/hypothesishelpers.py not using absolute_import
81 tests/hypothesishelpers.py not using absolute_import
83 tests/hypothesishelpers.py requires print_function
82 tests/hypothesishelpers.py requires print_function
84 tests/killdaemons.py not using absolute_import
83 tests/killdaemons.py not using absolute_import
85 tests/md5sum.py not using absolute_import
84 tests/md5sum.py not using absolute_import
86 tests/mockblackbox.py not using absolute_import
85 tests/mockblackbox.py not using absolute_import
87 tests/printenv.py not using absolute_import
86 tests/printenv.py not using absolute_import
88 tests/readlink.py not using absolute_import
87 tests/readlink.py not using absolute_import
89 tests/readlink.py requires print_function
88 tests/readlink.py requires print_function
90 tests/revlog-formatv0.py not using absolute_import
89 tests/revlog-formatv0.py not using absolute_import
91 tests/run-tests.py not using absolute_import
90 tests/run-tests.py not using absolute_import
92 tests/seq.py not using absolute_import
91 tests/seq.py not using absolute_import
93 tests/seq.py requires print_function
92 tests/seq.py requires print_function
94 tests/silenttestrunner.py not using absolute_import
93 tests/silenttestrunner.py not using absolute_import
95 tests/silenttestrunner.py requires print_function
94 tests/silenttestrunner.py requires print_function
96 tests/sitecustomize.py not using absolute_import
95 tests/sitecustomize.py not using absolute_import
97 tests/svn-safe-append.py not using absolute_import
96 tests/svn-safe-append.py not using absolute_import
98 tests/svnxml.py not using absolute_import
97 tests/svnxml.py not using absolute_import
99 tests/test-ancestor.py requires print_function
98 tests/test-ancestor.py requires print_function
100 tests/test-atomictempfile.py not using absolute_import
99 tests/test-atomictempfile.py not using absolute_import
101 tests/test-batching.py not using absolute_import
100 tests/test-batching.py not using absolute_import
102 tests/test-batching.py requires print_function
101 tests/test-batching.py requires print_function
103 tests/test-bdiff.py not using absolute_import
102 tests/test-bdiff.py not using absolute_import
104 tests/test-bdiff.py requires print_function
103 tests/test-bdiff.py requires print_function
105 tests/test-context.py not using absolute_import
104 tests/test-context.py not using absolute_import
106 tests/test-context.py requires print_function
105 tests/test-context.py requires print_function
107 tests/test-demandimport.py not using absolute_import
106 tests/test-demandimport.py not using absolute_import
108 tests/test-demandimport.py requires print_function
107 tests/test-demandimport.py requires print_function
109 tests/test-dispatch.py not using absolute_import
108 tests/test-dispatch.py not using absolute_import
110 tests/test-dispatch.py requires print_function
109 tests/test-dispatch.py requires print_function
111 tests/test-doctest.py not using absolute_import
110 tests/test-doctest.py not using absolute_import
112 tests/test-duplicateoptions.py not using absolute_import
111 tests/test-duplicateoptions.py not using absolute_import
113 tests/test-duplicateoptions.py requires print_function
112 tests/test-duplicateoptions.py requires print_function
114 tests/test-filecache.py not using absolute_import
113 tests/test-filecache.py not using absolute_import
115 tests/test-filecache.py requires print_function
114 tests/test-filecache.py requires print_function
116 tests/test-filelog.py not using absolute_import
115 tests/test-filelog.py not using absolute_import
117 tests/test-filelog.py requires print_function
116 tests/test-filelog.py requires print_function
118 tests/test-hg-parseurl.py not using absolute_import
117 tests/test-hg-parseurl.py not using absolute_import
119 tests/test-hg-parseurl.py requires print_function
118 tests/test-hg-parseurl.py requires print_function
120 tests/test-hgweb-auth.py not using absolute_import
119 tests/test-hgweb-auth.py not using absolute_import
121 tests/test-hgweb-auth.py requires print_function
120 tests/test-hgweb-auth.py requires print_function
122 tests/test-hgwebdir-paths.py not using absolute_import
121 tests/test-hgwebdir-paths.py not using absolute_import
123 tests/test-hybridencode.py not using absolute_import
122 tests/test-hybridencode.py not using absolute_import
124 tests/test-hybridencode.py requires print_function
123 tests/test-hybridencode.py requires print_function
125 tests/test-lrucachedict.py not using absolute_import
124 tests/test-lrucachedict.py not using absolute_import
126 tests/test-lrucachedict.py requires print_function
125 tests/test-lrucachedict.py requires print_function
127 tests/test-manifest.py not using absolute_import
126 tests/test-manifest.py not using absolute_import
128 tests/test-minirst.py not using absolute_import
127 tests/test-minirst.py not using absolute_import
129 tests/test-minirst.py requires print_function
128 tests/test-minirst.py requires print_function
130 tests/test-parseindex2.py not using absolute_import
129 tests/test-parseindex2.py not using absolute_import
131 tests/test-parseindex2.py requires print_function
130 tests/test-parseindex2.py requires print_function
132 tests/test-pathencode.py not using absolute_import
131 tests/test-pathencode.py not using absolute_import
133 tests/test-pathencode.py requires print_function
132 tests/test-pathencode.py requires print_function
134 tests/test-propertycache.py not using absolute_import
133 tests/test-propertycache.py not using absolute_import
135 tests/test-propertycache.py requires print_function
134 tests/test-propertycache.py requires print_function
136 tests/test-revlog-ancestry.py not using absolute_import
135 tests/test-revlog-ancestry.py not using absolute_import
137 tests/test-revlog-ancestry.py requires print_function
136 tests/test-revlog-ancestry.py requires print_function
138 tests/test-run-tests.py not using absolute_import
137 tests/test-run-tests.py not using absolute_import
139 tests/test-simplemerge.py not using absolute_import
138 tests/test-simplemerge.py not using absolute_import
140 tests/test-status-inprocess.py not using absolute_import
139 tests/test-status-inprocess.py not using absolute_import
141 tests/test-status-inprocess.py requires print_function
140 tests/test-status-inprocess.py requires print_function
142 tests/test-symlink-os-yes-fs-no.py not using absolute_import
141 tests/test-symlink-os-yes-fs-no.py not using absolute_import
143 tests/test-trusted.py not using absolute_import
142 tests/test-trusted.py not using absolute_import
144 tests/test-trusted.py requires print_function
143 tests/test-trusted.py requires print_function
145 tests/test-ui-color.py not using absolute_import
144 tests/test-ui-color.py not using absolute_import
146 tests/test-ui-color.py requires print_function
145 tests/test-ui-color.py requires print_function
147 tests/test-ui-config.py not using absolute_import
146 tests/test-ui-config.py not using absolute_import
148 tests/test-ui-config.py requires print_function
147 tests/test-ui-config.py requires print_function
149 tests/test-ui-verbosity.py not using absolute_import
148 tests/test-ui-verbosity.py not using absolute_import
150 tests/test-ui-verbosity.py requires print_function
149 tests/test-ui-verbosity.py requires print_function
151 tests/test-url.py not using absolute_import
150 tests/test-url.py not using absolute_import
152 tests/test-url.py requires print_function
151 tests/test-url.py requires print_function
153 tests/test-walkrepo.py requires print_function
152 tests/test-walkrepo.py requires print_function
154 tests/test-wireproto.py requires print_function
153 tests/test-wireproto.py requires print_function
155 tests/tinyproxy.py requires print_function
154 tests/tinyproxy.py requires print_function
General Comments 0
You need to be logged in to leave comments. Login now