##// END OF EJS Templates
py3: make factotum use absolute_import...
Pulkit Goyal -
r28971:bacca31f default
parent child Browse files
Show More
@@ -1,126 +1,135 b''
1 1 # factotum.py - Plan 9 factotum integration for Mercurial
2 2 #
3 3 # Copyright (C) 2012 Steven Stallion <sstallion@gmail.com>
4 4 #
5 5 # This program is free software; you can redistribute it and/or modify it
6 6 # under the terms of the GNU General Public License as published by the
7 7 # Free Software Foundation; either version 2 of the License, or (at your
8 8 # option) any later version.
9 9 #
10 10 # This program is distributed in the hope that it will be useful, but
11 11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
13 13 # Public License for more details.
14 14 #
15 15 # You should have received a copy of the GNU General Public License along
16 16 # with this program; if not, write to the Free Software Foundation, Inc.,
17 17 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 18
19 19 '''http authentication with factotum
20 20
21 21 This extension allows the factotum(4) facility on Plan 9 from Bell Labs
22 22 platforms to provide authentication information for HTTP access. Configuration
23 23 entries specified in the auth section as well as authentication information
24 24 provided in the repository URL are fully supported. If no prefix is specified,
25 25 a value of "*" will be assumed.
26 26
27 27 By default, keys are specified as::
28 28
29 29 proto=pass service=hg prefix=<prefix> user=<username> !password=<password>
30 30
31 31 If the factotum extension is unable to read the required key, one will be
32 32 requested interactively.
33 33
34 34 A configuration section is available to customize runtime behavior. By
35 35 default, these entries are::
36 36
37 37 [factotum]
38 38 executable = /bin/auth/factotum
39 39 mountpoint = /mnt/factotum
40 40 service = hg
41 41
42 42 The executable entry defines the full path to the factotum binary. The
43 43 mountpoint entry defines the path to the factotum file service. Lastly, the
44 44 service entry controls the service name used when reading keys.
45 45
46 46 '''
47 47
48 from __future__ import absolute_import
49
50 import os
48 51 from mercurial.i18n import _
49 from mercurial.url import passwordmgr
50 from mercurial import httpconnection, error
51 import os, urllib2
52 from mercurial import (
53 error,
54 httpconnection,
55 url,
56 util,
57 )
58
59 urlreq = util.urlreq
60 passwordmgr = url.passwordmgr
52 61
53 62 ERRMAX = 128
54 63
55 64 _executable = _mountpoint = _service = None
56 65
57 66 def auth_getkey(self, params):
58 67 if not self.ui.interactive():
59 68 raise error.Abort(_('factotum not interactive'))
60 69 if 'user=' not in params:
61 70 params = '%s user?' % params
62 71 params = '%s !password?' % params
63 72 os.system("%s -g '%s'" % (_executable, params))
64 73
65 74 def auth_getuserpasswd(self, getkey, params):
66 75 params = 'proto=pass %s' % params
67 76 while True:
68 77 fd = os.open('%s/rpc' % _mountpoint, os.O_RDWR)
69 78 try:
70 79 os.write(fd, 'start %s' % params)
71 80 l = os.read(fd, ERRMAX).split()
72 81 if l[0] == 'ok':
73 82 os.write(fd, 'read')
74 83 status, user, passwd = os.read(fd, ERRMAX).split(None, 2)
75 84 if status == 'ok':
76 85 if passwd.startswith("'"):
77 86 if passwd.endswith("'"):
78 87 passwd = passwd[1:-1].replace("''", "'")
79 88 else:
80 89 raise error.Abort(_('malformed password string'))
81 90 return (user, passwd)
82 91 except (OSError, IOError):
83 92 raise error.Abort(_('factotum not responding'))
84 93 finally:
85 94 os.close(fd)
86 95 getkey(self, params)
87 96
88 97 def monkeypatch_method(cls):
89 98 def decorator(func):
90 99 setattr(cls, func.__name__, func)
91 100 return func
92 101 return decorator
93 102
94 103 @monkeypatch_method(passwordmgr)
95 104 def find_user_password(self, realm, authuri):
96 user, passwd = urllib2.HTTPPasswordMgrWithDefaultRealm.find_user_password(
105 user, passwd = urlreq.httppasswordmgrwithdefaultrealm.find_user_password(
97 106 self, realm, authuri)
98 107 if user and passwd:
99 108 self._writedebug(user, passwd)
100 109 return (user, passwd)
101 110
102 111 prefix = ''
103 112 res = httpconnection.readauthforuri(self.ui, authuri, user)
104 113 if res:
105 114 _, auth = res
106 115 prefix = auth.get('prefix')
107 116 user, passwd = auth.get('username'), auth.get('password')
108 117 if not user or not passwd:
109 118 if not prefix:
110 119 prefix = realm.split(' ')[0].lower()
111 120 params = 'service=%s prefix=%s' % (_service, prefix)
112 121 if user:
113 122 params = '%s user=%s' % (params, user)
114 123 user, passwd = auth_getuserpasswd(self, auth_getkey, params)
115 124
116 125 self.add_password(realm, authuri, user, passwd)
117 126 self._writedebug(user, passwd)
118 127 return (user, passwd)
119 128
120 129 def uisetup(ui):
121 130 global _executable
122 131 _executable = ui.config('factotum', 'executable', '/bin/auth/factotum')
123 132 global _mountpoint
124 133 _mountpoint = ui.config('factotum', 'mountpoint', '/mnt/factotum')
125 134 global _service
126 135 _service = ui.config('factotum', 'service', 'hg')
@@ -1,177 +1,176 b''
1 1 #require test-repo
2 2
3 3 $ cd "$TESTDIR"/..
4 4
5 5 $ hg files 'set:(**.py)' | sed 's|\\|/|g' | xargs python contrib/check-py3-compat.py
6 hgext/factotum.py not using absolute_import
7 6 hgext/fetch.py not using absolute_import
8 7 hgext/fsmonitor/pywatchman/__init__.py not using absolute_import
9 8 hgext/fsmonitor/pywatchman/__init__.py requires print_function
10 9 hgext/fsmonitor/pywatchman/capabilities.py not using absolute_import
11 10 hgext/fsmonitor/pywatchman/pybser.py not using absolute_import
12 11 hgext/gpg.py not using absolute_import
13 12 hgext/graphlog.py not using absolute_import
14 13 hgext/hgcia.py not using absolute_import
15 14 hgext/hgk.py not using absolute_import
16 15 hgext/highlight/__init__.py not using absolute_import
17 16 hgext/highlight/highlight.py not using absolute_import
18 17 hgext/histedit.py not using absolute_import
19 18 hgext/largefiles/__init__.py not using absolute_import
20 19 hgext/largefiles/basestore.py not using absolute_import
21 20 hgext/largefiles/lfcommands.py not using absolute_import
22 21 hgext/largefiles/lfutil.py not using absolute_import
23 22 hgext/largefiles/localstore.py not using absolute_import
24 23 hgext/largefiles/overrides.py not using absolute_import
25 24 hgext/largefiles/proto.py not using absolute_import
26 25 hgext/largefiles/remotestore.py not using absolute_import
27 26 hgext/largefiles/reposetup.py not using absolute_import
28 27 hgext/largefiles/uisetup.py not using absolute_import
29 28 hgext/largefiles/wirestore.py not using absolute_import
30 29 hgext/mq.py not using absolute_import
31 30 hgext/rebase.py not using absolute_import
32 31 hgext/share.py not using absolute_import
33 32 hgext/win32text.py not using absolute_import
34 33 i18n/check-translation.py not using absolute_import
35 34 i18n/polib.py not using absolute_import
36 35 setup.py not using absolute_import
37 36 tests/heredoctest.py requires print_function
38 37 tests/md5sum.py not using absolute_import
39 38 tests/readlink.py not using absolute_import
40 39 tests/readlink.py requires print_function
41 40 tests/run-tests.py not using absolute_import
42 41 tests/svn-safe-append.py not using absolute_import
43 42 tests/test-atomictempfile.py not using absolute_import
44 43 tests/test-demandimport.py not using absolute_import
45 44
46 45 #if py3exe
47 46 $ hg files 'set:(**.py)' | sed 's|\\|/|g' | xargs $PYTHON3 contrib/check-py3-compat.py
48 47 contrib/check-code.py: invalid syntax: (unicode error) 'unicodeescape' codec can't decode bytes in position *-*: malformed \N character escape (<unknown>, line *) (glob)
49 48 doc/hgmanpage.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
50 49 hgext/automv.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
51 50 hgext/blackbox.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
52 51 hgext/bugzilla.py: error importing module: <ImportError> No module named 'urlparse' (line *) (glob)
53 52 hgext/censor.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
54 53 hgext/chgserver.py: error importing module: <ImportError> No module named 'SocketServer' (line *) (glob)
55 54 hgext/children.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
56 55 hgext/churn.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
57 56 hgext/clonebundles.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
58 57 hgext/color.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
59 58 hgext/convert/bzr.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
60 59 hgext/convert/common.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
61 60 hgext/convert/convcmd.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
62 61 hgext/convert/cvs.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
63 62 hgext/convert/cvsps.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
64 63 hgext/convert/darcs.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
65 64 hgext/convert/filemap.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
66 65 hgext/convert/git.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
67 66 hgext/convert/gnuarch.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
68 67 hgext/convert/hg.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
69 68 hgext/convert/monotone.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
70 69 hgext/convert/p*.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
71 70 hgext/convert/subversion.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
72 71 hgext/convert/transport.py: error importing module: <ImportError> No module named 'svn.client' (line *) (glob)
73 72 hgext/eol.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
74 73 hgext/extdiff.py: error importing module: <SyntaxError> invalid syntax (archival.py, line *) (line *) (glob)
75 hgext/factotum.py: error importing: <ImportError> No module named 'httplib' (error at url.py:*) (glob)
74 hgext/factotum.py: error importing: <ImportError> No module named 'httplib' (error at __init__.py:*) (glob)
76 75 hgext/fetch.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
77 76 hgext/fsmonitor/watchmanclient.py: error importing module: <SystemError> Parent module 'hgext.fsmonitor' not loaded, cannot perform relative import (line *) (glob)
78 77 hgext/gpg.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
79 78 hgext/graphlog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
80 79 hgext/hgcia.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
81 80 hgext/hgk.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
82 81 hgext/histedit.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
83 82 hgext/keyword.py: error importing: <ImportError> No module named 'BaseHTTPServer' (error at common.py:*) (glob)
84 83 hgext/largefiles/basestore.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
85 84 hgext/largefiles/lfcommands.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
86 85 hgext/largefiles/lfutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
87 86 hgext/largefiles/localstore.py: error importing module: <ImportError> No module named 'lfutil' (line *) (glob)
88 87 hgext/largefiles/overrides.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
89 88 hgext/largefiles/proto.py: error importing: <ImportError> No module named 'httplib' (error at httppeer.py:*) (glob)
90 89 hgext/largefiles/remotestore.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at wireproto.py:*) (glob)
91 90 hgext/largefiles/reposetup.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
92 91 hgext/largefiles/uisetup.py: error importing module: <SyntaxError> invalid syntax (archival.py, line *) (line *) (glob)
93 92 hgext/largefiles/wirestore.py: error importing module: <ImportError> No module named 'lfutil' (line *) (glob)
94 93 hgext/mq.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
95 94 hgext/notify.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
96 95 hgext/pager.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
97 96 hgext/patchbomb.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
98 97 hgext/purge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
99 98 hgext/rebase.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
100 99 hgext/record.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
101 100 hgext/relink.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
102 101 hgext/schemes.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
103 102 hgext/share.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
104 103 hgext/shelve.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
105 104 hgext/strip.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
106 105 hgext/transplant.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
107 106 mercurial/archival.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
108 107 mercurial/branchmap.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
109 108 mercurial/bundle*.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
110 109 mercurial/bundlerepo.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
111 110 mercurial/changegroup.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
112 111 mercurial/changelog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
113 112 mercurial/cmdutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
114 113 mercurial/commands.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
115 114 mercurial/commandserver.py: error importing module: <ImportError> No module named 'SocketServer' (line *) (glob)
116 115 mercurial/context.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
117 116 mercurial/copies.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
118 117 mercurial/crecord.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
119 118 mercurial/dirstate.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
120 119 mercurial/discovery.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
121 120 mercurial/dispatch.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
122 121 mercurial/exchange.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
123 122 mercurial/extensions.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
124 123 mercurial/filelog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
125 124 mercurial/filemerge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
126 125 mercurial/fileset.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
127 126 mercurial/formatter.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
128 127 mercurial/graphmod.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
129 128 mercurial/help.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
130 129 mercurial/hg.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
131 130 mercurial/hgweb/common.py: error importing module: <ImportError> No module named 'BaseHTTPServer' (line *) (glob)
132 131 mercurial/hgweb/hgweb_mod.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
133 132 mercurial/hgweb/hgwebdir_mod.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
134 133 mercurial/hgweb/protocol.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
135 134 mercurial/hgweb/request.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
136 135 mercurial/hgweb/server.py: error importing module: <ImportError> No module named 'BaseHTTPServer' (line *) (glob)
137 136 mercurial/hgweb/webcommands.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
138 137 mercurial/hgweb/webutil.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
139 138 mercurial/hgweb/wsgicgi.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
140 139 mercurial/hook.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
141 140 mercurial/httpclient/_readers.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
142 141 mercurial/httpconnection.py: error importing: <ImportError> No module named 'httplib' (error at __init__.py:*) (glob)
143 142 mercurial/httppeer.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
144 143 mercurial/keepalive.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
145 144 mercurial/localrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
146 145 mercurial/mail.py: error importing module: <AttributeError> module 'email' has no attribute 'Header' (line *) (glob)
147 146 mercurial/manifest.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
148 147 mercurial/merge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
149 148 mercurial/namespaces.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
150 149 mercurial/patch.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
151 150 mercurial/pure/mpatch.py: error importing module: <ImportError> cannot import name 'pycompat' (line *) (glob)
152 151 mercurial/pure/parsers.py: error importing module: <ImportError> No module named 'mercurial.pure.node' (line *) (glob)
153 152 mercurial/repair.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
154 153 mercurial/revlog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
155 154 mercurial/revset.py: error importing module: <AttributeError> 'dict' object has no attribute 'iteritems' (line *) (glob)
156 155 mercurial/scmutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
157 156 mercurial/scmwindows.py: error importing module: <ImportError> No module named '_winreg' (line *) (glob)
158 157 mercurial/simplemerge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
159 158 mercurial/sshpeer.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at wireproto.py:*) (glob)
160 159 mercurial/sshserver.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
161 160 mercurial/statichttprepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
162 161 mercurial/store.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
163 162 mercurial/streamclone.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
164 163 mercurial/subrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
165 164 mercurial/templatefilters.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
166 165 mercurial/templatekw.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
167 166 mercurial/templater.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
168 167 mercurial/ui.py: error importing: <ImportError> No module named 'cPickle' (error at formatter.py:*) (glob)
169 168 mercurial/unionrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
170 169 mercurial/url.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
171 170 mercurial/verify.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
172 171 mercurial/win*.py: error importing module: <ImportError> No module named 'msvcrt' (line *) (glob)
173 172 mercurial/windows.py: error importing module: <ImportError> No module named '_winreg' (line *) (glob)
174 173 mercurial/wireproto.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
175 174 tests/readlink.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
176 175
177 176 #endif
General Comments 0
You need to be logged in to leave comments. Login now