101 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #! /usr/bin/env python
 | |
| 
 | |
| """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
 | |
| 
 | |
| # 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')
 | |
| 
 | |
| # Set some Git configuration variables. Equivalent to passing var=val
 | |
| # to "git -c var=val" each time git is called, or to adding the
 | |
| # configuration in .git/config (must come before instantiating the
 | |
| # environment) :
 | |
| #git_multimail.Config.add_config_parameters('multimailhook.commitEmailFormat=html')
 | |
| #git_multimail.Config.add_config_parameters(('user.name=foo', 'user.email=foo@example.com'))
 | |
| 
 | |
| # Select the type of environment:
 | |
| try:
 | |
|     environment = git_multimail.GenericEnvironment(config=config)
 | |
|     #environment = git_multimail.GitoliteEnvironment(config=config)
 | |
| except git_multimail.ConfigurationException:
 | |
|     sys.stderr.write('*** %s\n' % sys.exc_info()[1])
 | |
|     sys.exit(1)
 | |
| 
 | |
| 
 | |
| # 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(
 | |
| #    environment=environment,
 | |
| #    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)
 |