Ok, thanks, this should now be installed for FlightGear and SimGear. I'll work on TerraGear at some future time when I get a chance.
Curt. Ross Golder writes: > This is how it appears to be set up for me: > > In CVSROOT/loginfo, add the line : > > DEFAULT $CVSROOT/CVSROOT/syncmail %{sVv} > [EMAIL PROTECTED] > > And check in the attached syncmail script (and python, if it's not > installed!) into CVSROOT with execute perms. > > -- > Ross > > On Tue, 2001-12-11 at 21:54, Curtis L. Olson wrote: > > Ross Golder writes: > > > Did we get anywhere with adding cvs diff output to the cvslogs messages, > > > as per SourceForge? That would have made it a bit more obvious. > > > > I think I'm losing email over the side of the bucket ... can someone > > send a proper script to me directly? > > > > Thanks, > > > > Curt. > > -- > > Curtis Olson Intelligent Vehicles Lab FlightGear Project > > Twin Cities [EMAIL PROTECTED] [EMAIL PROTECTED] > > Minnesota http://www.menet.umn.edu/~curt http://www.flightgear.org > > > > _______________________________________________ > > Flightgear-devel mailing list > > [EMAIL PROTECTED] > > http://mail.flightgear.org/mailman/listinfo/flightgear-devel > > #! /usr/bin/python > # -*- Python -*- > > """Complicated notification for CVS checkins. > > This script is used to provide email notifications of changes to the CVS > repository. These email changes will include context diffs of the changes. > Really big diffs will be trimmed. > > This script is run from a CVS loginfo file (see $CVSROOT/CVSROOT/loginfo). To > set this up, create a loginfo entry that looks something like this: > > mymodule /path/to/this/script %%s [EMAIL PROTECTED] > > In this example, whenever a checkin that matches `mymodule' is made, this > script is invoked, which will generate the diff containing email, and send it > to [EMAIL PROTECTED] > > Note: This module used to also do repository synchronizations via > rsync-over-ssh, but since the repository has been moved to SourceForge, > this is no longer necessary. The syncing functionality has been ripped > out in the 3.0, which simplifies it considerably. Access the 2.x versions > to refer to this functionality. Because of this, the script is misnamed. > > It no longer makes sense to run this script from the command line. Doing so > will only print out this usage information. > > Usage: > > %(PROGRAM)s [options] <%%S> email-addr [email-addr ...] > > Where options is: > > --cvsroot=<path> > Use <path> as the environment variable CVSROOT. Otherwise this > variable must exist in the environment. > > --help > -h > Print this text. > > <%%S> > CVS %%s loginfo expansion. When invoked by CVS, this will be a single > string containing the directory the checkin is being made in, relative > to $CVSROOT, followed by the list of files that are changing. If the > %%s in the loginfo file is %%{sVv}, context diffs for each of the > modified files are included in any email messages that are generated. > > email-addrs > At least one email address. > > """ > > import os > import sys > import string > import time > import getopt > > # Notification command > MAILCMD = '/bin/mail -s "CVS: %(SUBJECT)s" %(PEOPLE)s 2>&1 > /dev/null' > > # Diff trimming stuff > DIFF_HEAD_LINES = 20 > DIFF_TAIL_LINES = 20 > DIFF_TRUNCATE_IF_LARGER = 1000 > > PROGRAM = sys.argv[0] > > > > def usage(code, msg=''): > print __doc__ % globals() > if msg: > print msg > sys.exit(code) > > > > def calculate_diff(filespec): > try: > file, oldrev, newrev = string.split(filespec, ',') > except ValueError: > # No diff to report > return '***** Bogus filespec: %s' % filespec > if oldrev == 'NONE': > try: > if os.path.exists(file): > fp = open(file) > else: > update_cmd = 'cvs -fn update -r %s -p %s' % (newrev, file) > fp = os.popen(update_cmd) > lines = fp.readlines() > fp.close() > lines.insert(0, '--- NEW FILE ---\n') > except IOError, e: > lines = ['***** Error reading new file: ', > str(e), '\n***** file: ', file, ' cwd: ', os.getcwd()] > elif newrev == 'NONE': > lines = ['--- %s DELETED ---\n' % file] > else: > # This /has/ to happen in the background, otherwise we'll run into CVS > # lock contention. What a crock. > diffcmd = '/usr/bin/cvs -f diff -kk -C 2 -r %s -r %s %s' % ( > oldrev, newrev, file) > fp = os.popen(diffcmd) > lines = fp.readlines() > sts = fp.close() > # ignore the error code, it always seems to be 1 :( > ## if sts: > ## return 'Error code %d occurred during diff\n' % (sts >> 8) > if len(lines) > DIFF_TRUNCATE_IF_LARGER: > removedlines = len(lines) - DIFF_HEAD_LINES - DIFF_TAIL_LINES > del lines[DIFF_HEAD_LINES:-DIFF_TAIL_LINES] > lines.insert(DIFF_HEAD_LINES, > '[...%d lines suppressed...]\n' % removedlines) > return string.join(lines, '') > > > > def blast_mail(mailcmd, filestodiff): > # cannot wait for child process or that will cause parent to retain cvs > # lock for too long. Urg! > if not os.fork(): > # in the child > # give up the lock you cvs thang! > time.sleep(2) > fp = os.popen(mailcmd, 'w') > fp.write(sys.stdin.read()) > fp.write('\n') > # append the diffs if available > for file in filestodiff: > fp.write(calculate_diff(file)) > fp.write('\n') > fp.close() > # doesn't matter what code we return, it isn't waited on > os._exit(0) > > > > # scan args for options > def main(): > try: > opts, args = getopt.getopt(sys.argv[1:], 'h', ['cvsroot=', 'help']) > except getopt.error, msg: > usage(1, msg) > > # parse the options > for opt, arg in opts: > if opt in ('-h', '--help'): > usage(0) > elif opt == '--cvsroot': > os.environ['CVSROOT'] = arg > > # What follows is the specification containing the files that were > # modified. The argument actually must be split, with the first component > # containing the directory the checkin is being made in, relative to > # $CVSROOT, followed by the list of files that are changing. > if not args: > usage(1, 'No CVS module specified') > SUBJECT = args[0] > specs = string.split(args[0]) > del args[0] > > # The remaining args should be the email addresses > if not args: > usage(1, 'No recipients specified') > > # Now do the mail command > PEOPLE = string.join(args) > mailcmd = MAILCMD % vars() > > print 'Mailing %s...' % PEOPLE > if specs == ['-', 'Imported', 'sources']: > return > if specs[-3:] == ['-', 'New', 'directory']: > del specs[-3:] > print 'Generating notification message...' > blast_mail(mailcmd, specs[1:]) > print 'Generating notification message... done.' > > > > if __name__ == '__main__': > main() > sys.exit(0) -- Curtis Olson Intelligent Vehicles Lab FlightGear Project Twin Cities [EMAIL PROTECTED] [EMAIL PROTECTED] Minnesota http://www.menet.umn.edu/~curt http://www.flightgear.org _______________________________________________ Flightgear-devel mailing list [EMAIL PROTECTED] http://mail.flightgear.org/mailman/listinfo/flightgear-devel