Mercurial > p > roundup > code
annotate scripts/notify-roundup/notify-roundup.py @ 4208:bc85cab08e6f gsoc-2009
Now that we have string as a revision, its al cool
| author | Pygi <pygi@users.sourceforge.net> |
|---|---|
| date | Mon, 13 Jul 2009 20:21:34 +0000 |
| parents | 48584548328d |
| children | 4498f5252f8b |
| 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 | 33 |
| 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 | 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 | 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 | 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 |
|
4208
bc85cab08e6f
Now that we have string as a revision, its al cool
Pygi <pygi@users.sourceforge.net>
parents:
4203
diff
changeset
|
56 if vcs_type == 'svn' or vcs_type == 'bzr' or vcs_type == 'git': |
|
bc85cab08e6f
Now that we have string as a revision, its al cool
Pygi <pygi@users.sourceforge.net>
parents:
4203
diff
changeset
|
57 revision = sys.argv[3] |
| 4175 | 58 elif vcs_type == 'hg': |
| 4190 | 59 revisions = sys.argv[3].split(':') |
|
4208
bc85cab08e6f
Now that we have string as a revision, its al cool
Pygi <pygi@users.sourceforge.net>
parents:
4203
diff
changeset
|
60 revision = revisions[1].lstrip() |
| 4175 | 61 else: |
| 62 logging.error('something wen\'t wrong') | |
| 63 | |
|
4166
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
64 # 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
|
65 if vcs_type == 'svn': |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
66 repos = SVNRepository(repos_dir, revision, pool) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
67 elif vcs_type == 'hg': |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
68 repos = HGRepository(repos_dir, revision, pool) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
69 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
70 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
|
71 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
72 repos.klass = cfg.get('main', 'item-class') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
73 if not repos.extract_info(): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
74 return |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
75 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
76 if cfg.has_option('main', 'host'): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
77 repos.host = cfg.get('main', 'host') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
78 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
79 repos.host = socket.gethostname() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
80 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
81 mode = cfg.get('main', 'mode') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
82 if mode == 'local': |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
83 notify_local(cfg.get('local', 'tracker-home'), repos) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
84 elif mode == 'email': |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
85 tracker_address = cfg.get('email', 'tracker-address') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
86 domain = cfg.get('email', 'default-domain') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
87 smtp_host = cfg.get('email', 'smtp-host') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
88 if cfg.has_option('address mappings', repos.author): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
89 mapped_email = cfg.get('address mappings', repos.author) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
90 elif cfg.has_option('address mappings', '*'): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
91 mapped_email = cfg.get('address mappings', '*') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
92 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
93 mapped_email = repos.author |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
94 if '@' not in mapped_email: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
95 mapped_email += domain |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
96 notify_email(tracker_address, mapped_email, smtp_host, repos) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
97 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
98 logging.error('invalid mode %s in config file'%mode) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
99 |
|
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 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
|
102 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
|
103 if repos.status: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
104 subject += ' [status=%s]'%repos.status |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
105 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
|
106 message = '''From: %s |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
107 To: %s |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
108 Subject: %s |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
109 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
110 revision=%s |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
111 host=%s |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
112 repos=%s |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
113 date=%s |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
114 summary=%s |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
115 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
116 %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
|
117 repos.repos_dir, date, repos.summary, repos.message) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
118 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
119 logger.debug('MESSAGE TO SEND\n%s'%message) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
120 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
121 smtp = smtplib.SMTP(smtp_host) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
122 try: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
123 smtp.sendmail(from_address, [tracker_address], message) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
124 except: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
125 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
|
126 from_address, smtp_host)) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
127 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
128 def notify_local(tracker_home, repos): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
129 # get a handle on the tracker db |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
130 tracker = roundup.instance.open(tracker_home) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
131 db = tracker.open('admin') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
132 try: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
133 notify_local_inner(db, tracker_home, repos) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
134 except: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
135 db.rollback() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
136 db.close() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
137 raise |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
138 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
139 def notify_local_inner(db, tracker_home, repos): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
140 # sanity check |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
141 try: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
142 db.getclass(repos.klass) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
143 except KeyError: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
144 logger.error('no such tracker class %s'%repos.klass) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
145 raise Failed |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
146 if not db.getclass(repos.klass).hasnode(repos.itemid): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
147 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
|
148 raise Failed |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
149 if repos.status: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
150 try: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
151 status_id = db.status.lookup(repos.status) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
152 except KeyError: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
153 logger.error('no such status %s'%repos.status) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
154 raise Failed |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
155 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
156 print repos.host, repos.repos_dir |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
157 # get the svn repo information from the tracker |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
158 try: |
| 4182 | 159 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
|
160 path=repos.repos_dir)[0] |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
161 except IndexError: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
162 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
|
163 raise Failed |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
164 |
| 4189 | 165 |
|
4166
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
166 # log in as the appropriate user |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
167 try: |
| 4183 | 168 matches = db.user.stringFind(vcs_name=repos.author) |
|
4166
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
169 except KeyError: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
170 # the user class has no property "svn_name" |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
171 matches = [] |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
172 if matches: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
173 userid = matches[0] |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
174 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
175 try: |
| 4189 | 176 userid = db.user.lookup(repos.author) |
| 4185 | 177 except KeyError: |
| 178 raise Failed, 'no Roundup user matching %s'%repos.author | |
| 179 username = db.user.get(userid, 'username') | |
| 4189 | 180 |
| 181 db.close() | |
|
4166
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
182 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
183 # tell Roundup |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
184 tracker = roundup.instance.open(tracker_home) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
185 db = tracker.open(username) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
186 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
187 # check perms |
| 4189 | 188 if not db.security.hasPermission('Create', userid, 'vcs_rev'): |
| 189 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
|
190 if not db.security.hasPermission('Create', userid, 'msg'): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
191 raise Unauthorised, "Can't create items of class 'msg'" |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
192 if not db.security.hasPermission('Edit', userid, repos.klass, |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
193 'messages', repos.itemid): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
194 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
|
195 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
|
196 repos.klass, 'status', repos.itemid): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
197 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
|
198 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
199 # create the revision |
|
4179
e81df731d2d2
some more porting to vcs agnostic stuff
Pygi <pygi@users.sourceforge.net>
parents:
4178
diff
changeset
|
200 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
|
201 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
202 # add the message to the spool |
| 4192 | 203 date = roundup.date.Date(repos.date) |
|
4166
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
204 msgid = db.msg.create(content=repos.message, summary=repos.summary, |
| 4186 | 205 author=userid, date=date, revision=vcs_rev_id) |
|
4166
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
206 klass = db.getclass(repos.klass) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
207 messages = klass.get(repos.itemid, 'messages') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
208 messages.append(msgid) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
209 klass.set(repos.itemid, messages=messages) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
210 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
211 # and set the status |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
212 if repos.status: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
213 klass.set(repos.itemid, status=status_id) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
214 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
215 db.commit() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
216 logger.debug('Roundup modification complete') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
217 db.close() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
218 |
|
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 def _select_adds(change): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
221 return change.added |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
222 def _select_deletes(change): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
223 return change.path is None |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
224 def _select_modifies(change): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
225 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
|
226 |
|
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 def generate_list(output, header, changelist, selection): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
229 items = [ ] |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
230 for path, change in changelist: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
231 if selection(change): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
232 items.append((path, change)) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
233 if not items: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
234 return |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
235 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
236 output.write('%s:\n' % header) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
237 for fname, change in items: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
238 if change.item_kind == svn.core.svn_node_dir: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
239 is_dir = '/' |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
240 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
241 is_dir = '' |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
242 if change.prop_changes: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
243 if change.text_changed: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
244 props = ' (contents, props changed)' |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
245 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
246 props = ' (props changed)' |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
247 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
248 props = '' |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
249 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
|
250 if change.added and change.base_path: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
251 if is_dir: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
252 text = '' |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
253 elif change.text_changed: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
254 text = ', changed' |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
255 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
256 text = ' unchanged' |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
257 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
|
258 % (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
|
259 |
|
4197
e5917e2386d4
Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents:
4193
diff
changeset
|
260 class BZRRepository: |
|
e5917e2386d4
Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents:
4193
diff
changeset
|
261 '''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
|
262 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
|
263 ''' |
|
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 def __init__(self,repos_dir,rev,pool): |
| 4174 | 266 self.repos_dir = repos_dir |
| 267 self.rev = rev | |
| 268 self.pool = pool | |
| 269 | |
|
4203
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
270 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
|
271 authors_split = authors_calls.split(':') |
|
19e8a54ced9f
Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents:
4197
diff
changeset
|
272 authoro = authors_split[1].lstrip().split('<') |
|
19e8a54ced9f
Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents:
4197
diff
changeset
|
273 author_split2 = authoro[0].rstrip('>').split() |
|
19e8a54ced9f
Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents:
4197
diff
changeset
|
274 self.author = author_split[0].lower() |
|
4203
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
275 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
276 def extract_info(self): |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
277 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
|
278 re.I) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
279 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
280 # parse for Roundup item information |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
281 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
|
282 log_mine = log.split('message:') |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
283 log_mines = log_mine[1].lstrip() |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
284 for line in log_mines.splitlines(): |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
285 m = issue_re.match(line) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
286 if m: |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
287 break |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
288 else: |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
289 # nothing to do |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
290 return |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
291 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
292 # parse out the issue information |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
293 klass = m.group(1) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
294 self.itemid = m.group(2) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
295 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
296 issue = klass + self.itemid |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
297 self.status = m.group(4) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
298 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
299 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
|
300 # 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
|
301 output = cStringIO.StringIO() |
|
4200
19e8a54ced9f
Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents:
4197
diff
changeset
|
302 |
|
4203
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
303 output.write('Log:\n%s\n'%log_mines) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
304 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
305 self.message = output.getvalue() |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
306 self.summary = "This is bzr change" |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
307 self.date = time.localtime() |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
308 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
309 return True |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
310 |
|
4200
19e8a54ced9f
Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents:
4197
diff
changeset
|
311 |
|
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 class GitRepository: |
|
19e8a54ced9f
Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents:
4197
diff
changeset
|
314 '''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
|
315 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
|
316 ''' |
|
4203
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
317 def __init__(self,repos_dir,rev,pool): |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
318 self.repos_dir = repos_dir |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
319 self.rev = rev |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
320 self.pool = pool |
|
4200
19e8a54ced9f
Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents:
4197
diff
changeset
|
321 |
|
4203
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
322 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
|
323 authors_split = authors_calls.split() |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
324 self.author = authors_split[0].lower() |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
325 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
326 def extract_info(self): |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
327 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
|
328 re.I) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
329 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
330 # parse for Roundup item information |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
331 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
|
332 for line in log.splitlines(): |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
333 m = issue_re.match(line) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
334 if m: |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
335 break |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
336 else: |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
337 # nothing to do |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
338 return |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
339 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
340 # parse out the issue information |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
341 klass = m.group(1) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
342 self.itemid = m.group(2) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
343 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
344 issue = klass + self.itemid |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
345 self.status = m.group(4) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
346 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
347 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
|
348 # 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
|
349 output = cStringIO.StringIO() |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
350 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
351 output.write('Log:\n%s\n'%log_mines) |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
352 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
353 self.message = output.getvalue() |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
354 self.summary = "This is git change" |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
355 self.date = time.localtime() |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
356 |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
357 return True |
|
48584548328d
Implemented partial git and bzr support
Pygi <pygi@users.sourceforge.net>
parents:
4200
diff
changeset
|
358 |
|
4200
19e8a54ced9f
Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents:
4197
diff
changeset
|
359 |
|
19e8a54ced9f
Implemented WIP bzr revision author fetching
Pygi <pygi@users.sourceforge.net>
parents:
4197
diff
changeset
|
360 |
|
4197
e5917e2386d4
Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents:
4193
diff
changeset
|
361 class HGRepository: |
|
e5917e2386d4
Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents:
4193
diff
changeset
|
362 '''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
|
363 ''' |
|
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 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
|
366 self.repos_dir = repos_dir |
|
e5917e2386d4
Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents:
4193
diff
changeset
|
367 self.rev = rev |
|
e5917e2386d4
Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents:
4193
diff
changeset
|
368 self.pool = pool |
|
e5917e2386d4
Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents:
4193
diff
changeset
|
369 |
|
e5917e2386d4
Fixed a lot of problems with hg notify implementation
Pygi <pygi@users.sourceforge.net>
parents:
4193
diff
changeset
|
370 authors_calls = commands.getoutput('hg log ' + self.repos_dir + ' --rev=tip | grep user') |
| 4181 | 371 authors_split = authors_calls.split(':') |
| 4189 | 372 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
|
373 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
|
374 self.author = author_split2[0].lower() |
| 4174 | 375 |
|
4166
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
376 |
| 4174 | 377 def extract_info(self): |
| 378 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
|
379 re.I) |
| 4174 | 380 |
| 381 # 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
|
382 log = commands.getoutput('hg log ' + self.repos_dir + ' --rev=tip | grep summary') or '' |
| 4181 | 383 log_mine = log.split(':') |
| 384 log_mines = log_mine[1].lstrip() | |
| 385 for line in log_mines.splitlines(): | |
| 4174 | 386 m = issue_re.match(line) |
| 387 if m: | |
| 388 break | |
| 389 else: | |
| 390 # nothing to do | |
| 391 return | |
| 392 | |
| 393 # parse out the issue information | |
| 394 klass = m.group(1) | |
| 395 self.itemid = m.group(2) | |
| 396 | |
| 397 issue = klass + self.itemid | |
| 398 self.status = m.group(4) | |
| 399 | |
| 400 logger.debug('Roundup info item=%r, status=%r'%(issue, self.status)) | |
| 4188 | 401 # Generate email for the various groups and option-params. |
| 402 output = cStringIO.StringIO() | |
| 4174 | 403 |
| 4187 | 404 output.write('Log:\n%s\n'%log_mines) |
| 405 | |
| 406 self.message = output.getvalue() | |
| 4192 | 407 self.summary = "This is hg change" |
| 408 self.date = time.localtime() | |
| 4174 | 409 |
| 410 return True | |
| 411 | |
| 412 | |
|
4166
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
413 class SVNRepository: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
414 '''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
|
415 ''' |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
416 def __init__(self, repos_dir, rev, pool): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
417 self.repos_dir = repos_dir |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
418 self.rev = rev |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
419 self.pool = pool |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
420 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
421 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
|
422 self.fs_ptr = svn.repos.svn_repos_fs(self.repos_ptr) |
| 4174 | 423 |
|
4166
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
424 self.roots = {} |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
425 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
426 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
|
427 rev, self.pool) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
428 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
429 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
|
430 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
431 def get_rev_prop(self, propname): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
432 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
|
433 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
434 def extract_info(self): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
435 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
|
436 re.I) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
437 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
438 # parse for Roundup item information |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
439 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
|
440 for line in log.splitlines(): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
441 m = issue_re.match(line) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
442 if m: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
443 break |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
444 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
445 # nothing to do |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
446 return |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
447 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
448 # parse out the issue information |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
449 klass = m.group(1) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
450 self.itemid = m.group(2) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
451 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
452 issue = klass + self.itemid |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
453 self.status = m.group(4) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
454 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
455 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
|
456 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
457 # get all the changes and sort by path |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
458 editor = svn.repos.RevisionChangeCollector(self.fs_ptr, self.rev, |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
459 self.pool) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
460 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
|
461 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
|
462 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
463 changelist = editor.changes.items() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
464 changelist.sort() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
465 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
466 # figure out the changed directories |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
467 dirs = { } |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
468 for path, change in changelist: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
469 if change.item_kind == svn.core.svn_node_dir: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
470 dirs[path] = None |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
471 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
472 idx = path.rfind('/') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
473 if idx == -1: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
474 dirs[''] = None |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
475 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
476 dirs[path[:idx]] = None |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
477 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
478 dirlist = dirs.keys() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
479 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
480 # 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
|
481 # 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
|
482 if len(dirs) == 1 or dirs.has_key(''): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
483 commondir = '' |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
484 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
485 common = dirlist.pop().split('/') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
486 for d in dirlist: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
487 parts = d.split('/') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
488 for i in range(len(common)): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
489 if i == len(parts) or common[i] != parts[i]: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
490 del common[i:] |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
491 break |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
492 commondir = '/'.join(common) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
493 if commondir: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
494 # strip the common portion from each directory |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
495 l = len(commondir) + 1 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
496 dirlist = [ ] |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
497 for d in dirs.keys(): |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
498 if d == commondir: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
499 dirlist.append('.') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
500 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
501 dirlist.append(d[l:]) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
502 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
503 # nothing in common, so reset the list of directories |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
504 dirlist = dirs.keys() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
505 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
506 # 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
|
507 dirlist.sort() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
508 dirlist = ' '.join(dirlist) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
509 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
510 if commondir: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
511 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
|
512 else: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
513 self.summary = 'r%d - %s' % (self.rev, dirlist) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
514 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
515 # Generate email for the various groups and option-params. |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
516 output = cStringIO.StringIO() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
517 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
518 # print summary sections |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
519 generate_list(output, 'Added', changelist, _select_adds) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
520 generate_list(output, 'Removed', changelist, _select_deletes) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
521 generate_list(output, 'Modified', changelist, _select_modifies) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
522 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
523 output.write('Log:\n%s\n'%log) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
524 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
525 self.message = output.getvalue() |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
526 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
527 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
|
528 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
|
529 self.pool)) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
530 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
531 return True |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
532 |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
533 if __name__ == '__main__': |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
534 try: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
535 svn.core.run_app(main) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
536 except Failed, message: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
537 logger.error(message) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
538 sys.exit(1) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
539 except: |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
540 logger.exception('top level') |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
541 sys.exit(1) |
|
fe9b0fdb1790
Moved beta-notify to notify-roundup
Pygi <pygi@users.sourceforge.net>
parents:
diff
changeset
|
542 |
