Mercurial > hg
comparison hgext/convert/subversion.py @ 6847:9d6d1fdb7d72
convert: restore previous svn transport parent correctly
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Fri, 25 Jul 2008 20:37:41 +0200 |
parents | 0bb76d168437 |
children | 59c40c60d8d8 |
comparison
equal
deleted
inserted
replaced
6842:e37fa751182a | 6847:9d6d1fdb7d72 |
---|---|
186 self.ctx = self.transport.client | 186 self.ctx = self.transport.client |
187 self.base = svn.ra.get_repos_root(self.ra) | 187 self.base = svn.ra.get_repos_root(self.ra) |
188 # Module is either empty or a repository path starting with | 188 # Module is either empty or a repository path starting with |
189 # a slash and not ending with a slash. | 189 # a slash and not ending with a slash. |
190 self.module = self.url[len(self.base):] | 190 self.module = self.url[len(self.base):] |
191 self.prevmodule = None | |
191 self.rootmodule = self.module | 192 self.rootmodule = self.module |
192 self.commits = {} | 193 self.commits = {} |
193 self.paths = {} | 194 self.paths = {} |
194 self.uuid = svn.ra.get_uuid(self.ra).decode(self.encoding) | 195 self.uuid = svn.ra.get_uuid(self.ra).decode(self.encoding) |
195 except SubversionException, e: | 196 except SubversionException, e: |
476 return None | 477 return None |
477 | 478 |
478 if not stop: | 479 if not stop: |
479 stop = svn.ra.get_latest_revnum(self.ra) | 480 stop = svn.ra.get_latest_revnum(self.ra) |
480 try: | 481 try: |
481 self.reparent('') | 482 prevmodule = self.reparent('') |
482 dirent = svn.ra.stat(self.ra, path.strip('/'), stop) | 483 dirent = svn.ra.stat(self.ra, path.strip('/'), stop) |
483 self.reparent(self.module) | 484 self.reparent(prevmodule) |
484 except SubversionException: | 485 except SubversionException: |
485 dirent = None | 486 dirent = None |
486 if not dirent: | 487 if not dirent: |
487 raise util.Abort('%s not found up to revision %d' % (path, stop)) | 488 raise util.Abort('%s not found up to revision %d' % (path, stop)) |
488 | 489 |
530 | 531 |
531 def is_blacklisted(self, svn_rev): | 532 def is_blacklisted(self, svn_rev): |
532 return svn_rev in self.blacklist | 533 return svn_rev in self.blacklist |
533 | 534 |
534 def reparent(self, module): | 535 def reparent(self, module): |
535 svn_url = self.base + module | 536 """Reparent the svn transport and return the previous parent.""" |
536 self.ui.debug("reparent to %s\n" % svn_url.encode(self.encoding)) | 537 if self.prevmodule == module: |
537 svn.ra.reparent(self.ra, svn_url.encode(self.encoding)) | 538 return module |
539 svn_url = (self.base + module).encode(self.encoding) | |
540 prevmodule = self.prevmodule | |
541 if prevmodule is None: | |
542 prevmodule = '' | |
543 self.ui.debug("reparent to %s\n" % svn_url) | |
544 svn.ra.reparent(self.ra, svn_url) | |
545 self.prevmodule = module | |
546 return prevmodule | |
538 | 547 |
539 def expandpaths(self, rev, paths, parents): | 548 def expandpaths(self, rev, paths, parents): |
540 entries = [] | 549 entries = [] |
541 copyfrom = {} # Map of entrypath, revision for finding source of deleted revisions. | 550 copyfrom = {} # Map of entrypath, revision for finding source of deleted revisions. |
542 copies = {} | 551 copies = {} |
602 fromrev = froment.copyfrom_rev | 611 fromrev = froment.copyfrom_rev |
603 self.ui.debug("Info: %s %s %s %s\n" % (frompath, froment, ent, entrypath)) | 612 self.ui.debug("Info: %s %s %s %s\n" % (frompath, froment, ent, entrypath)) |
604 | 613 |
605 # We can avoid the reparent calls if the module has not changed | 614 # We can avoid the reparent calls if the module has not changed |
606 # but it probably does not worth the pain. | 615 # but it probably does not worth the pain. |
607 self.reparent('') | 616 prevmodule = self.reparent('') |
608 fromkind = svn.ra.check_path(self.ra, entrypath.strip('/'), fromrev) | 617 fromkind = svn.ra.check_path(self.ra, entrypath.strip('/'), fromrev) |
609 self.reparent(self.module) | 618 self.reparent(prevmodule) |
610 | 619 |
611 if fromkind == svn.core.svn_node_file: # a deleted file | 620 if fromkind == svn.core.svn_node_file: # a deleted file |
612 entries.append(self.recode(entry)) | 621 entries.append(self.recode(entry)) |
613 elif fromkind == svn.core.svn_node_dir: | 622 elif fromkind == svn.core.svn_node_dir: |
614 # print "Deleted/moved non-file:", revnum, path, ent | 623 # print "Deleted/moved non-file:", revnum, path, ent |