Merge branch 'sk/gitweb-highlight-encoding' into HEAD
[git] / contrib / hooks / multimail / post-receive.example
1 #! /usr/bin/env python
2
3 """Example post-receive hook based on git-multimail.
4
5 The simplest way to use git-multimail is to use the script
6 git_multimail.py directly as a post-receive hook, and to configure it
7 using Git's configuration files and command-line parameters.  You can
8 also write your own Python wrapper for more advanced configurability,
9 using git_multimail.py as a Python module.
10
11 This script is a simple example of such a post-receive hook.  It is
12 intended to be customized before use; see the comments in the script
13 to help you get started.
14
15 Using git-multimail as a Python module as done here provides more
16 flexibility.  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
26 This script is a very basic example of how to use git_multimail.py as
27 a module.  The comments below explain some of the points at which the
28 script's behavior could be changed or customized.
29
30 """
31
32 import sys
33 import 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
43 import 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:
56 config = 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:
66 try:
67     environment = git_multimail.GenericEnvironment(config=config)
68     #environment = git_multimail.GitoliteEnvironment(config=config)
69 except 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:
75 mailer = 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:
101 git_multimail.run_as_post_receive_hook(environment, mailer)