sampledoc

Source code for Bcfg2.Server.Plugins.Cfg.CfgDiffFilter

""" Handle .diff files, which apply diffs to plaintext files """

import os
import tempfile
from Bcfg2.Server.Plugin import PluginExecutionError
from subprocess import Popen, PIPE
from Bcfg2.Server.Plugins.Cfg import CfgFilter


[docs]class CfgDiffFilter(CfgFilter): """ CfgDiffFilter applies diffs to plaintext :ref:`server-plugins-generators-Cfg` files """ #: Handle .diff files __extensions__ = ['diff'] #: .diff files are deprecated deprecated = True
[docs] def modify_data(self, entry, metadata, data): basehandle, basename = tempfile.mkstemp() open(basename, 'w').write(data) os.close(basehandle) cmd = ["patch", "-u", "-f", basename] patch = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) stderr = patch.communicate(input=self.data)[1] ret = patch.wait() output = open(basename, 'r').read() os.unlink(basename) if ret != 0: raise PluginExecutionError("Error applying diff %s: %s" % (self.name, stderr)) return output
modify_data.__doc__ = CfgFilter.modify_data.__doc__