| #!/bin/sh | |
| # | |
| # An example hook script to transform a patch taken from an email | |
| # by git am. | |
| # | |
| # The hook should exit with non-zero status after issuing an | |
| # appropriate message if it wants to stop the commit. The hook is | |
| # allowed to edit the patch file. | |
| # | |
| # To enable this hook, rename this file to "applypatch-transform". | |
| # | |
| # This example changes the path of Lib/unittest/mock.py to mock.py | |
| # Lib/unittest/tests/testmock to tests and Misc/NEWS to NEWS, and | |
| # finally skips any patches that did not alter mock.py or its tests. | |
| set -eux | |
| patch_path=$1 | |
| # Pull out mock.py | |
| filterdiff --clean --strip 3 --addprefix=a/mock/ -i 'a/Lib/unittest/mock.py' -i 'b/Lib/unittest/mock.py' $patch_path > $patch_path.mock | |
| # And the tests | |
| filterdiff --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 | |
| # Lastly we want to pick up any NEWS entries. | |
| filterdiff --strip 2 --addprefix=a/ -i a/Misc/NEWS -i b/Misc/NEWS $patch_path > $patch_path.NEWS | |
| cp $patch_path $patch_path.orig | |
| # bash | |
| cat $patch_path.mock $patch_path.tests > $patch_path | |
| filtered=$(cat $patch_path) | |
| if [ -n "${filtered}" ]; then | |
| cat $patch_path.NEWS >> $patch_path | |
| exitcode=0 | |
| else | |
| exitcode=1 | |
| fi | |
| rm $patch_path.mock $patch_path.tests $patch_path.NEWS | |
| exit $exitcode |