##// END OF EJS Templates
py3: make largefiles/reposetup.py use absolute_import
liscju -
r29314:bde283a1 default
parent child Browse files
Show More
@@ -1,376 +1,385
1 1 # Copyright 2009-2010 Gregory P. Ward
2 2 # Copyright 2009-2010 Intelerad Medical Systems Incorporated
3 3 # Copyright 2010-2011 Fog Creek Software
4 4 # Copyright 2010-2011 Unity Technologies
5 5 #
6 6 # This software may be used and distributed according to the terms of the
7 7 # GNU General Public License version 2 or any later version.
8 8
9 9 '''setup for largefiles repositories: reposetup'''
10 from __future__ import absolute_import
11
10 12 import copy
11 13
12 from mercurial import error, match as match_, error
13 14 from mercurial.i18n import _
14 from mercurial import scmutil, localrepo
15 15
16 import lfcommands
17 import lfutil
16 from mercurial import (
17 error,
18 localrepo,
19 match as match_,
20 scmutil,
21 )
22
23 from . import (
24 lfcommands,
25 lfutil,
26 )
18 27
19 28 def reposetup(ui, repo):
20 29 # wire repositories should be given new wireproto functions
21 30 # by "proto.wirereposetup()" via "hg.wirepeersetupfuncs"
22 31 if not repo.local():
23 32 return
24 33
25 34 class lfilesrepo(repo.__class__):
26 35 # the mark to examine whether "repo" object enables largefiles or not
27 36 _largefilesenabled = True
28 37
29 38 lfstatus = False
30 39 def status_nolfiles(self, *args, **kwargs):
31 40 return super(lfilesrepo, self).status(*args, **kwargs)
32 41
33 42 # When lfstatus is set, return a context that gives the names
34 43 # of largefiles instead of their corresponding standins and
35 44 # identifies the largefiles as always binary, regardless of
36 45 # their actual contents.
37 46 def __getitem__(self, changeid):
38 47 ctx = super(lfilesrepo, self).__getitem__(changeid)
39 48 if self.lfstatus:
40 49 class lfilesctx(ctx.__class__):
41 50 def files(self):
42 51 filenames = super(lfilesctx, self).files()
43 52 return [lfutil.splitstandin(f) or f for f in filenames]
44 53 def manifest(self):
45 54 man1 = super(lfilesctx, self).manifest()
46 55 class lfilesmanifest(man1.__class__):
47 56 def __contains__(self, filename):
48 57 orig = super(lfilesmanifest, self).__contains__
49 58 return (orig(filename) or
50 59 orig(lfutil.standin(filename)))
51 60 man1.__class__ = lfilesmanifest
52 61 return man1
53 62 def filectx(self, path, fileid=None, filelog=None):
54 63 orig = super(lfilesctx, self).filectx
55 64 try:
56 65 if filelog is not None:
57 66 result = orig(path, fileid, filelog)
58 67 else:
59 68 result = orig(path, fileid)
60 69 except error.LookupError:
61 70 # Adding a null character will cause Mercurial to
62 71 # identify this as a binary file.
63 72 if filelog is not None:
64 73 result = orig(lfutil.standin(path), fileid,
65 74 filelog)
66 75 else:
67 76 result = orig(lfutil.standin(path), fileid)
68 77 olddata = result.data
69 78 result.data = lambda: olddata() + '\0'
70 79 return result
71 80 ctx.__class__ = lfilesctx
72 81 return ctx
73 82
74 83 # Figure out the status of big files and insert them into the
75 84 # appropriate list in the result. Also removes standin files
76 85 # from the listing. Revert to the original status if
77 86 # self.lfstatus is False.
78 87 # XXX large file status is buggy when used on repo proxy.
79 88 # XXX this needs to be investigated.
80 89 @localrepo.unfilteredmethod
81 90 def status(self, node1='.', node2=None, match=None, ignored=False,
82 91 clean=False, unknown=False, listsubrepos=False):
83 92 listignored, listclean, listunknown = ignored, clean, unknown
84 93 orig = super(lfilesrepo, self).status
85 94 if not self.lfstatus:
86 95 return orig(node1, node2, match, listignored, listclean,
87 96 listunknown, listsubrepos)
88 97
89 98 # some calls in this function rely on the old version of status
90 99 self.lfstatus = False
91 100 ctx1 = self[node1]
92 101 ctx2 = self[node2]
93 102 working = ctx2.rev() is None
94 103 parentworking = working and ctx1 == self['.']
95 104
96 105 if match is None:
97 106 match = match_.always(self.root, self.getcwd())
98 107
99 108 wlock = None
100 109 try:
101 110 try:
102 111 # updating the dirstate is optional
103 112 # so we don't wait on the lock
104 113 wlock = self.wlock(False)
105 114 except error.LockError:
106 115 pass
107 116
108 117 # First check if paths or patterns were specified on the
109 118 # command line. If there were, and they don't match any
110 119 # largefiles, we should just bail here and let super
111 120 # handle it -- thus gaining a big performance boost.
112 121 lfdirstate = lfutil.openlfdirstate(ui, self)
113 122 if not match.always():
114 123 for f in lfdirstate:
115 124 if match(f):
116 125 break
117 126 else:
118 127 return orig(node1, node2, match, listignored, listclean,
119 128 listunknown, listsubrepos)
120 129
121 130 # Create a copy of match that matches standins instead
122 131 # of largefiles.
123 132 def tostandins(files):
124 133 if not working:
125 134 return files
126 135 newfiles = []
127 136 dirstate = self.dirstate
128 137 for f in files:
129 138 sf = lfutil.standin(f)
130 139 if sf in dirstate:
131 140 newfiles.append(sf)
132 141 elif sf in dirstate.dirs():
133 142 # Directory entries could be regular or
134 143 # standin, check both
135 144 newfiles.extend((f, sf))
136 145 else:
137 146 newfiles.append(f)
138 147 return newfiles
139 148
140 149 m = copy.copy(match)
141 150 m._files = tostandins(m._files)
142 151
143 152 result = orig(node1, node2, m, ignored, clean, unknown,
144 153 listsubrepos)
145 154 if working:
146 155
147 156 def sfindirstate(f):
148 157 sf = lfutil.standin(f)
149 158 dirstate = self.dirstate
150 159 return sf in dirstate or sf in dirstate.dirs()
151 160
152 161 match._files = [f for f in match._files
153 162 if sfindirstate(f)]
154 163 # Don't waste time getting the ignored and unknown
155 164 # files from lfdirstate
156 165 unsure, s = lfdirstate.status(match, [], False, listclean,
157 166 False)
158 167 (modified, added, removed, clean) = (s.modified, s.added,
159 168 s.removed, s.clean)
160 169 if parentworking:
161 170 for lfile in unsure:
162 171 standin = lfutil.standin(lfile)
163 172 if standin not in ctx1:
164 173 # from second parent
165 174 modified.append(lfile)
166 175 elif ctx1[standin].data().strip() \
167 176 != lfutil.hashfile(self.wjoin(lfile)):
168 177 modified.append(lfile)
169 178 else:
170 179 if listclean:
171 180 clean.append(lfile)
172 181 lfdirstate.normal(lfile)
173 182 else:
174 183 tocheck = unsure + modified + added + clean
175 184 modified, added, clean = [], [], []
176 185 checkexec = self.dirstate._checkexec
177 186
178 187 for lfile in tocheck:
179 188 standin = lfutil.standin(lfile)
180 189 if standin in ctx1:
181 190 abslfile = self.wjoin(lfile)
182 191 if ((ctx1[standin].data().strip() !=
183 192 lfutil.hashfile(abslfile)) or
184 193 (checkexec and
185 194 ('x' in ctx1.flags(standin)) !=
186 195 bool(lfutil.getexecutable(abslfile)))):
187 196 modified.append(lfile)
188 197 elif listclean:
189 198 clean.append(lfile)
190 199 else:
191 200 added.append(lfile)
192 201
193 202 # at this point, 'removed' contains largefiles
194 203 # marked as 'R' in the working context.
195 204 # then, largefiles not managed also in the target
196 205 # context should be excluded from 'removed'.
197 206 removed = [lfile for lfile in removed
198 207 if lfutil.standin(lfile) in ctx1]
199 208
200 209 # Standins no longer found in lfdirstate has been
201 210 # removed
202 211 for standin in ctx1.walk(lfutil.getstandinmatcher(self)):
203 212 lfile = lfutil.splitstandin(standin)
204 213 if not match(lfile):
205 214 continue
206 215 if lfile not in lfdirstate:
207 216 removed.append(lfile)
208 217
209 218 # Filter result lists
210 219 result = list(result)
211 220
212 221 # Largefiles are not really removed when they're
213 222 # still in the normal dirstate. Likewise, normal
214 223 # files are not really removed if they are still in
215 224 # lfdirstate. This happens in merges where files
216 225 # change type.
217 226 removed = [f for f in removed
218 227 if f not in self.dirstate]
219 228 result[2] = [f for f in result[2]
220 229 if f not in lfdirstate]
221 230
222 231 lfiles = set(lfdirstate._map)
223 232 # Unknown files
224 233 result[4] = set(result[4]).difference(lfiles)
225 234 # Ignored files
226 235 result[5] = set(result[5]).difference(lfiles)
227 236 # combine normal files and largefiles
228 237 normals = [[fn for fn in filelist
229 238 if not lfutil.isstandin(fn)]
230 239 for filelist in result]
231 240 lfstatus = (modified, added, removed, s.deleted, [], [],
232 241 clean)
233 242 result = [sorted(list1 + list2)
234 243 for (list1, list2) in zip(normals, lfstatus)]
235 244 else: # not against working directory
236 245 result = [[lfutil.splitstandin(f) or f for f in items]
237 246 for items in result]
238 247
239 248 if wlock:
240 249 lfdirstate.write()
241 250
242 251 finally:
243 252 if wlock:
244 253 wlock.release()
245 254
246 255 self.lfstatus = True
247 256 return scmutil.status(*result)
248 257
249 258 def commitctx(self, ctx, *args, **kwargs):
250 259 node = super(lfilesrepo, self).commitctx(ctx, *args, **kwargs)
251 260 class lfilesctx(ctx.__class__):
252 261 def markcommitted(self, node):
253 262 orig = super(lfilesctx, self).markcommitted
254 263 return lfutil.markcommitted(orig, self, node)
255 264 ctx.__class__ = lfilesctx
256 265 return node
257 266
258 267 # Before commit, largefile standins have not had their
259 268 # contents updated to reflect the hash of their largefile.
260 269 # Do that here.
261 270 def commit(self, text="", user=None, date=None, match=None,
262 271 force=False, editor=False, extra={}):
263 272 orig = super(lfilesrepo, self).commit
264 273
265 274 with self.wlock():
266 275 lfcommithook = self._lfcommithooks[-1]
267 276 match = lfcommithook(self, match)
268 277 result = orig(text=text, user=user, date=date, match=match,
269 278 force=force, editor=editor, extra=extra)
270 279 return result
271 280
272 281 def push(self, remote, force=False, revs=None, newbranch=False):
273 282 if remote.local():
274 283 missing = set(self.requirements) - remote.local().supported
275 284 if missing:
276 285 msg = _("required features are not"
277 286 " supported in the destination:"
278 287 " %s") % (', '.join(sorted(missing)))
279 288 raise error.Abort(msg)
280 289 return super(lfilesrepo, self).push(remote, force=force, revs=revs,
281 290 newbranch=newbranch)
282 291
283 292 # TODO: _subdirlfs should be moved into "lfutil.py", because
284 293 # it is referred only from "lfutil.updatestandinsbymatch"
285 294 def _subdirlfs(self, files, lfiles):
286 295 '''
287 296 Adjust matched file list
288 297 If we pass a directory to commit whose only committable files
289 298 are largefiles, the core commit code aborts before finding
290 299 the largefiles.
291 300 So we do the following:
292 301 For directories that only have largefiles as matches,
293 302 we explicitly add the largefiles to the match list and remove
294 303 the directory.
295 304 In other cases, we leave the match list unmodified.
296 305 '''
297 306 actualfiles = []
298 307 dirs = []
299 308 regulars = []
300 309
301 310 for f in files:
302 311 if lfutil.isstandin(f + '/'):
303 312 raise error.Abort(
304 313 _('file "%s" is a largefile standin') % f,
305 314 hint=('commit the largefile itself instead'))
306 315 # Scan directories
307 316 if self.wvfs.isdir(f):
308 317 dirs.append(f)
309 318 else:
310 319 regulars.append(f)
311 320
312 321 for f in dirs:
313 322 matcheddir = False
314 323 d = self.dirstate.normalize(f) + '/'
315 324 # Check for matched normal files
316 325 for mf in regulars:
317 326 if self.dirstate.normalize(mf).startswith(d):
318 327 actualfiles.append(f)
319 328 matcheddir = True
320 329 break
321 330 if not matcheddir:
322 331 # If no normal match, manually append
323 332 # any matching largefiles
324 333 for lf in lfiles:
325 334 if self.dirstate.normalize(lf).startswith(d):
326 335 actualfiles.append(lf)
327 336 if not matcheddir:
328 337 # There may still be normal files in the dir, so
329 338 # add a directory to the list, which
330 339 # forces status/dirstate to walk all files and
331 340 # call the match function on the matcher, even
332 341 # on case sensitive filesystems.
333 342 actualfiles.append('.')
334 343 matcheddir = True
335 344 # Nothing in dir, so readd it
336 345 # and let commit reject it
337 346 if not matcheddir:
338 347 actualfiles.append(f)
339 348
340 349 # Always add normal files
341 350 actualfiles += regulars
342 351 return actualfiles
343 352
344 353 repo.__class__ = lfilesrepo
345 354
346 355 # stack of hooks being executed before committing.
347 356 # only last element ("_lfcommithooks[-1]") is used for each committing.
348 357 repo._lfcommithooks = [lfutil.updatestandinsbymatch]
349 358
350 359 # Stack of status writer functions taking "*msg, **opts" arguments
351 360 # like "ui.status()". Only last element ("_lfstatuswriters[-1]")
352 361 # is used to write status out.
353 362 repo._lfstatuswriters = [ui.status]
354 363
355 364 def prepushoutgoinghook(pushop):
356 365 """Push largefiles for pushop before pushing revisions."""
357 366 lfrevs = pushop.lfrevs
358 367 if lfrevs is None:
359 368 lfrevs = pushop.outgoing.missing
360 369 if lfrevs:
361 370 toupload = set()
362 371 addfunc = lambda fn, lfhash: toupload.add(lfhash)
363 372 lfutil.getlfilestoupload(pushop.repo, lfrevs,
364 373 addfunc)
365 374 lfcommands.uploadlfiles(ui, pushop.repo, pushop.remote, toupload)
366 375 repo.prepushoutgoinghooks.add("largefiles", prepushoutgoinghook)
367 376
368 377 def checkrequireslfiles(ui, repo, **kwargs):
369 378 if 'largefiles' not in repo.requirements and any(
370 379 lfutil.shortname+'/' in f[0] for f in repo.store.datafiles()):
371 380 repo.requirements.add('largefiles')
372 381 repo._writerequirements()
373 382
374 383 ui.setconfig('hooks', 'changegroup.lfiles', checkrequireslfiles,
375 384 'largefiles')
376 385 ui.setconfig('hooks', 'commit.lfiles', checkrequireslfiles, 'largefiles')
@@ -1,154 +1,153
1 1 #require test-repo
2 2
3 3 $ . "$TESTDIR/helpers-testrepo.sh"
4 4 $ cd "$TESTDIR"/..
5 5
6 6 $ hg files 'set:(**.py)' | sed 's|\\|/|g' | xargs python contrib/check-py3-compat.py
7 7 hgext/fsmonitor/pywatchman/__init__.py not using absolute_import
8 8 hgext/fsmonitor/pywatchman/__init__.py requires print_function
9 9 hgext/fsmonitor/pywatchman/capabilities.py not using absolute_import
10 10 hgext/fsmonitor/pywatchman/pybser.py not using absolute_import
11 11 hgext/highlight/__init__.py not using absolute_import
12 12 hgext/highlight/highlight.py not using absolute_import
13 hgext/largefiles/reposetup.py not using absolute_import
14 13 hgext/largefiles/uisetup.py not using absolute_import
15 14 hgext/largefiles/wirestore.py not using absolute_import
16 15 hgext/share.py not using absolute_import
17 16 hgext/win32text.py not using absolute_import
18 17 i18n/check-translation.py not using absolute_import
19 18 i18n/polib.py not using absolute_import
20 19 setup.py not using absolute_import
21 20 tests/heredoctest.py requires print_function
22 21 tests/md5sum.py not using absolute_import
23 22 tests/readlink.py not using absolute_import
24 23 tests/run-tests.py not using absolute_import
25 24 tests/test-demandimport.py not using absolute_import
26 25
27 26 #if py3exe
28 27 $ hg files 'set:(**.py)' | sed 's|\\|/|g' | xargs $PYTHON3 contrib/check-py3-compat.py
29 28 doc/hgmanpage.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
30 29 hgext/automv.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
31 30 hgext/blackbox.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
32 31 hgext/bugzilla.py: error importing module: <ImportError> No module named 'urlparse' (line *) (glob)
33 32 hgext/censor.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
34 33 hgext/chgserver.py: error importing module: <ImportError> No module named 'SocketServer' (line *) (glob)
35 34 hgext/children.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
36 35 hgext/churn.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
37 36 hgext/clonebundles.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
38 37 hgext/color.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
39 38 hgext/convert/bzr.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
40 39 hgext/convert/common.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
41 40 hgext/convert/convcmd.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
42 41 hgext/convert/cvs.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
43 42 hgext/convert/cvsps.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
44 43 hgext/convert/darcs.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
45 44 hgext/convert/filemap.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
46 45 hgext/convert/git.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
47 46 hgext/convert/gnuarch.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
48 47 hgext/convert/hg.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
49 48 hgext/convert/monotone.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
50 49 hgext/convert/p*.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
51 50 hgext/convert/subversion.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
52 51 hgext/convert/transport.py: error importing module: <ImportError> No module named 'svn.client' (line *) (glob)
53 52 hgext/eol.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
54 53 hgext/extdiff.py: error importing module: <SyntaxError> invalid syntax (archival.py, line *) (line *) (glob)
55 54 hgext/factotum.py: error importing: <ImportError> No module named 'rfc822' (error at __init__.py:*) (glob)
56 55 hgext/fetch.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
57 56 hgext/fsmonitor/watchmanclient.py: error importing module: <SystemError> Parent module 'hgext.fsmonitor' not loaded, cannot perform relative import (line *) (glob)
58 57 hgext/gpg.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
59 58 hgext/graphlog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
60 59 hgext/hgk.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
61 60 hgext/histedit.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
62 61 hgext/keyword.py: error importing: <ImportError> No module named 'BaseHTTPServer' (error at common.py:*) (glob)
63 62 hgext/largefiles/basestore.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
64 63 hgext/largefiles/lfcommands.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
65 64 hgext/largefiles/lfutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
66 65 hgext/largefiles/localstore.py: error importing module: <ImportError> No module named 'lfutil' (line *) (glob)
67 66 hgext/largefiles/overrides.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
68 67 hgext/largefiles/proto.py: error importing: <ImportError> No module named 'httplib' (error at httppeer.py:*) (glob)
69 68 hgext/largefiles/remotestore.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at wireproto.py:*) (glob)
70 69 hgext/largefiles/reposetup.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
71 70 hgext/largefiles/uisetup.py: error importing module: <SyntaxError> invalid syntax (archival.py, line *) (line *) (glob)
72 71 hgext/largefiles/wirestore.py: error importing module: <ImportError> No module named 'lfutil' (line *) (glob)
73 72 hgext/mq.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
74 73 hgext/notify.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
75 74 hgext/pager.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
76 75 hgext/patchbomb.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
77 76 hgext/purge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
78 77 hgext/rebase.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
79 78 hgext/record.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
80 79 hgext/relink.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
81 80 hgext/schemes.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
82 81 hgext/share.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
83 82 hgext/shelve.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
84 83 hgext/strip.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
85 84 hgext/transplant.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
86 85 mercurial/archival.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
87 86 mercurial/branchmap.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
88 87 mercurial/bundle*.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
89 88 mercurial/bundlerepo.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
90 89 mercurial/changegroup.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
91 90 mercurial/changelog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
92 91 mercurial/cmdutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
93 92 mercurial/commands.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
94 93 mercurial/commandserver.py: error importing module: <ImportError> No module named 'SocketServer' (line *) (glob)
95 94 mercurial/context.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
96 95 mercurial/copies.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
97 96 mercurial/crecord.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
98 97 mercurial/dirstate.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
99 98 mercurial/discovery.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
100 99 mercurial/dispatch.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
101 100 mercurial/exchange.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
102 101 mercurial/extensions.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
103 102 mercurial/filelog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
104 103 mercurial/filemerge.py: error importing: <ImportError> No module named 'cPickle' (error at formatter.py:*) (glob)
105 104 mercurial/fileset.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
106 105 mercurial/formatter.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
107 106 mercurial/graphmod.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
108 107 mercurial/help.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
109 108 mercurial/hg.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
110 109 mercurial/hgweb/common.py: error importing module: <ImportError> No module named 'BaseHTTPServer' (line *) (glob)
111 110 mercurial/hgweb/hgweb_mod.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
112 111 mercurial/hgweb/hgwebdir_mod.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
113 112 mercurial/hgweb/protocol.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
114 113 mercurial/hgweb/request.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
115 114 mercurial/hgweb/server.py: error importing module: <ImportError> No module named 'BaseHTTPServer' (line *) (glob)
116 115 mercurial/hgweb/webcommands.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
117 116 mercurial/hgweb/webutil.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
118 117 mercurial/hgweb/wsgicgi.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
119 118 mercurial/hook.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
120 119 mercurial/httpconnection.py: error importing: <ImportError> No module named 'rfc822' (error at __init__.py:*) (glob)
121 120 mercurial/httppeer.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
122 121 mercurial/keepalive.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
123 122 mercurial/localrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
124 123 mercurial/mail.py: error importing module: <AttributeError> module 'email' has no attribute 'Header' (line *) (glob)
125 124 mercurial/manifest.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
126 125 mercurial/merge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
127 126 mercurial/namespaces.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
128 127 mercurial/patch.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
129 128 mercurial/pure/mpatch.py: error importing module: <ImportError> cannot import name 'pycompat' (line *) (glob)
130 129 mercurial/pure/parsers.py: error importing module: <ImportError> No module named 'mercurial.pure.node' (line *) (glob)
131 130 mercurial/repair.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
132 131 mercurial/revlog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
133 132 mercurial/revset.py: error importing module: <AttributeError> 'dict' object has no attribute 'iteritems' (line *) (glob)
134 133 mercurial/scmutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
135 134 mercurial/scmwindows.py: error importing module: <ImportError> No module named '_winreg' (line *) (glob)
136 135 mercurial/simplemerge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
137 136 mercurial/sshpeer.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at wireproto.py:*) (glob)
138 137 mercurial/sshserver.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
139 138 mercurial/statichttprepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
140 139 mercurial/store.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
141 140 mercurial/streamclone.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
142 141 mercurial/subrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
143 142 mercurial/templatefilters.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
144 143 mercurial/templatekw.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
145 144 mercurial/templater.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
146 145 mercurial/ui.py: error importing: <ImportError> No module named 'cPickle' (error at formatter.py:*) (glob)
147 146 mercurial/unionrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
148 147 mercurial/url.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
149 148 mercurial/verify.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
150 149 mercurial/win*.py: error importing module: <ImportError> No module named 'msvcrt' (line *) (glob)
151 150 mercurial/windows.py: error importing module: <ImportError> No module named '_winreg' (line *) (glob)
152 151 mercurial/wireproto.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
153 152
154 153 #endif
General Comments 0
You need to be logged in to leave comments. Login now