Mercurial > public > mercurial-scm > hg
comparison mercurial/subrepo.py @ 16450:c9c8c9053119 stable
archive: make it work with svn subrepos (issue3308)
- _svncommand() in files() returns a tuple since 0ae98cd2a83f not a string.
- _svncommand() in filedata() returns a tuple not a string.
- "svn list" returns files but also directories.
- "svn list" is not recursive by default.
I have no idea what happens to svn:externals possibly embedded in the svn
subrepository.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Mon, 16 Apr 2012 11:48:15 +0200 |
parents | 8ae7626d8bf1 |
children | 9c431cfdca12 |
comparison
equal
deleted
inserted
replaced
16416:c3aedd526d53 | 16450:c9c8c9053119 |
---|---|
738 def push(self, opts): | 738 def push(self, opts): |
739 # push is a no-op for SVN | 739 # push is a no-op for SVN |
740 return True | 740 return True |
741 | 741 |
742 def files(self): | 742 def files(self): |
743 output = self._svncommand(['list']) | 743 output = self._svncommand(['list', '--recursive', '--xml'])[0] |
744 # This works because svn forbids \n in filenames. | 744 doc = xml.dom.minidom.parseString(output) |
745 return output.splitlines() | 745 paths = [] |
746 for e in doc.getElementsByTagName('entry'): | |
747 kind = str(e.getAttribute('kind')) | |
748 if kind != 'file': | |
749 continue | |
750 name = ''.join(c.data for c | |
751 in e.getElementsByTagName('name')[0].childNodes | |
752 if c.nodeType == c.TEXT_NODE) | |
753 paths.append(name) | |
754 return paths | |
746 | 755 |
747 def filedata(self, name): | 756 def filedata(self, name): |
748 return self._svncommand(['cat'], name) | 757 return self._svncommand(['cat'], name)[0] |
749 | 758 |
750 | 759 |
751 class gitsubrepo(abstractsubrepo): | 760 class gitsubrepo(abstractsubrepo): |
752 def __init__(self, ctx, path, state): | 761 def __init__(self, ctx, path, state): |
753 # TODO add git version check. | 762 # TODO add git version check. |