hgext/convert/subversion.py
changeset 4787 c5dd8e184279
parent 4786 62e1b6412b62
child 4788 c2ef09a35c53
equal deleted inserted replaced
4786:62e1b6412b62 4787:c5dd8e184279
   118         try:
   118         try:
   119             self.get_blacklist()
   119             self.get_blacklist()
   120         except IOError, e:
   120         except IOError, e:
   121             pass
   121             pass
   122 
   122 
   123         if not latest:
   123         self.last_changed = self.latest(self.module, latest)
   124             latest = svn.ra.get_latest_revnum(self.ra)
       
   125         dirent = svn.ra.stat(self.ra, self.module, latest)
       
   126         if not dirent:
       
   127             raise util.Abort('module %s not found in revision %d' % (self.module, latest))
       
   128         self.last_changed = dirent.created_rev
       
   129 
   124 
   130         self.head = self.rev(self.last_changed)
   125         self.head = self.rev(self.last_changed)
   131 
   126 
   132     def rev(self, revnum):
   127     def rev(self, revnum):
   133         return (u"svn:%s%s@%s" % (self.uuid, self.module, revnum)).decode(self.encoding)
   128         return (u"svn:%s%s@%s" % (self.uuid, self.module, revnum)).decode(self.encoding)
   134 
   129 
   135     def revnum(self, rev):
   130     def revnum(self, rev):
   136         return int(rev.split('@')[-1])
   131         return int(rev.split('@')[-1])
   137             
   132 
       
   133     def latest(self, path, revnum, stop=0):
       
   134         'find the latest revision affecting path, up to stop'
       
   135         if not stop:
       
   136             stop = svn.ra.get_latest_revnum(self.ra)
       
   137         try:
       
   138             self.reparent('')
       
   139             dirent = svn.ra.stat(self.ra, path.strip('/'), stop)
       
   140             self.reparent(self.module)
       
   141         except SubversionException:
       
   142             dirent = None
       
   143         if not dirent:
       
   144             raise util.Abort('module %s not found up to revision %d' \
       
   145                              % (self.module, stop))
       
   146 
       
   147         return dirent.created_rev
       
   148 
   138     def get_blacklist(self):
   149     def get_blacklist(self):
   139         """Avoid certain revision numbers.
   150         """Avoid certain revision numbers.
   140         It is not uncommon for two nearby revisions to cancel each other
   151         It is not uncommon for two nearby revisions to cancel each other
   141         out, e.g. 'I copied trunk into a subdirectory of itself instead
   152         out, e.g. 'I copied trunk into a subdirectory of itself instead
   142         of making a branch'. The converted repository is significantly
   153         of making a branch'. The converted repository is significantly