#! /usr/bin/env python2 """Example post-receive hook based on git-multimail. The simplest way to use git-multimail is to use the script git_multimail.py directly as a post-receive hook, and to configure it using Git's configuration files and command-line parameters. You can also write your own Python wrapper for more advanced configurability, using git_multimail.py as a Python module. This script is a simple example of such a post-receive hook. It is intended to be customized before use; see the comments in the script to help you get started. Using git-multimail as a Python module as done here provides more flexibility. It has the following advantages: * The tool's behavior can be customized using arbitrary Python code, without having to edit git_multimail.py. * Configuration settings can be read from other sources; for example, user names and email addresses could be read from LDAP or from a database. Or the settings can even be hardcoded in the importing Python script, if this is preferred. This script is a very basic example of how to use git_multimail.py as a module. The comments below explain some of the points at which the script's behavior could be changed or customized. """ import sys import os # If necessary, add the path to the directory containing # git_multimail.py to the Python path as follows. (This is not # necessary if git_multimail.py is in the same directory as this # script): #LIBDIR = 'path/to/directory/containing/module' #sys.path.insert(0, LIBDIR) import git_multimail # It is possible to modify the output templates here; e.g.: #git_multimail.FOOTER_TEMPLATE = """\ # #-- \n\ #This email was generated by the wonderful git-multimail tool. #""" # Specify which "git config" section contains the configuration for # git-multimail: config = git_multimail.Config('multimailhook') # Select the type of environment: try: environment = git_multimail.GenericEnvironment(config=config) #environment = git_multimail.GitoliteEnvironment(config=config) except git_multimail.ConfigurationException, e: sys.exit(str(e)) # Choose the method of sending emails based on the git config: mailer = git_multimail.choose_mailer(config, environment) # Alternatively, you may hardcode the mailer using code like one of # the following: # Use "/usr/sbin/sendmail -oi -t" to send emails. The envelopesender # argument is optional: #mailer = git_multimail.SendMailer( # command=['/usr/sbin/sendmail', '-oi', '-t'], # envelopesender='git-repo@example.com', # ) # Use Python's smtplib to send emails. Both arguments are required. #mailer = git_multimail.SMTPMailer( # envelopesender='git-repo@example.com', # # The smtpserver argument can also include a port number; e.g., # # smtpserver='mail.example.com:25' # smtpserver='mail.example.com', # ) # OutputMailer is intended only for testing; it writes the emails to # the specified file stream. #mailer = git_multimail.OutputMailer(sys.stdout) # Read changes from stdin and send notification emails: git_multimail.run_as_post_receive_hook(environment, mailer)