fgmeta/svn_catalog_repository.py

42 lines
1.2 KiB
Python
Raw Normal View History

2015-06-05 05:09:46 +08:00
import subprocess, os, sgprops
2015-06-05 05:09:46 +08:00
import xml.etree.cElementTree as ET
class SVNCatalogRepository:
def __init__(self, node):
path = node.getValue("path")
2015-07-26 11:45:01 +08:00
if not os.path.exists(path):
raise RuntimeError("No directory at:" + path)
2015-06-05 05:09:46 +08:00
self._path = path
xml = subprocess.check_output(["svn", "info", "--xml", path])
root = ET.fromstring(xml)
2015-07-26 11:45:01 +08:00
if (root.find(".//repository/root") == None):
2015-06-05 05:09:46 +08:00
raise RuntimeError("Not an SVN repository:" + path)
2015-07-26 11:45:01 +08:00
self._aircraftPath = None
if node.hasChild("scan-suffix"):
self._aircraftPath = os.path.join(path, node.getValue("scan-suffix"))
@property
def path(self):
return self._path
@property
def aircraftPath(self):
return self._aircraftPath
2015-06-05 05:09:46 +08:00
def hasPathChanged(self, path, oldRevision):
return self.scmRevisionForPath(path) != oldRevision
2015-07-26 11:45:01 +08:00
2015-06-05 05:09:46 +08:00
def scmRevisionForPath(self, path):
xml = subprocess.check_output(["svn", "info", "--xml", path])
root = ET.fromstring(xml)
commit = root.find(".//entry/commit")
2015-06-05 05:09:46 +08:00
return commit.get('revision', 0)
2015-07-26 11:45:01 +08:00
2015-06-05 05:09:46 +08:00
def update(self):
print "SVN update of", self._path
subprocess.call(["svn", "update", self._path])