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