contrib / hooks / multimail / post-receive.exampleon commit Merge branch 'jk/avoid-unbounded-alloca' (269085e)
   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# Set some Git configuration variables. Equivalent to passing var=val
  59# to "git -c var=val" each time git is called, or to adding the
  60# configuration in .git/config (must come before instanciating the
  61# environment) :
  62#git_multimail.Config.add_config_parameters('multimailhook.commitEmailFormat=html')
  63#git_multimail.Config.add_config_parameters(('user.name=foo', 'user.email=foo@example.com'))
  64
  65# Select the type of environment:
  66try:
  67    environment = git_multimail.GenericEnvironment(config=config)
  68    #environment = git_multimail.GitoliteEnvironment(config=config)
  69except git_multimail.ConfigurationException:
  70    sys.stderr.write('*** %s\n' % sys.exc_info()[1])
  71    sys.exit(1)
  72
  73
  74# Choose the method of sending emails based on the git config:
  75mailer = git_multimail.choose_mailer(config, environment)
  76
  77# Alternatively, you may hardcode the mailer using code like one of
  78# the following:
  79
  80# Use "/usr/sbin/sendmail -oi -t" to send emails.  The envelopesender
  81# argument is optional:
  82#mailer = git_multimail.SendMailer(
  83#    command=['/usr/sbin/sendmail', '-oi', '-t'],
  84#    envelopesender='git-repo@example.com',
  85#    )
  86
  87# Use Python's smtplib to send emails.  Both arguments are required.
  88#mailer = git_multimail.SMTPMailer(
  89#    envelopesender='git-repo@example.com',
  90#    # The smtpserver argument can also include a port number; e.g.,
  91#    #     smtpserver='mail.example.com:25'
  92#    smtpserver='mail.example.com',
  93#    )
  94
  95# OutputMailer is intended only for testing; it writes the emails to
  96# the specified file stream.
  97#mailer = git_multimail.OutputMailer(sys.stdout)
  98
  99
 100# Read changes from stdin and send notification emails:
 101git_multimail.run_as_post_receive_hook(environment, mailer)