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