##// END OF EJS Templates
similar: use absolute_import
Gregory Szorc -
r27359:a56c47ed default
parent child Browse files
Show More
@@ -1,104 +1,108
1 # similar.py - mechanisms for finding similar files
1 # similar.py - mechanisms for finding similar files
2 #
2 #
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
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
7
8 from i18n import _
8 from __future__ import absolute_import
9 import util
9
10 import mdiff
10 from .i18n import _
11 import bdiff
11 from . import (
12 bdiff,
13 mdiff,
14 util,
15 )
12
16
13 def _findexactmatches(repo, added, removed):
17 def _findexactmatches(repo, added, removed):
14 '''find renamed files that have no changes
18 '''find renamed files that have no changes
15
19
16 Takes a list of new filectxs and a list of removed filectxs, and yields
20 Takes a list of new filectxs and a list of removed filectxs, and yields
17 (before, after) tuples of exact matches.
21 (before, after) tuples of exact matches.
18 '''
22 '''
19 numfiles = len(added) + len(removed)
23 numfiles = len(added) + len(removed)
20
24
21 # Get hashes of removed files.
25 # Get hashes of removed files.
22 hashes = {}
26 hashes = {}
23 for i, fctx in enumerate(removed):
27 for i, fctx in enumerate(removed):
24 repo.ui.progress(_('searching for exact renames'), i, total=numfiles)
28 repo.ui.progress(_('searching for exact renames'), i, total=numfiles)
25 h = util.sha1(fctx.data()).digest()
29 h = util.sha1(fctx.data()).digest()
26 hashes[h] = fctx
30 hashes[h] = fctx
27
31
28 # For each added file, see if it corresponds to a removed file.
32 # For each added file, see if it corresponds to a removed file.
29 for i, fctx in enumerate(added):
33 for i, fctx in enumerate(added):
30 repo.ui.progress(_('searching for exact renames'), i + len(removed),
34 repo.ui.progress(_('searching for exact renames'), i + len(removed),
31 total=numfiles)
35 total=numfiles)
32 h = util.sha1(fctx.data()).digest()
36 h = util.sha1(fctx.data()).digest()
33 if h in hashes:
37 if h in hashes:
34 yield (hashes[h], fctx)
38 yield (hashes[h], fctx)
35
39
36 # Done
40 # Done
37 repo.ui.progress(_('searching for exact renames'), None)
41 repo.ui.progress(_('searching for exact renames'), None)
38
42
39 def _findsimilarmatches(repo, added, removed, threshold):
43 def _findsimilarmatches(repo, added, removed, threshold):
40 '''find potentially renamed files based on similar file content
44 '''find potentially renamed files based on similar file content
41
45
42 Takes a list of new filectxs and a list of removed filectxs, and yields
46 Takes a list of new filectxs and a list of removed filectxs, and yields
43 (before, after, score) tuples of partial matches.
47 (before, after, score) tuples of partial matches.
44 '''
48 '''
45 copies = {}
49 copies = {}
46 for i, r in enumerate(removed):
50 for i, r in enumerate(removed):
47 repo.ui.progress(_('searching for similar files'), i,
51 repo.ui.progress(_('searching for similar files'), i,
48 total=len(removed))
52 total=len(removed))
49
53
50 # lazily load text
54 # lazily load text
51 @util.cachefunc
55 @util.cachefunc
52 def data():
56 def data():
53 orig = r.data()
57 orig = r.data()
54 return orig, mdiff.splitnewlines(orig)
58 return orig, mdiff.splitnewlines(orig)
55
59
56 def score(text):
60 def score(text):
57 orig, lines = data()
61 orig, lines = data()
58 # bdiff.blocks() returns blocks of matching lines
62 # bdiff.blocks() returns blocks of matching lines
59 # count the number of bytes in each
63 # count the number of bytes in each
60 equal = 0
64 equal = 0
61 matches = bdiff.blocks(text, orig)
65 matches = bdiff.blocks(text, orig)
62 for x1, x2, y1, y2 in matches:
66 for x1, x2, y1, y2 in matches:
63 for line in lines[y1:y2]:
67 for line in lines[y1:y2]:
64 equal += len(line)
68 equal += len(line)
65
69
66 lengths = len(text) + len(orig)
70 lengths = len(text) + len(orig)
67 return equal * 2.0 / lengths
71 return equal * 2.0 / lengths
68
72
69 for a in added:
73 for a in added:
70 bestscore = copies.get(a, (None, threshold))[1]
74 bestscore = copies.get(a, (None, threshold))[1]
71 myscore = score(a.data())
75 myscore = score(a.data())
72 if myscore >= bestscore:
76 if myscore >= bestscore:
73 copies[a] = (r, myscore)
77 copies[a] = (r, myscore)
74 repo.ui.progress(_('searching'), None)
78 repo.ui.progress(_('searching'), None)
75
79
76 for dest, v in copies.iteritems():
80 for dest, v in copies.iteritems():
77 source, score = v
81 source, score = v
78 yield source, dest, score
82 yield source, dest, score
79
83
80 def findrenames(repo, added, removed, threshold):
84 def findrenames(repo, added, removed, threshold):
81 '''find renamed files -- yields (before, after, score) tuples'''
85 '''find renamed files -- yields (before, after, score) tuples'''
82 parentctx = repo['.']
86 parentctx = repo['.']
83 workingctx = repo[None]
87 workingctx = repo[None]
84
88
85 # Zero length files will be frequently unrelated to each other, and
89 # Zero length files will be frequently unrelated to each other, and
86 # tracking the deletion/addition of such a file will probably cause more
90 # tracking the deletion/addition of such a file will probably cause more
87 # harm than good. We strip them out here to avoid matching them later on.
91 # harm than good. We strip them out here to avoid matching them later on.
88 addedfiles = set([workingctx[fp] for fp in added
92 addedfiles = set([workingctx[fp] for fp in added
89 if workingctx[fp].size() > 0])
93 if workingctx[fp].size() > 0])
90 removedfiles = set([parentctx[fp] for fp in removed
94 removedfiles = set([parentctx[fp] for fp in removed
91 if fp in parentctx and parentctx[fp].size() > 0])
95 if fp in parentctx and parentctx[fp].size() > 0])
92
96
93 # Find exact matches.
97 # Find exact matches.
94 for (a, b) in _findexactmatches(repo,
98 for (a, b) in _findexactmatches(repo,
95 sorted(addedfiles), sorted(removedfiles)):
99 sorted(addedfiles), sorted(removedfiles)):
96 addedfiles.remove(b)
100 addedfiles.remove(b)
97 yield (a.path(), b.path(), 1.0)
101 yield (a.path(), b.path(), 1.0)
98
102
99 # If the user requested similar files to be matched, search for them also.
103 # If the user requested similar files to be matched, search for them also.
100 if threshold < 1.0:
104 if threshold < 1.0:
101 for (a, b, score) in _findsimilarmatches(repo,
105 for (a, b, score) in _findsimilarmatches(repo,
102 sorted(addedfiles), sorted(removedfiles), threshold):
106 sorted(addedfiles), sorted(removedfiles), threshold):
103 yield (a.path(), b.path(), score)
107 yield (a.path(), b.path(), score)
104
108
@@ -1,210 +1,209
1 #require test-repo
1 #require test-repo
2
2
3 $ cd "$TESTDIR"/..
3 $ cd "$TESTDIR"/..
4
4
5 $ hg files 'set:(**.py)' | xargs python contrib/check-py3-compat.py
5 $ hg files 'set:(**.py)' | xargs python contrib/check-py3-compat.py
6 contrib/casesmash.py not using absolute_import
6 contrib/casesmash.py not using absolute_import
7 contrib/check-code.py not using absolute_import
7 contrib/check-code.py not using absolute_import
8 contrib/check-code.py requires print_function
8 contrib/check-code.py requires print_function
9 contrib/check-config.py not using absolute_import
9 contrib/check-config.py not using absolute_import
10 contrib/check-config.py requires print_function
10 contrib/check-config.py requires print_function
11 contrib/debugcmdserver.py not using absolute_import
11 contrib/debugcmdserver.py not using absolute_import
12 contrib/debugcmdserver.py requires print_function
12 contrib/debugcmdserver.py requires print_function
13 contrib/debugshell.py not using absolute_import
13 contrib/debugshell.py not using absolute_import
14 contrib/fixpax.py not using absolute_import
14 contrib/fixpax.py not using absolute_import
15 contrib/fixpax.py requires print_function
15 contrib/fixpax.py requires print_function
16 contrib/hgclient.py not using absolute_import
16 contrib/hgclient.py not using absolute_import
17 contrib/hgclient.py requires print_function
17 contrib/hgclient.py requires print_function
18 contrib/hgfixes/fix_bytes.py not using absolute_import
18 contrib/hgfixes/fix_bytes.py not using absolute_import
19 contrib/hgfixes/fix_bytesmod.py not using absolute_import
19 contrib/hgfixes/fix_bytesmod.py not using absolute_import
20 contrib/hgfixes/fix_leftover_imports.py not using absolute_import
20 contrib/hgfixes/fix_leftover_imports.py not using absolute_import
21 contrib/import-checker.py not using absolute_import
21 contrib/import-checker.py not using absolute_import
22 contrib/import-checker.py requires print_function
22 contrib/import-checker.py requires print_function
23 contrib/memory.py not using absolute_import
23 contrib/memory.py not using absolute_import
24 contrib/perf.py not using absolute_import
24 contrib/perf.py not using absolute_import
25 contrib/python-hook-examples.py not using absolute_import
25 contrib/python-hook-examples.py not using absolute_import
26 contrib/revsetbenchmarks.py not using absolute_import
26 contrib/revsetbenchmarks.py not using absolute_import
27 contrib/revsetbenchmarks.py requires print_function
27 contrib/revsetbenchmarks.py requires print_function
28 contrib/showstack.py not using absolute_import
28 contrib/showstack.py not using absolute_import
29 contrib/synthrepo.py not using absolute_import
29 contrib/synthrepo.py not using absolute_import
30 contrib/win32/hgwebdir_wsgi.py not using absolute_import
30 contrib/win32/hgwebdir_wsgi.py not using absolute_import
31 doc/check-seclevel.py not using absolute_import
31 doc/check-seclevel.py not using absolute_import
32 doc/gendoc.py not using absolute_import
32 doc/gendoc.py not using absolute_import
33 doc/hgmanpage.py not using absolute_import
33 doc/hgmanpage.py not using absolute_import
34 hgext/__init__.py not using absolute_import
34 hgext/__init__.py not using absolute_import
35 hgext/acl.py not using absolute_import
35 hgext/acl.py not using absolute_import
36 hgext/blackbox.py not using absolute_import
36 hgext/blackbox.py not using absolute_import
37 hgext/bugzilla.py not using absolute_import
37 hgext/bugzilla.py not using absolute_import
38 hgext/censor.py not using absolute_import
38 hgext/censor.py not using absolute_import
39 hgext/children.py not using absolute_import
39 hgext/children.py not using absolute_import
40 hgext/churn.py not using absolute_import
40 hgext/churn.py not using absolute_import
41 hgext/clonebundles.py not using absolute_import
41 hgext/clonebundles.py not using absolute_import
42 hgext/color.py not using absolute_import
42 hgext/color.py not using absolute_import
43 hgext/convert/__init__.py not using absolute_import
43 hgext/convert/__init__.py not using absolute_import
44 hgext/convert/bzr.py not using absolute_import
44 hgext/convert/bzr.py not using absolute_import
45 hgext/convert/common.py not using absolute_import
45 hgext/convert/common.py not using absolute_import
46 hgext/convert/convcmd.py not using absolute_import
46 hgext/convert/convcmd.py not using absolute_import
47 hgext/convert/cvs.py not using absolute_import
47 hgext/convert/cvs.py not using absolute_import
48 hgext/convert/cvsps.py not using absolute_import
48 hgext/convert/cvsps.py not using absolute_import
49 hgext/convert/darcs.py not using absolute_import
49 hgext/convert/darcs.py not using absolute_import
50 hgext/convert/filemap.py not using absolute_import
50 hgext/convert/filemap.py not using absolute_import
51 hgext/convert/git.py not using absolute_import
51 hgext/convert/git.py not using absolute_import
52 hgext/convert/gnuarch.py not using absolute_import
52 hgext/convert/gnuarch.py not using absolute_import
53 hgext/convert/hg.py not using absolute_import
53 hgext/convert/hg.py not using absolute_import
54 hgext/convert/monotone.py not using absolute_import
54 hgext/convert/monotone.py not using absolute_import
55 hgext/convert/p4.py not using absolute_import
55 hgext/convert/p4.py not using absolute_import
56 hgext/convert/subversion.py not using absolute_import
56 hgext/convert/subversion.py not using absolute_import
57 hgext/convert/transport.py not using absolute_import
57 hgext/convert/transport.py not using absolute_import
58 hgext/eol.py not using absolute_import
58 hgext/eol.py not using absolute_import
59 hgext/extdiff.py not using absolute_import
59 hgext/extdiff.py not using absolute_import
60 hgext/factotum.py not using absolute_import
60 hgext/factotum.py not using absolute_import
61 hgext/fetch.py not using absolute_import
61 hgext/fetch.py not using absolute_import
62 hgext/gpg.py not using absolute_import
62 hgext/gpg.py not using absolute_import
63 hgext/graphlog.py not using absolute_import
63 hgext/graphlog.py not using absolute_import
64 hgext/hgcia.py not using absolute_import
64 hgext/hgcia.py not using absolute_import
65 hgext/hgk.py not using absolute_import
65 hgext/hgk.py not using absolute_import
66 hgext/highlight/__init__.py not using absolute_import
66 hgext/highlight/__init__.py not using absolute_import
67 hgext/highlight/highlight.py not using absolute_import
67 hgext/highlight/highlight.py not using absolute_import
68 hgext/histedit.py not using absolute_import
68 hgext/histedit.py not using absolute_import
69 hgext/keyword.py not using absolute_import
69 hgext/keyword.py not using absolute_import
70 hgext/largefiles/__init__.py not using absolute_import
70 hgext/largefiles/__init__.py not using absolute_import
71 hgext/largefiles/basestore.py not using absolute_import
71 hgext/largefiles/basestore.py not using absolute_import
72 hgext/largefiles/lfcommands.py not using absolute_import
72 hgext/largefiles/lfcommands.py not using absolute_import
73 hgext/largefiles/lfutil.py not using absolute_import
73 hgext/largefiles/lfutil.py not using absolute_import
74 hgext/largefiles/localstore.py not using absolute_import
74 hgext/largefiles/localstore.py not using absolute_import
75 hgext/largefiles/overrides.py not using absolute_import
75 hgext/largefiles/overrides.py not using absolute_import
76 hgext/largefiles/proto.py not using absolute_import
76 hgext/largefiles/proto.py not using absolute_import
77 hgext/largefiles/remotestore.py not using absolute_import
77 hgext/largefiles/remotestore.py not using absolute_import
78 hgext/largefiles/reposetup.py not using absolute_import
78 hgext/largefiles/reposetup.py not using absolute_import
79 hgext/largefiles/uisetup.py not using absolute_import
79 hgext/largefiles/uisetup.py not using absolute_import
80 hgext/largefiles/wirestore.py not using absolute_import
80 hgext/largefiles/wirestore.py not using absolute_import
81 hgext/mq.py not using absolute_import
81 hgext/mq.py not using absolute_import
82 hgext/notify.py not using absolute_import
82 hgext/notify.py not using absolute_import
83 hgext/pager.py not using absolute_import
83 hgext/pager.py not using absolute_import
84 hgext/patchbomb.py not using absolute_import
84 hgext/patchbomb.py not using absolute_import
85 hgext/purge.py not using absolute_import
85 hgext/purge.py not using absolute_import
86 hgext/rebase.py not using absolute_import
86 hgext/rebase.py not using absolute_import
87 hgext/record.py not using absolute_import
87 hgext/record.py not using absolute_import
88 hgext/relink.py not using absolute_import
88 hgext/relink.py not using absolute_import
89 hgext/schemes.py not using absolute_import
89 hgext/schemes.py not using absolute_import
90 hgext/share.py not using absolute_import
90 hgext/share.py not using absolute_import
91 hgext/shelve.py not using absolute_import
91 hgext/shelve.py not using absolute_import
92 hgext/strip.py not using absolute_import
92 hgext/strip.py not using absolute_import
93 hgext/transplant.py not using absolute_import
93 hgext/transplant.py not using absolute_import
94 hgext/win32mbcs.py not using absolute_import
94 hgext/win32mbcs.py not using absolute_import
95 hgext/win32text.py not using absolute_import
95 hgext/win32text.py not using absolute_import
96 hgext/zeroconf/Zeroconf.py not using absolute_import
96 hgext/zeroconf/Zeroconf.py not using absolute_import
97 hgext/zeroconf/Zeroconf.py requires print_function
97 hgext/zeroconf/Zeroconf.py requires print_function
98 hgext/zeroconf/__init__.py not using absolute_import
98 hgext/zeroconf/__init__.py not using absolute_import
99 i18n/check-translation.py not using absolute_import
99 i18n/check-translation.py not using absolute_import
100 i18n/polib.py not using absolute_import
100 i18n/polib.py not using absolute_import
101 mercurial/byterange.py not using absolute_import
101 mercurial/byterange.py not using absolute_import
102 mercurial/cmdutil.py not using absolute_import
102 mercurial/cmdutil.py not using absolute_import
103 mercurial/commands.py not using absolute_import
103 mercurial/commands.py not using absolute_import
104 mercurial/context.py not using absolute_import
104 mercurial/context.py not using absolute_import
105 mercurial/dirstate.py not using absolute_import
105 mercurial/dirstate.py not using absolute_import
106 mercurial/dispatch.py requires print_function
106 mercurial/dispatch.py requires print_function
107 mercurial/exchange.py not using absolute_import
107 mercurial/exchange.py not using absolute_import
108 mercurial/help.py not using absolute_import
108 mercurial/help.py not using absolute_import
109 mercurial/httpclient/__init__.py not using absolute_import
109 mercurial/httpclient/__init__.py not using absolute_import
110 mercurial/httpclient/_readers.py not using absolute_import
110 mercurial/httpclient/_readers.py not using absolute_import
111 mercurial/httpclient/socketutil.py not using absolute_import
111 mercurial/httpclient/socketutil.py not using absolute_import
112 mercurial/httpconnection.py not using absolute_import
112 mercurial/httpconnection.py not using absolute_import
113 mercurial/keepalive.py not using absolute_import
113 mercurial/keepalive.py not using absolute_import
114 mercurial/keepalive.py requires print_function
114 mercurial/keepalive.py requires print_function
115 mercurial/localrepo.py not using absolute_import
115 mercurial/localrepo.py not using absolute_import
116 mercurial/lsprof.py requires print_function
116 mercurial/lsprof.py requires print_function
117 mercurial/lsprofcalltree.py not using absolute_import
117 mercurial/lsprofcalltree.py not using absolute_import
118 mercurial/lsprofcalltree.py requires print_function
118 mercurial/lsprofcalltree.py requires print_function
119 mercurial/mail.py requires print_function
119 mercurial/mail.py requires print_function
120 mercurial/manifest.py not using absolute_import
120 mercurial/manifest.py not using absolute_import
121 mercurial/mdiff.py not using absolute_import
121 mercurial/mdiff.py not using absolute_import
122 mercurial/patch.py not using absolute_import
122 mercurial/patch.py not using absolute_import
123 mercurial/pvec.py not using absolute_import
123 mercurial/pvec.py not using absolute_import
124 mercurial/py3kcompat.py not using absolute_import
124 mercurial/py3kcompat.py not using absolute_import
125 mercurial/revlog.py not using absolute_import
125 mercurial/revlog.py not using absolute_import
126 mercurial/scmposix.py not using absolute_import
126 mercurial/scmposix.py not using absolute_import
127 mercurial/scmutil.py not using absolute_import
127 mercurial/scmutil.py not using absolute_import
128 mercurial/scmwindows.py not using absolute_import
128 mercurial/scmwindows.py not using absolute_import
129 mercurial/similar.py not using absolute_import
130 mercurial/store.py not using absolute_import
129 mercurial/store.py not using absolute_import
131 mercurial/windows.py not using absolute_import
130 mercurial/windows.py not using absolute_import
132 setup.py not using absolute_import
131 setup.py not using absolute_import
133 tests/filterpyflakes.py requires print_function
132 tests/filterpyflakes.py requires print_function
134 tests/generate-working-copy-states.py requires print_function
133 tests/generate-working-copy-states.py requires print_function
135 tests/get-with-headers.py requires print_function
134 tests/get-with-headers.py requires print_function
136 tests/heredoctest.py requires print_function
135 tests/heredoctest.py requires print_function
137 tests/hypothesishelpers.py not using absolute_import
136 tests/hypothesishelpers.py not using absolute_import
138 tests/hypothesishelpers.py requires print_function
137 tests/hypothesishelpers.py requires print_function
139 tests/killdaemons.py not using absolute_import
138 tests/killdaemons.py not using absolute_import
140 tests/md5sum.py not using absolute_import
139 tests/md5sum.py not using absolute_import
141 tests/mockblackbox.py not using absolute_import
140 tests/mockblackbox.py not using absolute_import
142 tests/printenv.py not using absolute_import
141 tests/printenv.py not using absolute_import
143 tests/readlink.py not using absolute_import
142 tests/readlink.py not using absolute_import
144 tests/readlink.py requires print_function
143 tests/readlink.py requires print_function
145 tests/revlog-formatv0.py not using absolute_import
144 tests/revlog-formatv0.py not using absolute_import
146 tests/run-tests.py not using absolute_import
145 tests/run-tests.py not using absolute_import
147 tests/seq.py not using absolute_import
146 tests/seq.py not using absolute_import
148 tests/seq.py requires print_function
147 tests/seq.py requires print_function
149 tests/silenttestrunner.py not using absolute_import
148 tests/silenttestrunner.py not using absolute_import
150 tests/silenttestrunner.py requires print_function
149 tests/silenttestrunner.py requires print_function
151 tests/sitecustomize.py not using absolute_import
150 tests/sitecustomize.py not using absolute_import
152 tests/svn-safe-append.py not using absolute_import
151 tests/svn-safe-append.py not using absolute_import
153 tests/svnxml.py not using absolute_import
152 tests/svnxml.py not using absolute_import
154 tests/test-ancestor.py requires print_function
153 tests/test-ancestor.py requires print_function
155 tests/test-atomictempfile.py not using absolute_import
154 tests/test-atomictempfile.py not using absolute_import
156 tests/test-batching.py not using absolute_import
155 tests/test-batching.py not using absolute_import
157 tests/test-batching.py requires print_function
156 tests/test-batching.py requires print_function
158 tests/test-bdiff.py not using absolute_import
157 tests/test-bdiff.py not using absolute_import
159 tests/test-bdiff.py requires print_function
158 tests/test-bdiff.py requires print_function
160 tests/test-context.py not using absolute_import
159 tests/test-context.py not using absolute_import
161 tests/test-context.py requires print_function
160 tests/test-context.py requires print_function
162 tests/test-demandimport.py not using absolute_import
161 tests/test-demandimport.py not using absolute_import
163 tests/test-demandimport.py requires print_function
162 tests/test-demandimport.py requires print_function
164 tests/test-dispatch.py not using absolute_import
163 tests/test-dispatch.py not using absolute_import
165 tests/test-dispatch.py requires print_function
164 tests/test-dispatch.py requires print_function
166 tests/test-doctest.py not using absolute_import
165 tests/test-doctest.py not using absolute_import
167 tests/test-duplicateoptions.py not using absolute_import
166 tests/test-duplicateoptions.py not using absolute_import
168 tests/test-duplicateoptions.py requires print_function
167 tests/test-duplicateoptions.py requires print_function
169 tests/test-filecache.py not using absolute_import
168 tests/test-filecache.py not using absolute_import
170 tests/test-filecache.py requires print_function
169 tests/test-filecache.py requires print_function
171 tests/test-filelog.py not using absolute_import
170 tests/test-filelog.py not using absolute_import
172 tests/test-filelog.py requires print_function
171 tests/test-filelog.py requires print_function
173 tests/test-hg-parseurl.py not using absolute_import
172 tests/test-hg-parseurl.py not using absolute_import
174 tests/test-hg-parseurl.py requires print_function
173 tests/test-hg-parseurl.py requires print_function
175 tests/test-hgweb-auth.py not using absolute_import
174 tests/test-hgweb-auth.py not using absolute_import
176 tests/test-hgweb-auth.py requires print_function
175 tests/test-hgweb-auth.py requires print_function
177 tests/test-hgwebdir-paths.py not using absolute_import
176 tests/test-hgwebdir-paths.py not using absolute_import
178 tests/test-hybridencode.py not using absolute_import
177 tests/test-hybridencode.py not using absolute_import
179 tests/test-hybridencode.py requires print_function
178 tests/test-hybridencode.py requires print_function
180 tests/test-lrucachedict.py not using absolute_import
179 tests/test-lrucachedict.py not using absolute_import
181 tests/test-lrucachedict.py requires print_function
180 tests/test-lrucachedict.py requires print_function
182 tests/test-manifest.py not using absolute_import
181 tests/test-manifest.py not using absolute_import
183 tests/test-minirst.py not using absolute_import
182 tests/test-minirst.py not using absolute_import
184 tests/test-minirst.py requires print_function
183 tests/test-minirst.py requires print_function
185 tests/test-parseindex2.py not using absolute_import
184 tests/test-parseindex2.py not using absolute_import
186 tests/test-parseindex2.py requires print_function
185 tests/test-parseindex2.py requires print_function
187 tests/test-pathencode.py not using absolute_import
186 tests/test-pathencode.py not using absolute_import
188 tests/test-pathencode.py requires print_function
187 tests/test-pathencode.py requires print_function
189 tests/test-propertycache.py not using absolute_import
188 tests/test-propertycache.py not using absolute_import
190 tests/test-propertycache.py requires print_function
189 tests/test-propertycache.py requires print_function
191 tests/test-revlog-ancestry.py not using absolute_import
190 tests/test-revlog-ancestry.py not using absolute_import
192 tests/test-revlog-ancestry.py requires print_function
191 tests/test-revlog-ancestry.py requires print_function
193 tests/test-run-tests.py not using absolute_import
192 tests/test-run-tests.py not using absolute_import
194 tests/test-simplemerge.py not using absolute_import
193 tests/test-simplemerge.py not using absolute_import
195 tests/test-status-inprocess.py not using absolute_import
194 tests/test-status-inprocess.py not using absolute_import
196 tests/test-status-inprocess.py requires print_function
195 tests/test-status-inprocess.py requires print_function
197 tests/test-symlink-os-yes-fs-no.py not using absolute_import
196 tests/test-symlink-os-yes-fs-no.py not using absolute_import
198 tests/test-trusted.py not using absolute_import
197 tests/test-trusted.py not using absolute_import
199 tests/test-trusted.py requires print_function
198 tests/test-trusted.py requires print_function
200 tests/test-ui-color.py not using absolute_import
199 tests/test-ui-color.py not using absolute_import
201 tests/test-ui-color.py requires print_function
200 tests/test-ui-color.py requires print_function
202 tests/test-ui-config.py not using absolute_import
201 tests/test-ui-config.py not using absolute_import
203 tests/test-ui-config.py requires print_function
202 tests/test-ui-config.py requires print_function
204 tests/test-ui-verbosity.py not using absolute_import
203 tests/test-ui-verbosity.py not using absolute_import
205 tests/test-ui-verbosity.py requires print_function
204 tests/test-ui-verbosity.py requires print_function
206 tests/test-url.py not using absolute_import
205 tests/test-url.py not using absolute_import
207 tests/test-url.py requires print_function
206 tests/test-url.py requires print_function
208 tests/test-walkrepo.py requires print_function
207 tests/test-walkrepo.py requires print_function
209 tests/test-wireproto.py requires print_function
208 tests/test-wireproto.py requires print_function
210 tests/tinyproxy.py requires print_function
209 tests/tinyproxy.py requires print_function
General Comments 0
You need to be logged in to leave comments. Login now