I handle the ins and outs of configuration for the Fresh CVS daemon. About the configuration file: By default I look for it in $CVSROOT/CVSROOT/freshCfg and expect to be able to run it as Python. The class ConfigurationSet and any action classes from actions.py will be in its global namespace. Example:: | set1 = ConfigurationSet([ | (None, '^Twisted', '\.py$', MailNotification(['commits@pythonic.org', | 'grease@pokey.fi'])) | (None, '^Teud', None, MailNotification(['teud-dev@pythonic.org'])) | ]) | | set2 = ConfigurationSet([ | (None, '.*twisted.*', None, None), | ('/usr/local/share/reposA', '^murdock', None, | CheckOut('/home/A-team/public_html/')), | ('/usr/local/share/reposA', None, None, | CheckOut('/usr/local/src/A/')), | ('/usr/local/share/reposB', None, None, | CheckOut('/usr/local/src/B/')), | (None, None, None, DebugAction("Funny repository!")) | ]) pbPortNumber and pbAuthorizer are other magic variables you can set in your config file, used by any PBServices you create. ConfigurationSet One collection of patterns and their resulting actions. A configuration set consists of a list of (root, path_regex, file_regex, action) tuples. This is an ordered list, and the *first* matching line wins. If you wish multiple actions to occour for a single event, use multiple configuration sets. 'root' is not a regex, but will match any if it is None. An action of None will be a no-op. Usage: ConfigurationSet(configlist=None) ---------- The pre-defined actions you may use are: Rsync Mirror the CVS repository with rsync. This mirrors the server repository, not a working copy. Usage: Rsync(destination) Constructor for rsyncing to a remote destination. 'destination' is a string user@host:path, such as you would use as a destination path with rsync. ---- DebugAction I dump crap to the log. Usage: DebugAction(foo='') You may supply a foo to appear in each message dumped. ---- PBService PB service to provide notification to remote agents. Usage: PBService(serviceName='cvstoys.notify', userpass=None) Initialize a service. The global variables pbPortNo and pbAuthorizer are also relevant. @param serviceName: The name of the PB service. If you make more than one service, each must have a unique name. @param userpass: If a (username, password) tuple is supplied here, an account will be created for it. ---- MailNotification I will send commit notifications by e-mail. I sing and dance and make diffs and URLs to ViewCVS. Please note that I am NOT a email list manager, nor do I intend to be. While I will send to multiple recipients, I suggest that you just set me to post to a mailing list, and thus maintain the list of recipients with your list server's interface. Usage: MailNotification(recipientList=None, viewcvs=None, replyTo=None, staticFrom=None) Send mail to these guys. @param recipientList: e-mail addresses to send to. @type recipientList: List of Strings @param viewcvs: base url of a ViewCVS web service to make references to. @type recipientList: string @param replyTo: Add a Reply-To address to the message headers. @type replyTo: string @param staticFrom: The From-address of all e-mails. If omitted or C{None}, use the username of the cvs user making the commit. @type staticFrom: string ---- Serial A list of actions which take place in serial. Usage: Serial(actionList) Made of a list of actions. ---- CheckOut I will keep a working copy of the repository up to date. Usage: CheckOut(working_root) Check it out. I take one argument -- the directory I will be placing checked out modules in. ---- ExecFile No doc. Usage: ExecFile(filename) ----