import ConfigParser import os, inspect import re import smtplib from email.mime.text import MIMEText import subprocess from subprocess import Popen, PIPE dir_name = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) config_file = dir_name + '/config.cfg' # Parse the config file config = ConfigParser.RawConfigParser() print 'Reading from config file', config_file config.read(config_file) fromaddr = config.get('Gmail', 'fromaddr') smtp = config.get('Gmail', 'smtp') username = config.get('Gmail', 'user') password = config.get('Gmail', 'pass') svn_path = config.get('Repository', 'path') BASE = config.get('Repository', 'base').strip() recipients = [] for item in config.items('Members'): if item[1] == 'true': recipients.append(item[0]) #print fromaddr #print smtp #print user #print password #print recipients def getRevisionNum(revision): print 'Getting revision number at', svn_path revision_pattern = re.compile('^r[0-9]+ ', re.MULTILINE) p = subprocess.Popen(['svn', 'log', '-r'+revision, svn_path], stdout=PIPE, stderr=PIPE) stdout, stderr = p.communicate() p.wait() if p.returncode == 1: print stderr print stdout print "Something wrong, exit" os._exit(os.EX_DATAERR) res = revision_pattern.search(stdout) if res == None: print stdout print stderr print "Something wrong, exit" os._exit(os.EX_DATAERR) return res.group(0)[1:].strip() # Get the HEAD HEAD = getRevisionNum('HEAD') print 'BASE Revision: ', BASE print 'HEAD Revision: ', HEAD if BASE == HEAD: print 'No changes' os._exit(os.EX_OK) num_of_change = int(HEAD) - int(BASE) BASE = str(int(BASE) + 1) # Get the log between BASE and HEAD p = subprocess.Popen(['svn', 'log', '-v', '-r'+HEAD+':'+BASE, svn_path], stdout=PIPE, stderr=PIPE) stdout, stderr = p.communicate() p.wait() if p.returncode == 1: print "Something wrong, exit" print stdout print stderr os._exit(os.EX_DATAERR) log_summary = stdout + '\n' + 'Please update your local repository before committing anything.\n\nIf you don\'t want to receive this notification, contact Wei (huangw5@cs.rpi.edu) \nto remove your email address.' # Send email toaddr = ','.join(recipients) msg = MIMEText(log_summary) if num_of_change > 1: msg['Subject'] = 'proganalysis: ' + str(num_of_change) + ' changes' else: msg['Subject'] = 'proganalysis: ' + str(num_of_change) + ' change' msg['From'] = fromaddr msg['To'] = toaddr print "Sending message...", msg server = smtplib.SMTP(smtp) server.starttls() server.login(username,password) server.sendmail(fromaddr, recipients, msg.as_string()) server.quit() # Update the BASE in config file config.set('Repository', 'base', HEAD) configfile = open(config_file, 'wb') config.write(configfile) configfile.close()