Merge branch 'ab/receive-pack-use-after-free-fix'
[git/git.git] / contrib / hooks / multimail / post-receive.example
CommitLineData
4b1fd356 1#! /usr/bin/env python
bc501f69
MH
2
3"""Example post-receive hook based on git-multimail.
4
5b1d901c
MM
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.
bc501f69 10
5b1d901c
MM
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:
bc501f69
MH
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
bc501f69
MH
33
34# If necessary, add the path to the directory containing
35# git_multimail.py to the Python path as follows. (This is not
36# necessary if git_multimail.py is in the same directory as this
37# script):
38
39#LIBDIR = 'path/to/directory/containing/module'
40#sys.path.insert(0, LIBDIR)
41
42import git_multimail
43
bc501f69
MH
44# It is possible to modify the output templates here; e.g.:
45
46#git_multimail.FOOTER_TEMPLATE = """\
47#
48#-- \n\
49#This email was generated by the wonderful git-multimail tool.
50#"""
51
52
53# Specify which "git config" section contains the configuration for
54# git-multimail:
55config = git_multimail.Config('multimailhook')
56
4453d76c
MM
57# Set some Git configuration variables. Equivalent to passing var=val
58# to "git -c var=val" each time git is called, or to adding the
59# configuration in .git/config (must come before instanciating the
60# environment) :
61#git_multimail.Config.add_config_parameters('multimailhook.commitEmailFormat=html')
62#git_multimail.Config.add_config_parameters(('user.name=foo', 'user.email=foo@example.com'))
bc501f69
MH
63
64# Select the type of environment:
5b1d901c
MM
65try:
66 environment = git_multimail.GenericEnvironment(config=config)
67 #environment = git_multimail.GitoliteEnvironment(config=config)
4b1fd356
MM
68except git_multimail.ConfigurationException:
69 sys.stderr.write('*** %s\n' % sys.exc_info()[1])
70 sys.exit(1)
bc501f69
MH
71
72
73# Choose the method of sending emails based on the git config:
74mailer = git_multimail.choose_mailer(config, environment)
75
76# Alternatively, you may hardcode the mailer using code like one of
77# the following:
78
b513f71f 79# Use "/usr/sbin/sendmail -oi -t" to send emails. The envelopesender
bc501f69
MH
80# argument is optional:
81#mailer = git_multimail.SendMailer(
b513f71f 82# command=['/usr/sbin/sendmail', '-oi', '-t'],
bc501f69
MH
83# envelopesender='git-repo@example.com',
84# )
85
86# Use Python's smtplib to send emails. Both arguments are required.
87#mailer = git_multimail.SMTPMailer(
99177b34 88# environment=environment,
bc501f69
MH
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)