Alien-SVN
view release on metacpan or search on metacpan
src/subversion/tools/server-side/svnpubsub/irkerbridge.py view on Meta::CPAN
for section in self.config.sections():
irker = self.config.get(section, "irker")
to_list = self.config.get(section, "to").split()
if not irker or not to_list:
continue
for to in to_list:
msg = {'to': to, 'privmsg': ''}
self._send(irker, msg)
def commit(self, url, commit):
if self.options.verbose:
print "RECV: from %s" % url
print json.dumps(vars(commit), indent=2)
try:
config_sections = self.locate_matching_configs(commit)
if len(config_sections) > 0:
self.fill_in_extra_args(commit)
for section in config_sections:
irker = self.config.get(section, "irker")
to_list = self.config.get(section, "to").split()
template = self.config.get(section, "template")
if not irker or not to_list or not template:
continue
privmsg = Template(template).safe_substitute(vars(commit))
if len(privmsg) > MAX_PRIVMSG:
privmsg = privmsg[:MAX_PRIVMSG-3] + '...'
for to in to_list:
msg = {'to': to, 'privmsg': privmsg}
self._send(irker, msg)
except:
print "Unexpected error:"
traceback.print_exc()
sys.stdout.flush()
raise
def event(self, url, event_name, event_arg):
if self.options.verbose or event_name != "ping":
print 'EVENT: %s from %s' % (event_name, url)
sys.stdout.flush()
class ReloadableConfig(ConfigParser.SafeConfigParser):
def __init__(self, fname):
ConfigParser.SafeConfigParser.__init__(self)
self.fname = fname
self.read(fname)
signal.signal(signal.SIGHUP, self.hangup)
def hangup(self, signalnum, frame):
self.reload()
def reload(self):
print "RELOAD: config file: %s" % self.fname
sys.stdout.flush()
# Delete everything. Just re-reading would overlay, and would not
# remove sections/options. Note that [DEFAULT] will not be removed.
for section in self.sections():
self.remove_section(section)
# Get rid of [DEFAULT]
self.remove_section(ConfigParser.DEFAULTSECT)
# Now re-read the configuration file.
self.read(self.fname)
def get_value(self, which):
return self.get(ConfigParser.DEFAULTSECT, which)
def main(args):
parser = optparse.OptionParser(
description='An SvnPubSub client that bridges the data to irker.',
usage='Usage: %prog [options] CONFIG_FILE',
)
parser.add_option('--logfile',
help='filename for logging')
parser.add_option('--verbose', action='store_true',
help="enable verbose logging")
parser.add_option('--pidfile',
help="the process' PID will be written to this file")
parser.add_option('--daemon', action='store_true',
help='run as a background daemon')
options, extra = parser.parse_args(args)
if len(extra) != 1:
parser.error('CONFIG_FILE is requried')
config_file = os.path.abspath(extra[0])
logfile, pidfile = None, None
if options.daemon:
if options.logfile:
logfile = os.path.abspath(options.logfile)
else:
parser.error('LOGFILE is required when running as a daemon')
if options.pidfile:
pidfile = os.path.abspath(options.pidfile)
else:
parser.error('PIDFILE is required when running as a daemon')
config = ReloadableConfig(config_file)
bdec = BigDoEverythingClass(config, options)
d = Daemon(logfile, pidfile, bdec)
if options.daemon:
d.daemonize_exit()
else:
d.foreground()
if __name__ == "__main__":
main(sys.argv[1:])
( run in 1.049 second using v1.01-cache-2.11-cpan-13bb782fe5a )