##// END OF EJS Templates
record: use absolute_import
timeless -
r28381:44ffbb2a default
parent child Browse files
Show More
@@ -1,143 +1,148 b''
1 # record.py
1 # record.py
2 #
2 #
3 # Copyright 2007 Bryan O'Sullivan <bos@serpentine.com>
3 # Copyright 2007 Bryan O'Sullivan <bos@serpentine.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 '''commands to interactively select changes for commit/qrefresh'''
8 '''commands to interactively select changes for commit/qrefresh'''
9 from __future__ import absolute_import
9
10
11 from mercurial import (
12 cmdutil,
13 commands,
14 error,
15 extensions,
16 )
10 from mercurial.i18n import _
17 from mercurial.i18n import _
11 from mercurial import cmdutil, commands, extensions
12 from mercurial import error
13
18
14 cmdtable = {}
19 cmdtable = {}
15 command = cmdutil.command(cmdtable)
20 command = cmdutil.command(cmdtable)
16 # Note for extension authors: ONLY specify testedwith = 'internal' for
21 # Note for extension authors: ONLY specify testedwith = 'internal' for
17 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
22 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
18 # be specifying the version(s) of Mercurial they are tested with, or
23 # be specifying the version(s) of Mercurial they are tested with, or
19 # leave the attribute unspecified.
24 # leave the attribute unspecified.
20 testedwith = 'internal'
25 testedwith = 'internal'
21
26
22
27
23 @command("record",
28 @command("record",
24 # same options as commit + white space diff options
29 # same options as commit + white space diff options
25 [c for c in commands.table['^commit|ci'][1][:]
30 [c for c in commands.table['^commit|ci'][1][:]
26 if c[1] != "interactive"] + commands.diffwsopts,
31 if c[1] != "interactive"] + commands.diffwsopts,
27 _('hg record [OPTION]... [FILE]...'))
32 _('hg record [OPTION]... [FILE]...'))
28 def record(ui, repo, *pats, **opts):
33 def record(ui, repo, *pats, **opts):
29 '''interactively select changes to commit
34 '''interactively select changes to commit
30
35
31 If a list of files is omitted, all changes reported by :hg:`status`
36 If a list of files is omitted, all changes reported by :hg:`status`
32 will be candidates for recording.
37 will be candidates for recording.
33
38
34 See :hg:`help dates` for a list of formats valid for -d/--date.
39 See :hg:`help dates` for a list of formats valid for -d/--date.
35
40
36 You will be prompted for whether to record changes to each
41 You will be prompted for whether to record changes to each
37 modified file, and for files with multiple changes, for each
42 modified file, and for files with multiple changes, for each
38 change to use. For each query, the following responses are
43 change to use. For each query, the following responses are
39 possible::
44 possible::
40
45
41 y - record this change
46 y - record this change
42 n - skip this change
47 n - skip this change
43 e - edit this change manually
48 e - edit this change manually
44
49
45 s - skip remaining changes to this file
50 s - skip remaining changes to this file
46 f - record remaining changes to this file
51 f - record remaining changes to this file
47
52
48 d - done, skip remaining changes and files
53 d - done, skip remaining changes and files
49 a - record all changes to all remaining files
54 a - record all changes to all remaining files
50 q - quit, recording no changes
55 q - quit, recording no changes
51
56
52 ? - display help
57 ? - display help
53
58
54 This command is not available when committing a merge.'''
59 This command is not available when committing a merge.'''
55
60
56 if not ui.interactive():
61 if not ui.interactive():
57 raise error.Abort(_('running non-interactively, use %s instead') %
62 raise error.Abort(_('running non-interactively, use %s instead') %
58 'commit')
63 'commit')
59
64
60 opts["interactive"] = True
65 opts["interactive"] = True
61 backup = ui.backupconfig('experimental', 'crecord')
66 backup = ui.backupconfig('experimental', 'crecord')
62 try:
67 try:
63 ui.setconfig('experimental', 'crecord', False, 'record')
68 ui.setconfig('experimental', 'crecord', False, 'record')
64 commands.commit(ui, repo, *pats, **opts)
69 commands.commit(ui, repo, *pats, **opts)
65 finally:
70 finally:
66 ui.restoreconfig(backup)
71 ui.restoreconfig(backup)
67
72
68 def qrefresh(origfn, ui, repo, *pats, **opts):
73 def qrefresh(origfn, ui, repo, *pats, **opts):
69 if not opts['interactive']:
74 if not opts['interactive']:
70 return origfn(ui, repo, *pats, **opts)
75 return origfn(ui, repo, *pats, **opts)
71
76
72 mq = extensions.find('mq')
77 mq = extensions.find('mq')
73
78
74 def committomq(ui, repo, *pats, **opts):
79 def committomq(ui, repo, *pats, **opts):
75 # At this point the working copy contains only changes that
80 # At this point the working copy contains only changes that
76 # were accepted. All other changes were reverted.
81 # were accepted. All other changes were reverted.
77 # We can't pass *pats here since qrefresh will undo all other
82 # We can't pass *pats here since qrefresh will undo all other
78 # changed files in the patch that aren't in pats.
83 # changed files in the patch that aren't in pats.
79 mq.refresh(ui, repo, **opts)
84 mq.refresh(ui, repo, **opts)
80
85
81 # backup all changed files
86 # backup all changed files
82 cmdutil.dorecord(ui, repo, committomq, None, True,
87 cmdutil.dorecord(ui, repo, committomq, None, True,
83 cmdutil.recordfilter, *pats, **opts)
88 cmdutil.recordfilter, *pats, **opts)
84
89
85 # This command registration is replaced during uisetup().
90 # This command registration is replaced during uisetup().
86 @command('qrecord',
91 @command('qrecord',
87 [],
92 [],
88 _('hg qrecord [OPTION]... PATCH [FILE]...'),
93 _('hg qrecord [OPTION]... PATCH [FILE]...'),
89 inferrepo=True)
94 inferrepo=True)
90 def qrecord(ui, repo, patch, *pats, **opts):
95 def qrecord(ui, repo, patch, *pats, **opts):
91 '''interactively record a new patch
96 '''interactively record a new patch
92
97
93 See :hg:`help qnew` & :hg:`help record` for more information and
98 See :hg:`help qnew` & :hg:`help record` for more information and
94 usage.
99 usage.
95 '''
100 '''
96 return _qrecord('qnew', ui, repo, patch, *pats, **opts)
101 return _qrecord('qnew', ui, repo, patch, *pats, **opts)
97
102
98 def _qrecord(cmdsuggest, ui, repo, patch, *pats, **opts):
103 def _qrecord(cmdsuggest, ui, repo, patch, *pats, **opts):
99 try:
104 try:
100 mq = extensions.find('mq')
105 mq = extensions.find('mq')
101 except KeyError:
106 except KeyError:
102 raise error.Abort(_("'mq' extension not loaded"))
107 raise error.Abort(_("'mq' extension not loaded"))
103
108
104 repo.mq.checkpatchname(patch)
109 repo.mq.checkpatchname(patch)
105
110
106 def committomq(ui, repo, *pats, **opts):
111 def committomq(ui, repo, *pats, **opts):
107 opts['checkname'] = False
112 opts['checkname'] = False
108 mq.new(ui, repo, patch, *pats, **opts)
113 mq.new(ui, repo, patch, *pats, **opts)
109
114
110 backup = ui.backupconfig('experimental', 'crecord')
115 backup = ui.backupconfig('experimental', 'crecord')
111 try:
116 try:
112 ui.setconfig('experimental', 'crecord', False, 'record')
117 ui.setconfig('experimental', 'crecord', False, 'record')
113 cmdutil.dorecord(ui, repo, committomq, cmdsuggest, False,
118 cmdutil.dorecord(ui, repo, committomq, cmdsuggest, False,
114 cmdutil.recordfilter, *pats, **opts)
119 cmdutil.recordfilter, *pats, **opts)
115 finally:
120 finally:
116 ui.restoreconfig(backup)
121 ui.restoreconfig(backup)
117
122
118 def qnew(origfn, ui, repo, patch, *args, **opts):
123 def qnew(origfn, ui, repo, patch, *args, **opts):
119 if opts['interactive']:
124 if opts['interactive']:
120 return _qrecord(None, ui, repo, patch, *args, **opts)
125 return _qrecord(None, ui, repo, patch, *args, **opts)
121 return origfn(ui, repo, patch, *args, **opts)
126 return origfn(ui, repo, patch, *args, **opts)
122
127
123
128
124 def uisetup(ui):
129 def uisetup(ui):
125 try:
130 try:
126 mq = extensions.find('mq')
131 mq = extensions.find('mq')
127 except KeyError:
132 except KeyError:
128 return
133 return
129
134
130 cmdtable["qrecord"] = \
135 cmdtable["qrecord"] = \
131 (qrecord,
136 (qrecord,
132 # same options as qnew, but copy them so we don't get
137 # same options as qnew, but copy them so we don't get
133 # -i/--interactive for qrecord and add white space diff options
138 # -i/--interactive for qrecord and add white space diff options
134 mq.cmdtable['^qnew'][1][:] + commands.diffwsopts,
139 mq.cmdtable['^qnew'][1][:] + commands.diffwsopts,
135 _('hg qrecord [OPTION]... PATCH [FILE]...'))
140 _('hg qrecord [OPTION]... PATCH [FILE]...'))
136
141
137 _wrapcmd('qnew', mq.cmdtable, qnew, _("interactively record a new patch"))
142 _wrapcmd('qnew', mq.cmdtable, qnew, _("interactively record a new patch"))
138 _wrapcmd('qrefresh', mq.cmdtable, qrefresh,
143 _wrapcmd('qrefresh', mq.cmdtable, qrefresh,
139 _("interactively select changes to refresh"))
144 _("interactively select changes to refresh"))
140
145
141 def _wrapcmd(cmd, table, wrapfn, msg):
146 def _wrapcmd(cmd, table, wrapfn, msg):
142 entry = extensions.wrapcommand(table, cmd, wrapfn)
147 entry = extensions.wrapcommand(table, cmd, wrapfn)
143 entry[1].append(('i', 'interactive', None, msg))
148 entry[1].append(('i', 'interactive', None, msg))
@@ -1,146 +1,145 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/subversion.py not using absolute_import
32 hgext/convert/subversion.py not using absolute_import
33 hgext/convert/transport.py not using absolute_import
33 hgext/convert/transport.py not using absolute_import
34 hgext/eol.py not using absolute_import
34 hgext/eol.py not using absolute_import
35 hgext/extdiff.py not using absolute_import
35 hgext/extdiff.py not using absolute_import
36 hgext/factotum.py not using absolute_import
36 hgext/factotum.py not using absolute_import
37 hgext/fetch.py not using absolute_import
37 hgext/fetch.py not using absolute_import
38 hgext/gpg.py not using absolute_import
38 hgext/gpg.py not using absolute_import
39 hgext/graphlog.py not using absolute_import
39 hgext/graphlog.py not using absolute_import
40 hgext/hgcia.py not using absolute_import
40 hgext/hgcia.py not using absolute_import
41 hgext/hgk.py not using absolute_import
41 hgext/hgk.py not using absolute_import
42 hgext/highlight/__init__.py not using absolute_import
42 hgext/highlight/__init__.py not using absolute_import
43 hgext/highlight/highlight.py not using absolute_import
43 hgext/highlight/highlight.py not using absolute_import
44 hgext/histedit.py not using absolute_import
44 hgext/histedit.py not using absolute_import
45 hgext/largefiles/__init__.py not using absolute_import
45 hgext/largefiles/__init__.py not using absolute_import
46 hgext/largefiles/basestore.py not using absolute_import
46 hgext/largefiles/basestore.py not using absolute_import
47 hgext/largefiles/lfcommands.py not using absolute_import
47 hgext/largefiles/lfcommands.py not using absolute_import
48 hgext/largefiles/lfutil.py not using absolute_import
48 hgext/largefiles/lfutil.py not using absolute_import
49 hgext/largefiles/localstore.py not using absolute_import
49 hgext/largefiles/localstore.py not using absolute_import
50 hgext/largefiles/overrides.py not using absolute_import
50 hgext/largefiles/overrides.py not using absolute_import
51 hgext/largefiles/proto.py not using absolute_import
51 hgext/largefiles/proto.py not using absolute_import
52 hgext/largefiles/remotestore.py not using absolute_import
52 hgext/largefiles/remotestore.py not using absolute_import
53 hgext/largefiles/reposetup.py not using absolute_import
53 hgext/largefiles/reposetup.py not using absolute_import
54 hgext/largefiles/uisetup.py not using absolute_import
54 hgext/largefiles/uisetup.py not using absolute_import
55 hgext/largefiles/wirestore.py not using absolute_import
55 hgext/largefiles/wirestore.py not using absolute_import
56 hgext/mq.py not using absolute_import
56 hgext/mq.py not using absolute_import
57 hgext/notify.py not using absolute_import
57 hgext/notify.py not using absolute_import
58 hgext/patchbomb.py not using absolute_import
58 hgext/patchbomb.py not using absolute_import
59 hgext/purge.py not using absolute_import
59 hgext/purge.py not using absolute_import
60 hgext/rebase.py not using absolute_import
60 hgext/rebase.py not using absolute_import
61 hgext/record.py not using absolute_import
62 hgext/share.py not using absolute_import
61 hgext/share.py not using absolute_import
63 hgext/transplant.py not using absolute_import
62 hgext/transplant.py not using absolute_import
64 hgext/win32mbcs.py not using absolute_import
63 hgext/win32mbcs.py not using absolute_import
65 hgext/win32text.py not using absolute_import
64 hgext/win32text.py not using absolute_import
66 i18n/check-translation.py not using absolute_import
65 i18n/check-translation.py not using absolute_import
67 i18n/polib.py not using absolute_import
66 i18n/polib.py not using absolute_import
68 setup.py not using absolute_import
67 setup.py not using absolute_import
69 tests/filterpyflakes.py requires print_function
68 tests/filterpyflakes.py requires print_function
70 tests/generate-working-copy-states.py requires print_function
69 tests/generate-working-copy-states.py requires print_function
71 tests/get-with-headers.py requires print_function
70 tests/get-with-headers.py requires print_function
72 tests/heredoctest.py requires print_function
71 tests/heredoctest.py requires print_function
73 tests/hypothesishelpers.py not using absolute_import
72 tests/hypothesishelpers.py not using absolute_import
74 tests/hypothesishelpers.py requires print_function
73 tests/hypothesishelpers.py requires print_function
75 tests/killdaemons.py not using absolute_import
74 tests/killdaemons.py not using absolute_import
76 tests/md5sum.py not using absolute_import
75 tests/md5sum.py not using absolute_import
77 tests/mockblackbox.py not using absolute_import
76 tests/mockblackbox.py not using absolute_import
78 tests/printenv.py not using absolute_import
77 tests/printenv.py not using absolute_import
79 tests/readlink.py not using absolute_import
78 tests/readlink.py not using absolute_import
80 tests/readlink.py requires print_function
79 tests/readlink.py requires print_function
81 tests/revlog-formatv0.py not using absolute_import
80 tests/revlog-formatv0.py not using absolute_import
82 tests/run-tests.py not using absolute_import
81 tests/run-tests.py not using absolute_import
83 tests/seq.py not using absolute_import
82 tests/seq.py not using absolute_import
84 tests/seq.py requires print_function
83 tests/seq.py requires print_function
85 tests/silenttestrunner.py not using absolute_import
84 tests/silenttestrunner.py not using absolute_import
86 tests/silenttestrunner.py requires print_function
85 tests/silenttestrunner.py requires print_function
87 tests/sitecustomize.py not using absolute_import
86 tests/sitecustomize.py not using absolute_import
88 tests/svn-safe-append.py not using absolute_import
87 tests/svn-safe-append.py not using absolute_import
89 tests/svnxml.py not using absolute_import
88 tests/svnxml.py not using absolute_import
90 tests/test-ancestor.py requires print_function
89 tests/test-ancestor.py requires print_function
91 tests/test-atomictempfile.py not using absolute_import
90 tests/test-atomictempfile.py not using absolute_import
92 tests/test-batching.py not using absolute_import
91 tests/test-batching.py not using absolute_import
93 tests/test-batching.py requires print_function
92 tests/test-batching.py requires print_function
94 tests/test-bdiff.py not using absolute_import
93 tests/test-bdiff.py not using absolute_import
95 tests/test-bdiff.py requires print_function
94 tests/test-bdiff.py requires print_function
96 tests/test-context.py not using absolute_import
95 tests/test-context.py not using absolute_import
97 tests/test-context.py requires print_function
96 tests/test-context.py requires print_function
98 tests/test-demandimport.py not using absolute_import
97 tests/test-demandimport.py not using absolute_import
99 tests/test-demandimport.py requires print_function
98 tests/test-demandimport.py requires print_function
100 tests/test-dispatch.py not using absolute_import
99 tests/test-dispatch.py not using absolute_import
101 tests/test-dispatch.py requires print_function
100 tests/test-dispatch.py requires print_function
102 tests/test-doctest.py not using absolute_import
101 tests/test-doctest.py not using absolute_import
103 tests/test-duplicateoptions.py not using absolute_import
102 tests/test-duplicateoptions.py not using absolute_import
104 tests/test-duplicateoptions.py requires print_function
103 tests/test-duplicateoptions.py requires print_function
105 tests/test-filecache.py not using absolute_import
104 tests/test-filecache.py not using absolute_import
106 tests/test-filecache.py requires print_function
105 tests/test-filecache.py requires print_function
107 tests/test-filelog.py not using absolute_import
106 tests/test-filelog.py not using absolute_import
108 tests/test-filelog.py requires print_function
107 tests/test-filelog.py requires print_function
109 tests/test-hg-parseurl.py not using absolute_import
108 tests/test-hg-parseurl.py not using absolute_import
110 tests/test-hg-parseurl.py requires print_function
109 tests/test-hg-parseurl.py requires print_function
111 tests/test-hgweb-auth.py not using absolute_import
110 tests/test-hgweb-auth.py not using absolute_import
112 tests/test-hgweb-auth.py requires print_function
111 tests/test-hgweb-auth.py requires print_function
113 tests/test-hgwebdir-paths.py not using absolute_import
112 tests/test-hgwebdir-paths.py not using absolute_import
114 tests/test-hybridencode.py not using absolute_import
113 tests/test-hybridencode.py not using absolute_import
115 tests/test-hybridencode.py requires print_function
114 tests/test-hybridencode.py requires print_function
116 tests/test-lrucachedict.py not using absolute_import
115 tests/test-lrucachedict.py not using absolute_import
117 tests/test-lrucachedict.py requires print_function
116 tests/test-lrucachedict.py requires print_function
118 tests/test-manifest.py not using absolute_import
117 tests/test-manifest.py not using absolute_import
119 tests/test-minirst.py not using absolute_import
118 tests/test-minirst.py not using absolute_import
120 tests/test-minirst.py requires print_function
119 tests/test-minirst.py requires print_function
121 tests/test-parseindex2.py not using absolute_import
120 tests/test-parseindex2.py not using absolute_import
122 tests/test-parseindex2.py requires print_function
121 tests/test-parseindex2.py requires print_function
123 tests/test-pathencode.py not using absolute_import
122 tests/test-pathencode.py not using absolute_import
124 tests/test-pathencode.py requires print_function
123 tests/test-pathencode.py requires print_function
125 tests/test-propertycache.py not using absolute_import
124 tests/test-propertycache.py not using absolute_import
126 tests/test-propertycache.py requires print_function
125 tests/test-propertycache.py requires print_function
127 tests/test-revlog-ancestry.py not using absolute_import
126 tests/test-revlog-ancestry.py not using absolute_import
128 tests/test-revlog-ancestry.py requires print_function
127 tests/test-revlog-ancestry.py requires print_function
129 tests/test-run-tests.py not using absolute_import
128 tests/test-run-tests.py not using absolute_import
130 tests/test-simplemerge.py not using absolute_import
129 tests/test-simplemerge.py not using absolute_import
131 tests/test-status-inprocess.py not using absolute_import
130 tests/test-status-inprocess.py not using absolute_import
132 tests/test-status-inprocess.py requires print_function
131 tests/test-status-inprocess.py requires print_function
133 tests/test-symlink-os-yes-fs-no.py not using absolute_import
132 tests/test-symlink-os-yes-fs-no.py not using absolute_import
134 tests/test-trusted.py not using absolute_import
133 tests/test-trusted.py not using absolute_import
135 tests/test-trusted.py requires print_function
134 tests/test-trusted.py requires print_function
136 tests/test-ui-color.py not using absolute_import
135 tests/test-ui-color.py not using absolute_import
137 tests/test-ui-color.py requires print_function
136 tests/test-ui-color.py requires print_function
138 tests/test-ui-config.py not using absolute_import
137 tests/test-ui-config.py not using absolute_import
139 tests/test-ui-config.py requires print_function
138 tests/test-ui-config.py requires print_function
140 tests/test-ui-verbosity.py not using absolute_import
139 tests/test-ui-verbosity.py not using absolute_import
141 tests/test-ui-verbosity.py requires print_function
140 tests/test-ui-verbosity.py requires print_function
142 tests/test-url.py not using absolute_import
141 tests/test-url.py not using absolute_import
143 tests/test-url.py requires print_function
142 tests/test-url.py requires print_function
144 tests/test-walkrepo.py requires print_function
143 tests/test-walkrepo.py requires print_function
145 tests/test-wireproto.py requires print_function
144 tests/test-wireproto.py requires print_function
146 tests/tinyproxy.py requires print_function
145 tests/tinyproxy.py requires print_function
General Comments 0
You need to be logged in to leave comments. Login now