sampledoc

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

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


class CfgDiffFilter(CfgFilter):
    """ CfgDiffFilter applies diffs to plaintext
[docs] :ref:`server-plugins-generators-Cfg` files """ #: Handle .diff files __extensions__ = ['diff'] #: .diff files are deprecated deprecated = True def modify_data(self, entry, metadata, data): basehandle, basename = tempfile.mkstemp()
[docs] 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__