patchset-created draft
authorAlexander Kanevskiy <alexander.kanevskiy@intel.com>
Mon, 12 Aug 2013 21:46:58 +0000 (00:46 +0300)
committerAlexander Kanevskiy <alexander.kanevskiy@intel.com>
Mon, 12 Aug 2013 21:46:58 +0000 (00:46 +0300)
gerrithooks/patchset_created.py
setup.py

index 8d03bcc4da43d3523a4c1cbc684d44cfa962702c..d4b81757d5425c979a3a01f8095f95cc6b82127f 100644 (file)
 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")
@@ -64,19 +51,46 @@ def main():
     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())
index 5a060ce25ccc9c76941939af10118aa524fb56f3..308887f650a2bf4a644ec9bcd59d85b2fc3c9ebf 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -14,11 +14,12 @@ setup (
     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",
@@ -32,7 +33,8 @@ setup (
                     #'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'
                 ]