• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2#
3# An example hook script to transform a patch taken from an email
4# by git am.
5#
6# The hook should exit with non-zero status after issuing an
7# appropriate message if it wants to stop the commit.  The hook is
8# allowed to edit the patch file.
9#
10# To enable this hook, rename this file to "applypatch-transform".
11#
12# This example changes the path of Lib/unittest/mock.py to mock.py
13# Lib/unittest/tests/testmock to tests and Misc/NEWS to NEWS, and
14# finally skips any patches that did not alter mock.py or its tests.
15
16set -eux
17
18patch_path=$1
19
20# Pull out mock.py
21filterdiff --clean --strip 3 --addprefix=a/mock/ -i 'a/Lib/unittest/mock.py' -i 'b/Lib/unittest/mock.py' $patch_path > $patch_path.mock
22# And the tests
23filterdiff --clean --strip 5 --addprefix=a/mock/tests/ -i 'a/Lib/unittest/test/testmock/*.py' -i 'b/Lib/unittest/test/testmock/*.py' $patch_path > $patch_path.tests
24# Lastly we want to pick up any NEWS entries.
25filterdiff --strip 2 --addprefix=a/ -i a/Misc/NEWS -i b/Misc/NEWS $patch_path > $patch_path.NEWS
26cp $patch_path $patch_path.orig
27# bash
28cat $patch_path.mock $patch_path.tests > $patch_path
29filtered=$(cat $patch_path)
30if [ -n "${filtered}" ]; then
31  cat $patch_path.NEWS >> $patch_path
32  exitcode=0
33else
34  exitcode=1
35fi
36
37rm $patch_path.mock $patch_path.tests $patch_path.NEWS
38exit $exitcode
39