Beispiel #1
0
    def onfile(self, **kwargs):
        """
        Derives metadata from for a file from 101repo. Called when a file was
        added or changed, or if the entire repo is walked to re-derive all
        files.
        """
        self.cleandump(kwargs["relative"])
        units = []

        for value in self.rules:
            rule   = value["rule"]
            result = self.match(rule, **kwargs)
            if result is not None and "metadata" in rule:
                for metadata in tolist(rule["metadata"]):
                    result["metadata"] = metadata
                    units.append(result.copy())

        # TODO fix this dominator code
        keys     = []
        for unit in units:
            metadata = unit["metadata"]
            if "dominator" in metadata:
                keys.append(metadata["dominator"])
        removals = []
        for key in keys:
            for unit in units:
                metadata = unit["metadata"]
                if key in metadata \
                and ("dominator" not in metadata
                     or metadata["dominator"] != key):
                    removals.append(unit)
        survivals = []
        for unit in units:
            if not unit in removals:
                survivals.append(unit)
        units = survivals

        if units:
            incremental101.writejson(kwargs["target"], units)
            self.matches[kwargs["relative"]] = units
        else:
            incremental101.deletefile(kwargs["target"])
def doline(*args):
    inc.outstream = StringIO()
    inc.deletefile(*args)
    return inc.outstream.getvalue()
Beispiel #3
0
 def ondelete(self, target, relative, **kwargs):
     """
     Removes all traces of a deleted primary resource created by this phase.
     """
     incremental101.deletefile(target)
     self.cleandump(relative)