Author: breser
Date: Thu Dec 20 22:03:18 2012
New Revision: 1424731
URL: http://svn.apache.org/viewvc?rev=1424731&view=rev
Log:
Add support for getting the files changed not just the dirs from svnpubsub.
* tools/server-side/svnpubsub/svnpubsub/client.py
(XMLStreamHandler.__init__): Add parent and attrs members.
(XMLStreamHandler.startElement): Save the attributes for each element and
set the parent attribute for dirs_changed and changed.
(XMLStreamHandler.endElement): Unset the parent member, handle path elements
for both dirs_changed and changed, and remove attrs saved perviously.
(Revision.__init__): Initialize changed member.
* tools/server-side/svnpubsub/svnpubsub/server.py
(Revision.__init__): Init changed member.
(Revision.render_commit): Add support for output changed member as XML.
* tools/server-side/svnpubsub/svnpubsub/commit-hook.py
(svncmd_changed): New function to retrieve changed paths.
(main): Fill changed member.
Modified:
subversion/trunk/tools/server-side/svnpubsub/commit-hook.py
subversion/trunk/tools/server-side/svnpubsub/svnpubsub/client.py
subversion/trunk/tools/server-side/svnpubsub/svnpubsub/server.py
Modified: subversion/trunk/tools/server-side/svnpubsub/commit-hook.py
URL:
http://svn.apache.org/viewvc/subversion/trunk/tools/server-side/svnpubsub/commit-hook.py?rev=1424731&r1=1424730&r2=1424731&view=diff
==============================================================================
--- subversion/trunk/tools/server-side/svnpubsub/commit-hook.py (original)
+++ subversion/trunk/tools/server-side/svnpubsub/commit-hook.py Thu Dec 20
22:03:18 2012
@@ -59,6 +59,19 @@ def svncmd_dirs(repo, revision):
dirs.append(line.strip())
return dirs
+def svncmd_changed(repo, revision):
+ cmd = "%s changed -r %s %s" % (SVNLOOK, revision, repo)
+ p = svncmd(cmd)
+ changed = {}
+ while True:
+ line = p.stdout.readline()
+ if not line:
+ break
+ line = line.strip()
+ (flags, filename) = (line[0:3], line[4:])
+ changed[filename] = {'flags': flags}
+ return changed
+
def do_put(body):
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request("http://%s:%d/dirs-changed" %(HOST, PORT),
data=body)
@@ -72,12 +85,14 @@ def main(repo, revision):
i = svncmd_info(repo, revision)
data = {'revision': int(revision),
'dirs_changed': [],
+ 'changed': {},
'repos': svncmd_uuid(repo),
'author': i['author'],
'log': i['log'],
'date': i['date'],
}
data['dirs_changed'].extend(svncmd_dirs(repo, revision))
+ data['changed'].update(svncmd_changed(repo, revision))
body = json.dumps(data)
#print body
do_put(body)
Modified: subversion/trunk/tools/server-side/svnpubsub/svnpubsub/client.py
URL:
http://svn.apache.org/viewvc/subversion/trunk/tools/server-side/svnpubsub/svnpubsub/client.py?rev=1424731&r1=1424730&r2=1424731&view=diff
==============================================================================
--- subversion/trunk/tools/server-side/svnpubsub/svnpubsub/client.py (original)
+++ subversion/trunk/tools/server-side/svnpubsub/svnpubsub/client.py Thu Dec 20
22:03:18 2012
@@ -119,10 +119,15 @@ class XMLStreamHandler(xml.sax.handler.C
self.rev = None
self.chars = ''
+ self.parent = None
+ self.attrs = [ ]
def startElement(self, name, attrs):
+ self.attrs = attrs
if name == 'commit':
self.rev = Revision(attrs['repository'], int(attrs['revision']))
+ elif name == "dirs_changed" or name == "changed":
+ self.parent = name
# No other elements to worry about.
def characters(self, data):
@@ -134,10 +139,15 @@ class XMLStreamHandler(xml.sax.handler.C
self.rev = None
elif name == 'stillalive':
self.event_callback('ping')
+ elif name == self.parent:
+ self.parent = None
elif self.chars and self.rev:
value = self.chars.strip()
- if name == 'path':
+ if self.parent == 'dirs_changed' and name == 'path':
self.rev.dirs_changed.append(value.decode('unicode_escape'))
+ elif self.parent == 'changed' and name == 'path':
+ path = value.decode('unicode_escape')
+ self.rev.changed[path] = dict(p for p in self.attrs.items())
elif name == 'author':
self.rev.author = value.decode('unicode_escape')
elif name == 'date':
@@ -147,6 +157,8 @@ class XMLStreamHandler(xml.sax.handler.C
# Toss out any accumulated characters for this element.
self.chars = ''
+ # Toss out the saved attributes for this element.
+ self.attrs = [ ]
class Revision(object):
@@ -154,6 +166,7 @@ class Revision(object):
self.uuid = uuid
self.rev = rev
self.dirs_changed = [ ]
+ self.changed = { }
self.author = None
self.date = None
self.log = None
Modified: subversion/trunk/tools/server-side/svnpubsub/svnpubsub/server.py
URL:
http://svn.apache.org/viewvc/subversion/trunk/tools/server-side/svnpubsub/svnpubsub/server.py?rev=1424731&r1=1424730&r2=1424731&view=diff
==============================================================================
--- subversion/trunk/tools/server-side/svnpubsub/svnpubsub/server.py (original)
+++ subversion/trunk/tools/server-side/svnpubsub/svnpubsub/server.py Thu Dec 20
22:03:18 2012
@@ -79,6 +79,7 @@ class Revision:
self.rev = r.get('revision')
self.repos = r.get('repos')
self.dirs_changed = r.get('dirs_changed')
+ self.changed = r.get('changed')
self.author = r.get('author')
self.log = r.get('log')
self.date = r.get('date')
@@ -88,6 +89,7 @@ class Revision:
return json.dumps({'commit': {'repository': self.repos,
'revision': self.rev,
'dirs_changed': self.dirs_changed,
+ 'changed': self.changed,
'author': self.author,
'log': self.log,
'date': self.date}}) +","
@@ -100,6 +102,11 @@ class Revision:
for p in self.dirs_changed:
x = ET.SubElement(d, 'path')
x.text = p.encode('unicode_escape')
+ ch = ET.SubElement(c, 'changed')
+ for chp in self.changed.keys():
+ x = ET.SubElement(ch, 'path', self.changed[chp])
+ x.text = chp.encode('unicode_escape')
+
str = ET.tostring(c, 'UTF-8') + "\n"
return str[39:]
else: