= Changes since v2 = * separate INSTALL/UPGRADE trigger types * triggers can contain multiple operation fields * allow Exec fields to contain arguments (as well as a few shell features courtesy of wordexp(3)) * tests * make system hook directory relative to datarootdir * improved documentation * removed example hooks, they can still be found at: https://github.com/andrewgregory/libalpm-hooks = TODO (deferred) = * status output * run order * pass triggering package(s)/file(s) to hook = Trigger Matching = The new install/upgrade/remove filtering to support separate install/upgrade triggers requires building complete lists of all files being installed and removed and comparing them to each other to determine the actual final disposition of all files. Given the new additional complexity, I have removed some of the optimizations from the previous version. I never benchmarked the previous version, so I don't know how much of a performance hit this was, but in the tests I ran this is still fast enough that I'm not inclined to try to add them back just yet. With a transaction that included 682 packages and ~150,000 files, a hook with a single '*' file trigger matched its targets and ran in ~0.15s. Andrew Gregory (11): handle: add hookdirs option add hook data types and parser run hooks during trans_commit validate hooks after parsing pacman: add user hook directories pactest: use pacman --hookdir option util.py: return the created path pactest: add hook/script support add hook tests add alpm-hooks man page allow arguments in hook Exec fields doc/.gitignore | 1 + doc/Makefile.am | 4 + doc/alpm-hooks.5.txt | 117 +++++ doc/pacman.conf.5.txt | 8 + lib/libalpm/Makefile.am | 3 + lib/libalpm/alpm.c | 5 + lib/libalpm/alpm.h | 10 + lib/libalpm/error.c | 2 + lib/libalpm/handle.c | 59 +++ lib/libalpm/handle.h | 1 + lib/libalpm/hook.c | 504 +++++++++++++++++++++ lib/libalpm/hook.h | 34 ++ lib/libalpm/ini.c | 1 + lib/libalpm/ini.h | 1 + lib/libalpm/trans.c | 6 + src/pacman/Makefile.am | 2 + src/pacman/conf.c | 22 + src/pacman/conf.h | 2 + src/pacman/pacman.c | 10 + test/pacman/pmfile.py | 27 +- test/pacman/pmpkg.py | 3 +- test/pacman/pmtest.py | 30 +- test/pacman/tests/TESTS | 10 + test/pacman/tests/hook-abortonfail.py | 25 + test/pacman/tests/hook-exec-with-arguments.py | 22 + test/pacman/tests/hook-file-change-packages.py | 32 ++ .../pacman/tests/hook-file-remove-trigger-match.py | 24 + test/pacman/tests/hook-file-upgrade-nomatch.py | 27 ++ test/pacman/tests/hook-invalid-trigger.py | 25 + .../pacman/tests/hook-pkg-install-trigger-match.py | 23 + test/pacman/tests/hook-pkg-remove-trigger-match.py | 23 + .../pacman/tests/hook-pkg-upgrade-trigger-match.py | 26 ++ test/pacman/tests/hook-upgrade-trigger-no-match.py | 23 + test/pacman/util.py | 5 +- 34 files changed, 1107 insertions(+), 10 deletions(-) create mode 100644 doc/alpm-hooks.5.txt create mode 100644 lib/libalpm/hook.c create mode 100644 lib/libalpm/hook.h create mode 120000 lib/libalpm/ini.c create mode 120000 lib/libalpm/ini.h create mode 100644 test/pacman/tests/hook-abortonfail.py create mode 100644 test/pacman/tests/hook-exec-with-arguments.py create mode 100644 test/pacman/tests/hook-file-change-packages.py create mode 100644 test/pacman/tests/hook-file-remove-trigger-match.py create mode 100644 test/pacman/tests/hook-file-upgrade-nomatch.py create mode 100644 test/pacman/tests/hook-invalid-trigger.py create mode 100644 test/pacman/tests/hook-pkg-install-trigger-match.py create mode 100644 test/pacman/tests/hook-pkg-remove-trigger-match.py create mode 100644 test/pacman/tests/hook-pkg-upgrade-trigger-match.py create mode 100644 test/pacman/tests/hook-upgrade-trigger-no-match.py -- 2.6.1