Aaron Griffin wrote:
On Thu, Jan 22, 2009 at 9:15 AM, Allan McRae <allan@archlinux.org> wrote:
Hi all,
A new feature I am ever so slightly obsessed about at the moment is the possibility of having hooks in pacman for doing common tasks in install files. e.g. adding info pages to directory, updating font/icon/.desktop cache, gconf stuff... So, how would this be implemented? Here is my outline:
Two types of hooks would be needed for both install and remove. One type that is run for every matching file (e.g. info install) and one type that is run once per transaction (e.g. font cache update). These could be stored in /etc/pacman.d/hooks/ with an index of hooks in /etc/pacman.d/hooks.conf. The .conf file could look something like:
[add] PerFile = infopage /usr/share/info/ PerTrans = fontcache /usr/share/fonts/
[remove] ...
That needs improvement, but that covers the information that needs presented - whether the hook is run per file or per transaction, the name of the hook and the directory whose files set off this hook. Maybe the conditions that set the hook off should be in the actual hook file.
I guess the actual hook would look look just like:
hook() { do stuff here... }
I figure we must already generate a list of all the files being added/removed during conflict checks, so we would "just" need to scan that list for what hooks need to be run and actually run them.
Anyway, I thought I would post this idea here so I could get more feedback on the implementation and maybe convince someone to code it...
This is much better than the ideas Dan and I fleshed out last time we talked about this. One or two nitpicks, though:
a) [add] and [remove] seem to simple. How about [AddHooks] and [RemoveHooks]? b) It'd be nice to use fnmatch patterns (globs) for the file paths. c) Instead of a function, it makes more sense to just make a script that takes the files as args, and only run it if it is executable (assume -x is disable) Other than that, I really like the PerFile and PerTrans distinction.
All good suggestions. I went for the function idea so I could reused code for running install scripts. I have never look at that code so I don't know whether that would be a good or bad idea. Thinking about this some more, per transaction hooks really only need ran per transaction... I.e. there is probably no need for the distinction within [AddHooks] of PerFile and PerTrans. All the examples I used for run once hook will look the same for both add and remove. Instead, we could have [AddHooks], [RemoveHooks] and [TransHooks].
Questions: Where will these hooks reside? /etc/pacman.d/hooks/ ?
Sure.
When modifying the config parsing, can you ensure 'Include' works here? That would allow us to ship some stock hooks for info files and the like, and users would simply include them.
Can you provide an example of what you think the config would look like. I have a fair guess at what you mean but clarification would be good. I will make a wiki page with config mock-ups and a few example hooks given this is probably the most important part to get right of the whole proposal. Allan