hgext/convert/subversion.py
changeset 5072 c89ed1f27e78
parent 5069 35f67dd712d0
child 5073 eb81294cf970
equal deleted inserted replaced
5071:35d47b06d4e3 5072:c89ed1f27e78
    44         pass
    44         pass
    45     if os.path.isdir(path):
    45     if os.path.isdir(path):
    46         return 'file://%s' % os.path.normpath(os.path.abspath(path))
    46         return 'file://%s' % os.path.normpath(os.path.abspath(path))
    47     return path
    47     return path
    48 
    48 
       
    49 def optrev(number):
       
    50     optrev = svn.core.svn_opt_revision_t()
       
    51     optrev.kind = svn.core.svn_opt_revision_number
       
    52     optrev.value.number = number
       
    53     return optrev
       
    54 
    49 class changedpath(object):
    55 class changedpath(object):
    50     def __init__(self, p):
    56     def __init__(self, p):
    51         self.copyfrom_path = p.copyfrom_path
    57         self.copyfrom_path = p.copyfrom_path
    52         self.copyfrom_rev = p.copyfrom_rev
    58         self.copyfrom_rev = p.copyfrom_rev
    53         self.action = p.action
    59         self.action = p.action
   122         except SubversionException, err:
   128         except SubversionException, err:
   123             return []
   129             return []
   124 
   130 
   125     def getheads(self):
   131     def getheads(self):
   126         # detect standard /branches, /tags, /trunk layout
   132         # detect standard /branches, /tags, /trunk layout
   127         optrev = svn.core.svn_opt_revision_t()
   133         rev = optrev(self.last_changed)
   128         optrev.kind = svn.core.svn_opt_revision_number
       
   129         optrev.value.number = self.last_changed
       
   130         rpath = self.url.strip('/')
   134         rpath = self.url.strip('/')
   131         cfgtrunk = self.ui.config('convert', 'svn.trunk')
   135         cfgtrunk = self.ui.config('convert', 'svn.trunk')
   132         cfgbranches = self.ui.config('convert', 'svn.branches')
   136         cfgbranches = self.ui.config('convert', 'svn.branches')
   133         trunk = (cfgtrunk or 'trunk').strip('/')
   137         trunk = (cfgtrunk or 'trunk').strip('/')
   134         branches = (cfgbranches or 'branches').strip('/')
   138         branches = (cfgbranches or 'branches').strip('/')
   135         if self.exists(trunk, optrev) and self.exists(branches, optrev):
   139         if self.exists(trunk, rev) and self.exists(branches, rev):
   136             self.ui.note('found trunk at %r and branches at %r\n' %
   140             self.ui.note('found trunk at %r and branches at %r\n' %
   137                          (trunk, branches))
   141                          (trunk, branches))
   138             oldmodule = self.module
   142             oldmodule = self.module
   139             self.module += '/' + trunk
   143             self.module += '/' + trunk
   140             lt = self.latest(self.module, self.last_changed)
   144             lt = self.latest(self.module, self.last_changed)
   141             self.head = self.revid(lt)
   145             self.head = self.revid(lt)
   142             self.heads = [self.head]
   146             self.heads = [self.head]
   143             branchnames = svn.client.ls(rpath + '/' + branches, optrev, False,
   147             branchnames = svn.client.ls(rpath + '/' + branches, rev, False,
   144                                         self.ctx)
   148                                         self.ctx)
   145             for branch in branchnames.keys():
   149             for branch in branchnames.keys():
   146                 if oldmodule:
   150                 if oldmodule:
   147                     module = '/' + oldmodule + '/' + branches + '/' + branch
   151                     module = '/' + oldmodule + '/' + branches + '/' + branch
   148                 else:
   152                 else:
   624         return data, mode
   628         return data, mode
   625 
   629 
   626     def _find_children(self, path, revnum):
   630     def _find_children(self, path, revnum):
   627         path = path.strip('/')
   631         path = path.strip('/')
   628         pool = Pool()
   632         pool = Pool()
   629         optrev = svn.core.svn_opt_revision_t()
       
   630         optrev.kind = svn.core.svn_opt_revision_number
       
   631         optrev.value.number = revnum
       
   632         rpath = '/'.join([self.base, path]).strip('/')
   633         rpath = '/'.join([self.base, path]).strip('/')
   633         return ['%s/%s' % (path, x) for x in svn.client.ls(rpath, optrev, True, self.ctx, pool).keys()]
   634         return ['%s/%s' % (path, x) for x in svn.client.ls(rpath, optrev(revnum), True, self.ctx, pool).keys()]