annotate scripts/notify-roundup/notify-roundup.py @ 4203:48584548328d gsoc-2009

Implemented partial git and bzr support
author Pygi <pygi@users.sourceforge.net>
date Mon, 13 Jul 2009 17:38:01 +0000
parents 19e8a54ced9f
children bc85cab08e6f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
1 #!/usr/bin/python
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
2 #
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
3 # notify-roundup.py: call into a roundup tracker to notify it of commits
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
4 #
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
5 # USAGE: notify-roundup.py TRACKER-HOME REPOS-DIR REVISION
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
6 # notify-roundup.py TRACKER-HOME REPOS-DIR REVISION AUTHOR PROPNAME
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
7 #
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
8 # TRACKER-HOME is the tracker to notify
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
9 #
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
10 # See end of file for change history
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
11
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
12 import sys, os, time, cStringIO, re, logging, smtplib, ConfigParser, socket
4197
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
13 import commands
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
14
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
15 # configure logging
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
16 logger = logging.getLogger('notify-roundup')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
17 hdlr = logging.FileHandler('/tmp/log')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
18 formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
19 hdlr.setFormatter(formatter)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
20 logger.addHandler(hdlr)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
21 logger.propogate = False
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
22 logger.setLevel(logging.DEBUG)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
23
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
24 #print sys.argv
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
25 # now try to import stuff that might not work
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
26 try:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
27 import roundup.instance, roundup.date
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
28
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
29 import svn.fs
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
30 import svn.delta
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
31 import svn.repos
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
32 import svn.core
4174
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
33
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
34 from mercurial import ui, hg
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
35 except:
4174
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
36 logger.exception('Exception while importing Roundup and SVN/hg')
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
37 sys.exit(1)
4174
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
38
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
39
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
40 class Failed(Exception):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
41 pass
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
42 class Unauthorised(Failed):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
43 pass
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
44
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
45 def main(pool):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
46 '''Handle the commit revision.
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
47 '''
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
48 # command-line args
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
49 cfg = ConfigParser.ConfigParser()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
50 cfg.read(sys.argv[1])
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
51 repos_dir = sys.argv[2]
4175
67c03ee5af93 Trying some fixes
Pygi <pygi@users.sourceforge.net>
parents: 4174
diff changeset
52
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
53
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
54 vcs_type = cfg.get('vcs', 'type')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
55
4175
67c03ee5af93 Trying some fixes
Pygi <pygi@users.sourceforge.net>
parents: 4174
diff changeset
56 if vcs_type == 'svn':
67c03ee5af93 Trying some fixes
Pygi <pygi@users.sourceforge.net>
parents: 4174
diff changeset
57 revision = int(sys.argv[3])
67c03ee5af93 Trying some fixes
Pygi <pygi@users.sourceforge.net>
parents: 4174
diff changeset
58 elif vcs_type == 'hg':
4190
Pygi <pygi@users.sourceforge.net>
parents: 4189
diff changeset
59 revisions = sys.argv[3].split(':')
4191
Pygi <pygi@users.sourceforge.net>
parents: 4190
diff changeset
60 revisionz = revisions[1].lstrip()
Pygi <pygi@users.sourceforge.net>
parents: 4190
diff changeset
61 revision = int(revisionz)
4175
67c03ee5af93 Trying some fixes
Pygi <pygi@users.sourceforge.net>
parents: 4174
diff changeset
62 else:
67c03ee5af93 Trying some fixes
Pygi <pygi@users.sourceforge.net>
parents: 4174
diff changeset
63 logging.error('something wen\'t wrong')
67c03ee5af93 Trying some fixes
Pygi <pygi@users.sourceforge.net>
parents: 4174
diff changeset
64
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
65 # get a handle on the revision in the VCS repository
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
66 if vcs_type == 'svn':
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
67 repos = SVNRepository(repos_dir, revision, pool)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
68 elif vcs_type == 'hg':
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
69 repos = HGRepository(repos_dir, revision, pool)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
70 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
71 logging.error('we currently don\'t support %s VCS type'%vcs_type)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
72
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
73 repos.klass = cfg.get('main', 'item-class')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
74 if not repos.extract_info():
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
75 return
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
76
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
77 if cfg.has_option('main', 'host'):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
78 repos.host = cfg.get('main', 'host')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
79 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
80 repos.host = socket.gethostname()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
81
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
82 mode = cfg.get('main', 'mode')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
83 if mode == 'local':
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
84 notify_local(cfg.get('local', 'tracker-home'), repos)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
85 elif mode == 'email':
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
86 tracker_address = cfg.get('email', 'tracker-address')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
87 domain = cfg.get('email', 'default-domain')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
88 smtp_host = cfg.get('email', 'smtp-host')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
89 if cfg.has_option('address mappings', repos.author):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
90 mapped_email = cfg.get('address mappings', repos.author)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
91 elif cfg.has_option('address mappings', '*'):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
92 mapped_email = cfg.get('address mappings', '*')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
93 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
94 mapped_email = repos.author
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
95 if '@' not in mapped_email:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
96 mapped_email += domain
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
97 notify_email(tracker_address, mapped_email, smtp_host, repos)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
98 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
99 logging.error('invalid mode %s in config file'%mode)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
100
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
101
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
102 def notify_email(tracker_address, from_address, smtp_host, repos):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
103 subject = '[%s%s] SVN commit message'%(repos.klass, repos.itemid)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
104 if repos.status:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
105 subject += ' [status=%s]'%repos.status
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
106 date = time.strftime('%Y-%m-%d %H:%M:%S', repos.date)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
107 message = '''From: %s
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
108 To: %s
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
109 Subject: %s
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
110
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
111 revision=%s
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
112 host=%s
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
113 repos=%s
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
114 date=%s
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
115 summary=%s
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
116
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
117 %s'''%(from_address, tracker_address, subject, repos.rev, repos.host,
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
118 repos.repos_dir, date, repos.summary, repos.message)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
119
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
120 logger.debug('MESSAGE TO SEND\n%s'%message)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
121
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
122 smtp = smtplib.SMTP(smtp_host)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
123 try:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
124 smtp.sendmail(from_address, [tracker_address], message)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
125 except:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
126 logging.exception('mail to %r from %r via %r'%(tracker_address,
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
127 from_address, smtp_host))
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
128
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
129 def notify_local(tracker_home, repos):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
130 # get a handle on the tracker db
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
131 tracker = roundup.instance.open(tracker_home)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
132 db = tracker.open('admin')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
133 try:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
134 notify_local_inner(db, tracker_home, repos)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
135 except:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
136 db.rollback()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
137 db.close()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
138 raise
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
139
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
140 def notify_local_inner(db, tracker_home, repos):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
141 # sanity check
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
142 try:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
143 db.getclass(repos.klass)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
144 except KeyError:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
145 logger.error('no such tracker class %s'%repos.klass)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
146 raise Failed
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
147 if not db.getclass(repos.klass).hasnode(repos.itemid):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
148 logger.error('no such %s item %s'%(repos.klass, repos.itemid))
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
149 raise Failed
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
150 if repos.status:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
151 try:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
152 status_id = db.status.lookup(repos.status)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
153 except KeyError:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
154 logger.error('no such status %s'%repos.status)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
155 raise Failed
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
156
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
157 print repos.host, repos.repos_dir
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
158 # get the svn repo information from the tracker
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
159 try:
4182
150ee11d49ee More work more work
Pygi <pygi@users.sourceforge.net>
parents: 4181
diff changeset
160 vcs_repo_id = db.vcs_repo.stringFind(host=repos.host,
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
161 path=repos.repos_dir)[0]
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
162 except IndexError:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
163 logger.error('no repository %s in tracker'%repos.repos_dir)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
164 raise Failed
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
165
4189
0356a67b747f more porting and hacks
Pygi <pygi@users.sourceforge.net>
parents: 4188
diff changeset
166
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
167 # log in as the appropriate user
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
168 try:
4183
7fc0b90592d5 More work more work
Pygi <pygi@users.sourceforge.net>
parents: 4182
diff changeset
169 matches = db.user.stringFind(vcs_name=repos.author)
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
170 except KeyError:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
171 # the user class has no property "svn_name"
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
172 matches = []
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
173 if matches:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
174 userid = matches[0]
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
175 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
176 try:
4189
0356a67b747f more porting and hacks
Pygi <pygi@users.sourceforge.net>
parents: 4188
diff changeset
177 userid = db.user.lookup(repos.author)
4185
64f3d374f496 temporary hack
Pygi <pygi@users.sourceforge.net>
parents: 4184
diff changeset
178 except KeyError:
64f3d374f496 temporary hack
Pygi <pygi@users.sourceforge.net>
parents: 4184
diff changeset
179 raise Failed, 'no Roundup user matching %s'%repos.author
64f3d374f496 temporary hack
Pygi <pygi@users.sourceforge.net>
parents: 4184
diff changeset
180 username = db.user.get(userid, 'username')
4189
0356a67b747f more porting and hacks
Pygi <pygi@users.sourceforge.net>
parents: 4188
diff changeset
181
0356a67b747f more porting and hacks
Pygi <pygi@users.sourceforge.net>
parents: 4188
diff changeset
182 db.close()
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
183
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
184 # tell Roundup
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
185 tracker = roundup.instance.open(tracker_home)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
186 db = tracker.open(username)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
187
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
188 # check perms
4189
0356a67b747f more porting and hacks
Pygi <pygi@users.sourceforge.net>
parents: 4188
diff changeset
189 if not db.security.hasPermission('Create', userid, 'vcs_rev'):
0356a67b747f more porting and hacks
Pygi <pygi@users.sourceforge.net>
parents: 4188
diff changeset
190 raise Unauthorised, "Can't create items of class 'vcs_rev'"
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
191 if not db.security.hasPermission('Create', userid, 'msg'):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
192 raise Unauthorised, "Can't create items of class 'msg'"
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
193 if not db.security.hasPermission('Edit', userid, repos.klass,
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
194 'messages', repos.itemid):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
195 raise Unauthorised, "Can't edit items of class '%s'"%repos.klass
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
196 if repos.status and not db.security.hasPermission('Edit', userid,
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
197 repos.klass, 'status', repos.itemid):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
198 raise Unauthorised, "Can't edit items of class '%s'"%repos.klass
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
199
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
200 # create the revision
4179
e81df731d2d2 some more porting to vcs agnostic stuff
Pygi <pygi@users.sourceforge.net>
parents: 4178
diff changeset
201 vcs_rev_id = db.vcs_rev.create(repository=vcs_repo_id, revision=repos.rev)
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
202
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
203 # add the message to the spool
4192
e39cb012622d it works
Pygi <pygi@users.sourceforge.net>
parents: 4191
diff changeset
204 date = roundup.date.Date(repos.date)
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
205 msgid = db.msg.create(content=repos.message, summary=repos.summary,
4186
630263e92150 forgot to port
Pygi <pygi@users.sourceforge.net>
parents: 4185
diff changeset
206 author=userid, date=date, revision=vcs_rev_id)
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
207 klass = db.getclass(repos.klass)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
208 messages = klass.get(repos.itemid, 'messages')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
209 messages.append(msgid)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
210 klass.set(repos.itemid, messages=messages)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
211
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
212 # and set the status
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
213 if repos.status:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
214 klass.set(repos.itemid, status=status_id)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
215
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
216 db.commit()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
217 logger.debug('Roundup modification complete')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
218 db.close()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
219
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
220
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
221 def _select_adds(change):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
222 return change.added
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
223 def _select_deletes(change):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
224 return change.path is None
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
225 def _select_modifies(change):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
226 return not change.added and change.path is not None
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
227
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
228
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
229 def generate_list(output, header, changelist, selection):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
230 items = [ ]
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
231 for path, change in changelist:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
232 if selection(change):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
233 items.append((path, change))
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
234 if not items:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
235 return
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
236
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
237 output.write('%s:\n' % header)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
238 for fname, change in items:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
239 if change.item_kind == svn.core.svn_node_dir:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
240 is_dir = '/'
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
241 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
242 is_dir = ''
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
243 if change.prop_changes:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
244 if change.text_changed:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
245 props = ' (contents, props changed)'
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
246 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
247 props = ' (props changed)'
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
248 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
249 props = ''
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
250 output.write(' %s%s%s\n' % (fname, is_dir, props))
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
251 if change.added and change.base_path:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
252 if is_dir:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
253 text = ''
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
254 elif change.text_changed:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
255 text = ', changed'
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
256 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
257 text = ' unchanged'
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
258 output.write(' - copied%s from r%d, %s%s\n'
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
259 % (text, change.base_rev, change.base_path[1:], is_dir))
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
260
4197
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
261 class BZRRepository:
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
262 '''Holds roots and other information about the bzr repository.
4200
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
263 THIS IS WIP AND HASN'T BEEN TESTED AT ALL!
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
264 '''
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
265
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
266 def __init__(self,repos_dir,rev,pool):
4174
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
267 self.repos_dir = repos_dir
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
268 self.rev = rev
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
269 self.pool = pool
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
270
4203
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
271 authors_calls = commands.getoutput('bzr log -r-1 ' + self.repos_dir + ' | grep committer')
4200
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
272 authors_split = authors_calls.split(':')
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
273 authoro = authors_split[1].lstrip().split('<')
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
274 author_split2 = authoro[0].rstrip('>').split()
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
275 self.author = author_split[0].lower()
4203
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
276
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
277 def extract_info(self):
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
278 issue_re = re.compile('^\s*(%s)\s*(\d+)(\s+(\S+))?\s*$'%self.klass,
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
279 re.I)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
280
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
281 # parse for Roundup item information
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
282 log = commands.getoutput('bzr log -r-1 ' + self.repos_dir) or ''
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
283 log_mine = log.split('message:')
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
284 log_mines = log_mine[1].lstrip()
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
285 for line in log_mines.splitlines():
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
286 m = issue_re.match(line)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
287 if m:
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
288 break
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
289 else:
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
290 # nothing to do
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
291 return
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
292
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
293 # parse out the issue information
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
294 klass = m.group(1)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
295 self.itemid = m.group(2)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
296
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
297 issue = klass + self.itemid
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
298 self.status = m.group(4)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
299
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
300 logger.debug('Roundup info item=%r, status=%r'%(issue, self.status))
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
301 # Generate email for the various groups and option-params.
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
302 output = cStringIO.StringIO()
4200
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
303
4203
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
304 output.write('Log:\n%s\n'%log_mines)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
305
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
306 self.message = output.getvalue()
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
307 self.summary = "This is bzr change"
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
308 self.date = time.localtime()
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
309
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
310 return True
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
311
4200
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
312
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
313
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
314 class GitRepository:
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
315 '''Holds roots and other information about the git repository.
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
316 THIS IS WIP AND HASN'T BEEN TESTED AT ALL!
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
317 '''
4203
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
318 def __init__(self,repos_dir,rev,pool):
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
319 self.repos_dir = repos_dir
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
320 self.rev = rev
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
321 self.pool = pool
4200
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
322
4203
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
323 authors_calls = commands.getoutput('cd ' + self.repos_dir + '; git log --pretty=format:%an | head -n1')
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
324 authors_split = authors_calls.split()
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
325 self.author = authors_split[0].lower()
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
326
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
327 def extract_info(self):
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
328 issue_re = re.compile('^\s*(%s)\s*(\d+)(\s+(\S+))?\s*$'%self.klass,
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
329 re.I)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
330
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
331 # parse for Roundup item information
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
332 log = commands.getoutput('cd ' + self.repos_dir + '; git log --pretty=format:%s | head -n1') or ''
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
333 for line in log.splitlines():
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
334 m = issue_re.match(line)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
335 if m:
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
336 break
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
337 else:
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
338 # nothing to do
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
339 return
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
340
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
341 # parse out the issue information
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
342 klass = m.group(1)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
343 self.itemid = m.group(2)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
344
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
345 issue = klass + self.itemid
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
346 self.status = m.group(4)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
347
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
348 logger.debug('Roundup info item=%r, status=%r'%(issue, self.status))
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
349 # Generate email for the various groups and option-params.
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
350 output = cStringIO.StringIO()
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
351
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
352 output.write('Log:\n%s\n'%log_mines)
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
353
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
354 self.message = output.getvalue()
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
355 self.summary = "This is git change"
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
356 self.date = time.localtime()
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
357
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
358 return True
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
359
4200
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
360
19e8a54ced9f Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents: 4197
diff changeset
361
4197
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
362 class HGRepository:
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
363 '''Holds roots and other information about the hg repository.
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
364 '''
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
365
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
366 def __init__(self,repos_dir,rev,pool):
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
367 self.repos_dir = repos_dir
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
368 self.rev = rev
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
369 self.pool = pool
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
370
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
371 authors_calls = commands.getoutput('hg log ' + self.repos_dir + ' --rev=tip | grep user')
4181
5501a3778903 More work more work
Pygi <pygi@users.sourceforge.net>
parents: 4180
diff changeset
372 authors_split = authors_calls.split(':')
4189
0356a67b747f more porting and hacks
Pygi <pygi@users.sourceforge.net>
parents: 4188
diff changeset
373 authoro = authors_split[1].lstrip().split('<')
4197
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
374 author_split2 = authoro[0].rstrip('>').split()
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
375 self.author = author_split2[0].lower()
4174
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
376
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
377
4174
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
378 def extract_info(self):
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
379 issue_re = re.compile('^\s*(%s)\s*(\d+)(\s+(\S+))?\s*$'%self.klass,
4203
48584548328d Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents: 4200
diff changeset
380 re.I)
4174
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
381
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
382 # parse for Roundup item information
4197
e5917e2386d4 Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents: 4193
diff changeset
383 log = commands.getoutput('hg log ' + self.repos_dir + ' --rev=tip | grep summary') or ''
4181
5501a3778903 More work more work
Pygi <pygi@users.sourceforge.net>
parents: 4180
diff changeset
384 log_mine = log.split(':')
5501a3778903 More work more work
Pygi <pygi@users.sourceforge.net>
parents: 4180
diff changeset
385 log_mines = log_mine[1].lstrip()
5501a3778903 More work more work
Pygi <pygi@users.sourceforge.net>
parents: 4180
diff changeset
386 for line in log_mines.splitlines():
4174
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
387 m = issue_re.match(line)
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
388 if m:
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
389 break
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
390 else:
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
391 # nothing to do
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
392 return
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
393
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
394 # parse out the issue information
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
395 klass = m.group(1)
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
396 self.itemid = m.group(2)
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
397
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
398 issue = klass + self.itemid
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
399 self.status = m.group(4)
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
400
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
401 logger.debug('Roundup info item=%r, status=%r'%(issue, self.status))
4188
Pygi <pygi@users.sourceforge.net>
parents: 4187
diff changeset
402 # Generate email for the various groups and option-params.
Pygi <pygi@users.sourceforge.net>
parents: 4187
diff changeset
403 output = cStringIO.StringIO()
4174
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
404
4187
e59d94c1e6e6 forgot to port
Pygi <pygi@users.sourceforge.net>
parents: 4186
diff changeset
405 output.write('Log:\n%s\n'%log_mines)
e59d94c1e6e6 forgot to port
Pygi <pygi@users.sourceforge.net>
parents: 4186
diff changeset
406
e59d94c1e6e6 forgot to port
Pygi <pygi@users.sourceforge.net>
parents: 4186
diff changeset
407 self.message = output.getvalue()
4192
e39cb012622d it works
Pygi <pygi@users.sourceforge.net>
parents: 4191
diff changeset
408 self.summary = "This is hg change"
e39cb012622d it works
Pygi <pygi@users.sourceforge.net>
parents: 4191
diff changeset
409 self.date = time.localtime()
4174
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
410
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
411 return True
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
412
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
413
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
414 class SVNRepository:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
415 '''Hold roots and other information about the svn repository. From mailer.py
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
416 '''
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
417 def __init__(self, repos_dir, rev, pool):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
418 self.repos_dir = repos_dir
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
419 self.rev = rev
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
420 self.pool = pool
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
421
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
422 self.repos_ptr = svn.repos.svn_repos_open(repos_dir, pool)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
423 self.fs_ptr = svn.repos.svn_repos_fs(self.repos_ptr)
4174
200d32b89f9f Did some hg work
Pygi <pygi@users.sourceforge.net>
parents: 4166
diff changeset
424
4166
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
425 self.roots = {}
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
426
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
427 self.root_this = self.roots[rev] = svn.fs.revision_root(self.fs_ptr,
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
428 rev, self.pool)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
429
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
430 self.author = self.get_rev_prop(svn.core.SVN_PROP_REVISION_AUTHOR)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
431
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
432 def get_rev_prop(self, propname):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
433 return svn.fs.revision_prop(self.fs_ptr, self.rev, propname, self.pool)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
434
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
435 def extract_info(self):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
436 issue_re = re.compile('^\s*(%s)\s*(\d+)(\s+(\S+))?\s*$'%self.klass,
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
437 re.I)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
438
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
439 # parse for Roundup item information
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
440 log = self.get_rev_prop(svn.core.SVN_PROP_REVISION_LOG) or ''
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
441 for line in log.splitlines():
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
442 m = issue_re.match(line)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
443 if m:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
444 break
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
445 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
446 # nothing to do
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
447 return
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
448
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
449 # parse out the issue information
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
450 klass = m.group(1)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
451 self.itemid = m.group(2)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
452
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
453 issue = klass + self.itemid
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
454 self.status = m.group(4)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
455
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
456 logger.debug('Roundup info item=%r, status=%r'%(issue, self.status))
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
457
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
458 # get all the changes and sort by path
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
459 editor = svn.repos.RevisionChangeCollector(self.fs_ptr, self.rev,
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
460 self.pool)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
461 e_ptr, e_baton = svn.delta.make_editor(editor, self.pool)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
462 svn.repos.svn_repos_replay(self.root_this, e_ptr, e_baton, self.pool)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
463
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
464 changelist = editor.changes.items()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
465 changelist.sort()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
466
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
467 # figure out the changed directories
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
468 dirs = { }
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
469 for path, change in changelist:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
470 if change.item_kind == svn.core.svn_node_dir:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
471 dirs[path] = None
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
472 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
473 idx = path.rfind('/')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
474 if idx == -1:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
475 dirs[''] = None
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
476 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
477 dirs[path[:idx]] = None
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
478
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
479 dirlist = dirs.keys()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
480
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
481 # figure out the common portion of all the dirs. note that there is
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
482 # no "common" if only a single dir was changed, or the root was changed.
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
483 if len(dirs) == 1 or dirs.has_key(''):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
484 commondir = ''
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
485 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
486 common = dirlist.pop().split('/')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
487 for d in dirlist:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
488 parts = d.split('/')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
489 for i in range(len(common)):
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
490 if i == len(parts) or common[i] != parts[i]:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
491 del common[i:]
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
492 break
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
493 commondir = '/'.join(common)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
494 if commondir:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
495 # strip the common portion from each directory
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
496 l = len(commondir) + 1
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
497 dirlist = [ ]
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
498 for d in dirs.keys():
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
499 if d == commondir:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
500 dirlist.append('.')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
501 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
502 dirlist.append(d[l:])
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
503 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
504 # nothing in common, so reset the list of directories
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
505 dirlist = dirs.keys()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
506
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
507 # compose the basic subject line. later, we can prefix it.
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
508 dirlist.sort()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
509 dirlist = ' '.join(dirlist)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
510
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
511 if commondir:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
512 self.summary = 'r%d - in %s: %s' % (self.rev, commondir, dirlist)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
513 else:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
514 self.summary = 'r%d - %s' % (self.rev, dirlist)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
515
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
516 # Generate email for the various groups and option-params.
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
517 output = cStringIO.StringIO()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
518
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
519 # print summary sections
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
520 generate_list(output, 'Added', changelist, _select_adds)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
521 generate_list(output, 'Removed', changelist, _select_deletes)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
522 generate_list(output, 'Modified', changelist, _select_modifies)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
523
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
524 output.write('Log:\n%s\n'%log)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
525
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
526 self.message = output.getvalue()
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
527
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
528 svndate = self.get_rev_prop(svn.core.SVN_PROP_REVISION_DATE)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
529 self.date = time.localtime(svn.core.secs_from_timestr(svndate,
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
530 self.pool))
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
531
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
532 return True
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
533
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
534 if __name__ == '__main__':
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
535 try:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
536 svn.core.run_app(main)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
537 except Failed, message:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
538 logger.error(message)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
539 sys.exit(1)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
540 except:
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
541 logger.exception('top level')
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
542 sys.exit(1)
fe9b0fdb1790 Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff changeset
543

Roundup Issue Tracker: http://roundup-tracker.org/