User:Allan/Pacman Hooks - Version 2

From ArchWiki
< User:Allan
Revision as of 16:51, 7 September 2012 by Brain0 (Talk | contribs) (Hook actions)

Jump to: navigation, search

This is a new draft, look at the old propsal for previous discussions.

The Idea

Short Version: Pacman should have hooks to perform common tasks.

Long Version: Many packages have install files that perform a common task; e.g. adding/removing info files in the info directory file, installing/uninstalling gconf schemas, updating the font/desktop/icon cache. It would be good if pacman was extendible through a hooks mechanism so that these could be handled automatically.

Hook structure

Hook triggers

Each hook would have a "trigger" file. This file should be in a well-known config file format, preferably an ini-file. For avoiding conflicts with .pacorig, .pacnew or .pacsave files, all trigger files should end with .trigger. These triggers can be either put int /usr/lib/pacman/hooks/triggers/ or /etc/pacman.d/hooks/triggers/. Similar to udev or systemd, a file in /etc/pacman.d/hooks/triggers/ will override a file in /usr/lib/pacman/hooks/triggers/ of the same name - an empty file will disable the trigger.

Pacman transactions

All hook triggers are read at the beginning of the transaction. If a new trigger is added during the transaction, it is parsed and added, and will be valid for the current and all subsequent packages. Applicability to the current package may be limited.

Trigger types

Hook actions

Each hook .trigger file contains an
Template error: are you trying to use the = sign? Visit Help:Template#Escape template-breaking characters for workarounds.
statement. If the argument is an absolute path, the executable at that path is executed. Otherwise, the binary /etc/pacman.d/hooks/actions/$arg is executed. If that doesn't exist /usr/lib/pacman/hooks/actions/$arg is executed.