# HG changeset patch # User Patrick Mezard # Date 2012-04-16 09:48:15 # Node ID c9c8c905311992cae2e7cd90846d1b863a2a5c71 # Parent c3aedd526d530506891caf690ff9688404bb5ea8 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. diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -740,12 +740,21 @@ class svnsubrepo(abstractsubrepo): return True def files(self): - output = self._svncommand(['list']) - # This works because svn forbids \n in filenames. - return output.splitlines() + output = self._svncommand(['list', '--recursive', '--xml'])[0] + doc = xml.dom.minidom.parseString(output) + paths = [] + for e in doc.getElementsByTagName('entry'): + kind = str(e.getAttribute('kind')) + if kind != 'file': + continue + name = ''.join(c.data for c + in e.getElementsByTagName('name')[0].childNodes + if c.nodeType == c.TEXT_NODE) + paths.append(name) + return paths def filedata(self, name): - return self._svncommand(['cat'], name) + return self._svncommand(['cat'], name)[0] class gitsubrepo(abstractsubrepo): diff --git a/tests/test-subrepo-svn.t b/tests/test-subrepo-svn.t --- a/tests/test-subrepo-svn.t +++ b/tests/test-subrepo-svn.t @@ -543,3 +543,16 @@ First, create that condition in the repo 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ test -f recreated/somethingold +Test archive + + $ hg archive -S ../archive-all --debug + archiving: 0/2 files (0.00%) + archiving: .hgsub 1/2 files (50.00%) + archiving: .hgsubstate 2/2 files (100.00%) + archiving (obstruct): 0/1 files (0.00%) + archiving (obstruct): 1/1 files (100.00%) + archiving (s): 0/2 files (0.00%) + archiving (s): 1/2 files (50.00%) + archiving (s): 2/2 files (100.00%) + archiving (recreated): 0/1 files (0.00%) + archiving (recreated): 1/1 files (100.00%)