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