diff options
author | Catalin Iacob <iacobcatalin@gmail.com> | 2012-08-06 22:15:24 +0200 |
---|---|---|
committer | Catalin Iacob <iacobcatalin@gmail.com> | 2012-08-06 22:15:24 +0200 |
commit | 6c4f45de554aa0fd57450960e7bb5e4a28613bff (patch) | |
tree | bcb53e294ca6a8c8927ed996382cfbf151433164 /zypper-etckeeper.py | |
parent | ee919b6c8ce8ba1c85c96fb5cf7c707ae8f21529 (diff) |
Add zypper plugin for openSUSE
This uses zypp_plugin, a Python helper for implementing the protocol
between zypper and plugins.
Diffstat (limited to 'zypper-etckeeper.py')
-rwxr-xr-x | zypper-etckeeper.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/zypper-etckeeper.py b/zypper-etckeeper.py new file mode 100755 index 0000000..b21f23d --- /dev/null +++ b/zypper-etckeeper.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python + +import errno +import subprocess +import zypp_plugin + + +def _call_etckeeper(install_arg): + # zypper interprets the plugin's stdout as described in + # http://doc.opensuse.org/projects/libzypp/HEAD/zypp-plugins.html so it's + # important that we don't write anything to it. We therefore redirect + # etckeeper's stdout to the plugin's stderr. Since zypper writes the + # stderr of plugins to its log file, etckeeper's stdout will go there as + # well. + + subprocess.call(['etckeeper', install_arg], stdout=2) + + +class EtckeeperPlugin(zypp_plugin.Plugin): + def PLUGINBEGIN(self, headers, body): + _call_etckeeper('pre-install') + self.ack() + + def PLUGINEND(self, headers, body): + try: + _call_etckeeper('post-install') + except OSError as e: + # if etckeeper was just removed, executing it will fail with + # ENOENT + if e.errno != errno.ENOENT: + # reraise so that we don't hide other errors than etckeeper + # not existing + raise + self.ack() + + +plugin = EtckeeperPlugin() +plugin.main() |