1#! /usr/bin/env python 2 3"""Example post-receive hook based on git-multimail. 4 5The simplest way to use git-multimail is to use the script 6git_multimail.py directly as a post-receive hook, and to configure it 7using Git's configuration files and command-line parameters. You can 8also write your own Python wrapper for more advanced configurability, 9using git_multimail.py as a Python module. 10 11This script is a simple example of such a post-receive hook. It is 12intended to be customized before use; see the comments in the script 13to help you get started. 14 15Using git-multimail as a Python module as done here provides more 16flexibility. It has the following advantages: 17 18* The tool's behavior can be customized using arbitrary Python code, 19 without having to edit git_multimail.py. 20 21* Configuration settings can be read from other sources; for example, 22 user names and email addresses could be read from LDAP or from a 23 database. Or the settings can even be hardcoded in the importing 24 Python script, if this is preferred. 25 26This script is a very basic example of how to use git_multimail.py as 27a module. The comments below explain some of the points at which the 28script's behavior could be changed or customized. 29 30""" 31 32import sys 33import os 34 35# If necessary, add the path to the directory containing 36# git_multimail.py to the Python path as follows. (This is not 37# necessary if git_multimail.py is in the same directory as this 38# script): 39 40#LIBDIR = 'path/to/directory/containing/module' 41#sys.path.insert(0, LIBDIR) 42 43import git_multimail 44 45# It is possible to modify the output templates here; e.g.: 46 47#git_multimail.FOOTER_TEMPLATE = """\ 48# 49#-- \n\ 50#This email was generated by the wonderful git-multimail tool. 51#""" 52 53 54# Specify which "git config" section contains the configuration for 55# git-multimail: 56config = git_multimail.Config('multimailhook') 57 58 59# Select the type of environment: 60try: 61 environment = git_multimail.GenericEnvironment(config=config) 62#environment = git_multimail.GitoliteEnvironment(config=config) 63except git_multimail.ConfigurationException: 64 sys.stderr.write('***%s\n'% sys.exc_info()[1]) 65 sys.exit(1) 66 67 68# Choose the method of sending emails based on the git config: 69mailer = git_multimail.choose_mailer(config, environment) 70 71# Alternatively, you may hardcode the mailer using code like one of 72# the following: 73 74# Use "/usr/sbin/sendmail -oi -t" to send emails. The envelopesender 75# argument is optional: 76#mailer = git_multimail.SendMailer( 77# command=['/usr/sbin/sendmail', '-oi', '-t'], 78# envelopesender='git-repo@example.com', 79# ) 80 81# Use Python's smtplib to send emails. Both arguments are required. 82#mailer = git_multimail.SMTPMailer( 83# envelopesender='git-repo@example.com', 84# # The smtpserver argument can also include a port number; e.g., 85# # smtpserver='mail.example.com:25' 86# smtpserver='mail.example.com', 87# ) 88 89# OutputMailer is intended only for testing; it writes the emails to 90# the specified file stream. 91#mailer = git_multimail.OutputMailer(sys.stdout) 92 93 94# Read changes from stdin and send notification emails: 95git_multimail.run_as_post_receive_hook(environment, mailer)