import os
import sys
import argparse
+import ConfigParser
-def get_logger(appname, debug=False):
- """Set up syslog logger."""
- logger = logging.getLogger(appname)
- logger.setLevel(logging.DEBUG)
- formatter = logging.Formatter("%(name)s: %(levelname)s %(message)s")
- if debug:
- handler = logging.StreamHandler()
- else:
- if sys.platform == 'darwin':
- syslog_socket = "/var/run/syslog"
- else:
- syslog_socket = "/dev/log"
- handler = handlers.SysLogHandler(syslog_socket)
- handler.setFormatter(formatter)
- logger.addHandler(handler)
- return logger
+from misc import find_config, configure_logging, daemonize
+from pkg_resources import iter_entry_points
def parse_cmdline(argv):
"""Parse hook command line parameters."""
parser = argparse.ArgumentParser(
description="Gerrit patchset-created hook")
args = (
- "--change", # <change id>
- "--is-draft", # <boolean>
- "--change-url", # <change url>
- "--project", # <project name>
- "--branch", # <branch>
- "--topic", # <topic>
- "--uploader", # <uploader>
- "--commit", # <sha1>
- "--patchset" #<patchset id>
- )
+ "--change", # <change id>
+ "--is-draft", # <boolean>
+ "--change-url", # <change url>
+ "--project", # <project name>
+ "--branch", # <branch>
+ "--topic", # <topic>
+ "--uploader", # <uploader>
+ "--commit", # <sha1>
+ "--patchset" # <patchset id>
+ )
for arg in args:
parser.add_argument(arg)
parser.add_argument("-d", "--debug", action="store_true")
params = parse_cmdline(sys.argv[1:])
# set up logger
- logger = get_logger(os.path.basename(argv[0]), params.debug)
+ logger = configure_logging(os.path.basename(sys.argv[0]))
- logger.warning("processing project %s : branch %s, commit %s, change: %s (draft: %s url: %s) topic: %s uploader: %s patchset: %s",
+
+ logger.info("patchset-created: project %s : branch %s, commit %s, change: "\
+ "%s (draft: %s url: %s) topic: %s uploader: %s patchset: %s",
params.project, params.branch, params.commit, params.change,
params.is_draft, params.change_url, params.topic,
params.uploader, params.patchset)
if not params.debug:
+ logger.debug("Daemonizing...")
daemonize()
+ logger.debug("looking for config")
+ confname = "gerrit-hooks.conf"
+ conf = find_config(confname, subdir="gerrit-hooks")
+ if not conf:
+ logger.error("Log configuration file %s not found or not readable" \
+ % confname)
+ return 1
+
+ # read rules from configuration file
+ config = ConfigParser.RawConfigParser()
+ config.optionxform = str
+
+ logger.debug("main: reading config from %s", conf)
+ config.read(conf)
+
+ entry_point_group = "gerrit-hooks"
+ logger.debug("main: looking for plugins in entry %s" % entry_point_group)
+
+ for entry_point in iter_entry_points(group=entry_point_group, name="patchset-created"):
+ logger.debug("Loading plugin %s from %s" %
+ (entry_point.name, entry_point.module))
+ plugin = entry_point.load()
+ logger.debug("Executing plugin %s" % entry_point.name)
+ plugin(params=params, config=config)
logger.info("done")
return 0
if __name__ == "__main__":
- sys.exit(main(sys.argv))
+ sys.exit(main())
name = "gerrit-hooks",
version = "0.1.0",
packages = find_packages(),
- include_package_data=True,
license = "GPLv2",
description = "Collection of useful hooks for Gerrit",
long_description = README,
# url = "http://",
+ include_package_data=True,
+ data_files=[("/etc/gerrit-hooks", ["gerrit-hooks.conf", "gerrit-hooks-log.conf"])],
author = "Alexander Kanevskiy",
author_email = "alexander.kanevskiy@intel.com",
keywords = "gerrit hooks",
#'comment-added'
#'draft-published'
#'merge-failed'
- 'patchset-created = gerrithooks.patchset_created:main',
+ 'gerrit-patchset-created = gerrithooks.patchset_created:main',
+ # 'ref-update'
#'ref-updated'
#'reviewer-added'
]