diff options
author | Laurent Bachelier <laurent@bachelier.name> | 2010-07-10 14:46:48 +0200 |
---|---|---|
committer | Laurent Bachelier <laurent@bachelier.name> | 2010-07-10 14:46:48 +0200 |
commit | 03a6d1dcc5e0d7795aa1f48025c3ccfcdb827269 (patch) | |
tree | 008be9af8637b77a7a051221b99ed605069c6fc8 | |
parent | Bugfixes for TextAction (diff) | |
download | confman-03a6d1dcc5e0d7795aa1f48025c3ccfcdb827269.tar.xz |
Fix CopyAction, add CopyOnceAction
And now EmptyAction is based on CopyOnceAction.
-rw-r--r-- | confman.py | 80 | ||||
-rw-r--r-- | samples/copyfileonce.copyonce | 1 |
2 files changed, 43 insertions, 38 deletions
@@ -112,40 +112,9 @@ class SymlinkAction(Action): print "Created new link: "+dest+" => "+source -class EmptyAction(Action): - """ - Ensures the destination file exists. - Creates an empty one if not. - TODO it should be a CopyAction with a "do not erase" parameter - """ - matched = re.compile("\.empty$") - - @classmethod - def matches(cls, filename): - if cls.matched.search(filename): - return cls.matched.sub("", filename) - return False - - def check(self): - pass - - def sync(self): - dest = self.dest_path() - # if the file does not exist - if not osp.exists(dest): - # but it's a broken link - if osp.islink(dest): - raise ActionException(self, "Destination is a broken link") - else: - self._makedirs() - with open(dest, "w") as destfile: - print "Created new empty file: "+destfile.name - - def __repr__(self): - return self.__class__.__name__+": EMPTY => "+self.dest - - class TextAction(Action): + once = False + def check(self): """ This action can't be invoked by a file; @@ -161,16 +130,19 @@ class TextAction(Action): Write the file only if necessary """ dest = self.dest_path() + exists = osp.exists(dest) if osp.islink(dest): raise ActionException(self, "Destination is a link") else: self._makedirs() with open(dest, "a+") as destfile: if destfile.read() != self.text: - print "Updated file contents: "+dest - destfile.truncate(0) - destfile.write(self.text) - + if exists and self.once: + print "File already exists, not updated: "+dest + else: + print "Updated file contents: "+dest + destfile.truncate(0) + destfile.write(self.text) def __repr__(self): return self.__class__.__name__+": TEXT => "+self.dest @@ -185,7 +157,7 @@ class CopyAction(TextAction): return cls.matched.sub("", filename) return False - def text(self): + def check(self): """ Retrieve the text from the source file """ @@ -194,6 +166,37 @@ class CopyAction(TextAction): self.text = sourcefile.read() +class CopyOnceAction(CopyAction): + once = True + matched = re.compile("\.copyonce$") + + @classmethod + def matches(cls, filename): + if cls.matched.search(filename): + return cls.matched.sub("", filename) + return False + + +class EmptyAction(CopyOnceAction): + """ + Ensures the destination file exists. + Creates an empty one if not. + """ + matched = re.compile("\.empty$") + + @classmethod + def matches(cls, filename): + if cls.matched.search(filename): + return cls.matched.sub("", filename) + return False + + def check(self): + self.text = "" + + def __repr__(self): + return self.__class__.__name__+": EMPTY => "+self.dest + + class Forwarder(Exception): def get_proxy(self, parent): raise NotImplementedError() @@ -319,6 +322,7 @@ class ConfigSource(object): IgnoreAction, EmptyAction, CopyAction, + CopyOnceAction, SymlinkAction, ] diff --git a/samples/copyfileonce.copyonce b/samples/copyfileonce.copyonce new file mode 100644 index 0000000..ce01362 --- /dev/null +++ b/samples/copyfileonce.copyonce @@ -0,0 +1 @@ +hello |