#!/usr/bin/env python
from subprocess import Popen, PIPE
import re
class SVN:
def __init__(self,address):
stdin = ''
command = Popen(['svn','log',address],
shell=False, stdin=PIPE,
stdout=PIPE) #,stderr=PIPE)
(stdout, _) = command.communicate(stdin)
revs = re.findall(r'(r\d+)|(\d\d\d\d-\d\d-\d\d)|(\d\d:\d\d)',stdout.decode('UTF-8'))
self.list_of_revisions = []
index = 0
while index < len(revs):
self.list_of_revisions.append((revs[index][0],
revs[index+1][1],
revs[index+2][2]))
index += 3
def revisions(self):
return self.list_of_revisions
def _sort_neg_pos(self,lst):
positive = set()
negative = set()
changed = set()
for change in lst:
(pos,neg) = (set(),set())
for line in change:
if line[0] == '+' and line[0:2] != '++':
pos.add(line[1:].split('\t')[0])
elif line[0:2] != '++' and line[0:2] != '--':
neg.add(line[1:].split('\t')[0])
if len(neg) == 0:
positive.update(pos)
elif len(pos) == 0:
negative.update(neg)
else:
changed.update(pos)
return (positive,changed,negative)
def difference(self,revision1,revision2):
stdin = ''
command = Popen(['svn', 'diff','-r',
'%s:%s' % (revision1,revision2),address],
shell=False, stdin=PIPE,
stdout=PIPE) #,stderr=PIPE)
(stdout, _) = command.communicate(stdin)
return self._sort_neg_pos(
[[c for c in re.split(r'\n',s)
if c != '' and c[0] in '+-']
for s in re.split(r'@@.+@@\n',stdout.decode('UTF-8'))])
def ref(address,item):
if address == '':
return item
else:
return '%s' % (address,item,item)
def produce_rss(address,number=20,ref_address=''):
svn = SVN(address)
revs = svn.revisions()
result = '''
SweFN dev
http://spraakbanken.gu.se/swefn
SweFN dev
SweFN dev
http://spraakbanken.gu.se/sites/spraakbanken.gu.se/files/swefn.png
http://spraakbanken.gu.se/swefn
\n'''
count = 0
for i in range(len(revs)-1):
(rev,d,t) = revs[i]
(rev2,_,_) = revs[i+1]
(pos,changed,neg) = svn.difference(rev2,rev)
pos_changed = list(pos) + list(changed)
if len(pos_changed) > 0:
count += 1
result += ' - \n'
result += ' %s (%s %s)\n' % (pos_changed[0],d,t)
result += ' %s\n' % (pos_changed[0])
result += ' http://spraakbanken.gu.se/swe/forskning/swefn/utvecklingsversion#%s\n' % (pos_changed[0])
result += ' %s\n' %(" ".join(pos_changed))
result += '
\n'
if count >= number:
break
result += '\n'
result += ''
return result
if __name__ == '__main__':
address = 'https://svn.spraakdata.gu.se/sb/fnplusplus/databasen/swefn-db-dd-mtg.csv'
print produce_rss(address, number=10).encode('UTF-8')