diff options
author | Philip Thiem <ptthiem@gmail.com> | 2013-07-04 12:24:21 -0500 |
---|---|---|
committer | Philip Thiem <ptthiem@gmail.com> | 2013-07-04 12:24:21 -0500 |
commit | 44989bd50e225241c1dfc7e60c5a973586a4fc13 (patch) | |
tree | 938a6092a1ae14e0c92c7c14744935bb547bbc44 /setuptools/svn_utils.py | |
parent | d30f79227d14b87b2610bcf726de1c20e7cbf10f (diff) | |
download | external_python_setuptools-44989bd50e225241c1dfc7e60c5a973586a4fc13.tar.gz external_python_setuptools-44989bd50e225241c1dfc7e60c5a973586a4fc13.tar.bz2 external_python_setuptools-44989bd50e225241c1dfc7e60c5a973586a4fc13.zip |
cannot use list since that requires repo access, initial recurse parsing
--HG--
extra : rebase_source : 87deb8066a0cb067e7bccc63cc156b7fed30ea29
Diffstat (limited to 'setuptools/svn_utils.py')
-rw-r--r-- | setuptools/svn_utils.py | 62 |
1 files changed, 42 insertions, 20 deletions
diff --git a/setuptools/svn_utils.py b/setuptools/svn_utils.py index 93912b1a..5ada2e31 100644 --- a/setuptools/svn_utils.py +++ b/setuptools/svn_utils.py @@ -53,6 +53,36 @@ def parse_revision(path): pass
return 0
+#svn list returns relative o
+def parse_manifest(path):
+ #NOTE: Need to parse entities?
+ _, data = _run_command(['svn', 'info', '-R', '--xml', path])
+
+ doc = xml.dom.pulldom.parseString(data)
+ entries = list()
+ for event, node in doc:
+ if event=='START_ELEMENT' and node.nodeName=='entry':
+ doc.expandNode(node)
+ entries.append(node)
+
+ if entries:
+ return [
+ _get_entry_name(element)
+ for element in entries[1:]
+ if _get_entry_schedule(element).lower() != 'deleted'
+ ]
+ else:
+ return []
+
+def _get_entry_name(entry):
+ return entry.getAttribute('path')
+
+def _get_entry_schedule(entry):
+ schedule = entry.getElementsByTagName('schedule')[0]
+ return "".join([t.nodeValue for t in schedule.childNodes
+ if t.nodeType == t.TEXT_NODE])
+
+
#TODO add the text entry back, and make its use dependent on the
# non existence of svn?
@@ -253,35 +283,28 @@ class SVNEntriesCMD(SVNEntries): entryre = re.compile(r'<entry.*?</entry>', re.DOTALL or re.I)
namere = re.compile(r'<name>(.*?)</name>', re.I)
- def __get_cached_dir_data(self):
- return self.dir_data
-
def __get_cached_entries(self):
return self.entries
def is_valid(self):
- return self.get_dir_data() is not None
+ return bool(self.get_entries())
def get_dir_data(self):
#This returns the info entry for the directory ONLY
- _, data = _run_command(['svn', 'info', '--xml', self.path])
+ return self.get_entries()[0]
+
+ def get_entries(self):
+ #regarding the shell argument, see: http://bugs.python.org/issue8557
+ _, data = _run_command(['svn', 'info',
+ '--depth', 'immediates', '--xml', self.path])
doc = xml.dom.pulldom.parseString(data)
- self.dir_data = None
+ self.entries = list()
for event, node in doc:
if event=='START_ELEMENT' and node.nodeName=='entry':
doc.expandNode(node)
- self.dir_data = node
- break
+ self.entries.append(node)
- if self.dir_data:
- self.get_dir_data = self.__get_cached_dir_data
- return self.dir_data
-
- def get_entries(self):
- #regarding the shell argument, see: http://bugs.python.org/issue8557
- _, data = _run_command(['svn', 'list', '--xml', self.path])
- self.entries = self.entryre.findall(data)
self.get_entries = self.__get_cached_entries
return self.entries
@@ -301,10 +324,9 @@ class SVNEntriesCMD(SVNEntries): return list()
else:
return [
- m.group(1)
- for entry in self.get_entries()
- for m in self.namere.finditer(entry)
- if m.group(1)
+ _get_entry_name(element)
+ for element in self.get_entries()[1:]
+ if _get_entry_schedule(element).lower() != 'deleted'
]
def _get_externals_data(self, filename):
|