Mercurial > hg
comparison hgext/convert/cvs.py @ 8048:d22432bdcba1
convert/cvs: delay CVS log parsing after initialization (issue1581/2)
Source and destination constructors should be fast so configurations issues are
hit quickly, including authentication and filemap/authormap/splicemap issues.
Delaying might be a problem if the remove side disconnects idle connections
while the log is being read. It did not happen when converting openafs
repository, where log retrieval took at least 10mn.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Sat, 11 Apr 2009 21:17:11 +0200 |
parents | d812029cda85 |
children | 6584953be356 |
comparison
equal
deleted
inserted
replaced
8047:04c62275cbc7 | 8048:d22432bdcba1 |
---|---|
22 self.builtin = cvspsexe == 'builtin' | 22 self.builtin = cvspsexe == 'builtin' |
23 | 23 |
24 if not self.builtin: | 24 if not self.builtin: |
25 checktool(cvspsexe) | 25 checktool(cvspsexe) |
26 | 26 |
27 self.changeset = {} | 27 self.changeset = None |
28 self.files = {} | 28 self.files = {} |
29 self.tags = {} | 29 self.tags = {} |
30 self.lastbranch = {} | 30 self.lastbranch = {} |
31 self.parent = {} | 31 self.parent = {} |
32 self.socket = None | 32 self.socket = None |
33 self.cvsroot = file(os.path.join(cvs, "Root")).read()[:-1] | 33 self.cvsroot = file(os.path.join(cvs, "Root")).read()[:-1] |
34 self.cvsrepo = file(os.path.join(cvs, "Repository")).read()[:-1] | 34 self.cvsrepo = file(os.path.join(cvs, "Repository")).read()[:-1] |
35 self.encoding = locale.getpreferredencoding() | 35 self.encoding = locale.getpreferredencoding() |
36 | 36 |
37 self._parse(ui) | |
38 self._connect() | 37 self._connect() |
39 | 38 |
40 def _parse(self, ui): | 39 def _parse(self): |
41 if self.changeset: | 40 if self.changeset is not None: |
42 return | 41 return |
42 self.changeset = {} | |
43 | 43 |
44 maxrev = 0 | 44 maxrev = 0 |
45 cmd = self.cmd | 45 cmd = self.cmd |
46 if self.rev: | 46 if self.rev: |
47 # TODO: handle tags | 47 # TODO: handle tags |
63 state = 0 | 63 state = 0 |
64 filerevids = {} | 64 filerevids = {} |
65 | 65 |
66 if self.builtin: | 66 if self.builtin: |
67 # builtin cvsps code | 67 # builtin cvsps code |
68 ui.status(_('using builtin cvsps\n')) | 68 self.ui.status(_('using builtin cvsps\n')) |
69 | 69 |
70 db = cvsps.createlog(ui, cache='update') | 70 db = cvsps.createlog(self.ui, cache='update') |
71 db = cvsps.createchangeset(ui, db, | 71 db = cvsps.createchangeset(self.ui, db, |
72 fuzz=int(ui.config('convert', 'cvsps.fuzz', 60)), | 72 fuzz=int(self.ui.config('convert', 'cvsps.fuzz', 60)), |
73 mergeto=ui.config('convert', 'cvsps.mergeto', None), | 73 mergeto=self.ui.config('convert', 'cvsps.mergeto', None), |
74 mergefrom=ui.config('convert', 'cvsps.mergefrom', None)) | 74 mergefrom=self.ui.config('convert', 'cvsps.mergefrom', None)) |
75 | 75 |
76 for cs in db: | 76 for cs in db: |
77 if maxrev and cs.id>maxrev: | 77 if maxrev and cs.id>maxrev: |
78 break | 78 break |
79 id = str(cs.id) | 79 id = str(cs.id) |
276 self.writep.write("UseUnchanged\n") | 276 self.writep.write("UseUnchanged\n") |
277 self.writep.flush() | 277 self.writep.flush() |
278 r = self.readp.readline() | 278 r = self.readp.readline() |
279 | 279 |
280 def getheads(self): | 280 def getheads(self): |
281 self._parse() | |
281 return self.heads | 282 return self.heads |
282 | 283 |
283 def _getfile(self, name, rev): | 284 def _getfile(self, name, rev): |
284 | 285 |
285 def chunkedread(fp, count): | 286 def chunkedread(fp, count): |
330 self.readp.readline() | 331 self.readp.readline() |
331 else: | 332 else: |
332 raise util.Abort(_("unknown CVS response: %s") % line) | 333 raise util.Abort(_("unknown CVS response: %s") % line) |
333 | 334 |
334 def getfile(self, file, rev): | 335 def getfile(self, file, rev): |
336 self._parse() | |
335 data, mode = self._getfile(file, rev) | 337 data, mode = self._getfile(file, rev) |
336 self.modecache[(file, rev)] = mode | 338 self.modecache[(file, rev)] = mode |
337 return data | 339 return data |
338 | 340 |
339 def getmode(self, file, rev): | 341 def getmode(self, file, rev): |
340 return self.modecache[(file, rev)] | 342 return self.modecache[(file, rev)] |
341 | 343 |
342 def getchanges(self, rev): | 344 def getchanges(self, rev): |
345 self._parse() | |
343 self.modecache = {} | 346 self.modecache = {} |
344 return util.sort(self.files[rev].items()), {} | 347 return util.sort(self.files[rev].items()), {} |
345 | 348 |
346 def getcommit(self, rev): | 349 def getcommit(self, rev): |
350 self._parse() | |
347 return self.changeset[rev] | 351 return self.changeset[rev] |
348 | 352 |
349 def gettags(self): | 353 def gettags(self): |
354 self._parse() | |
350 return self.tags | 355 return self.tags |
351 | 356 |
352 def getchangedfiles(self, rev, i): | 357 def getchangedfiles(self, rev, i): |
358 self._parse() | |
353 return util.sort(self.files[rev].keys()) | 359 return util.sort(self.files[rev].keys()) |