X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fexternal_overrides.py;h=40bdb80e67ac5ac7ff158d6daf422b68455f2cb5;hb=519c1dbf89c13557afc15a429164616ac563d379;hp=9e212061691004c55b5477ccc6637ef140edd438;hpb=94b406d8543e05b1d3233b7f0e0d104344378396;p=dak.git diff --git a/dak/external_overrides.py b/dak/external_overrides.py index 9e212061..40bdb80e 100755 --- a/dak/external_overrides.py +++ b/dak/external_overrides.py @@ -51,6 +51,48 @@ should be given as lines of the form 'PACKAGE KEY VALUE'. ############################################################################# +class ExternalOverrideReader(object): + """ + Parses an external override file + """ + def __init__(self, fh): + self.fh = fh + self.package = None + self.key = None + self.value = [] + + def _flush(self): + """ + Return the parsed line that is being built and start parsing a new line + """ + res = self.package, self.key, "\n".join(self.value) + self.package = self.key = None + self.value = [] + return res + + def __iter__(self): + """ + returns a (package, key, value) tuple for every entry in the external + override file + """ + for line in self.fh: + if not line: continue + if line[0] in (" ", "\t"): + # Continuation line + self.value.append(line.rstrip()) + else: + if self.package is not None: + yield self._flush() + + # New line + (self.package, self.key, value) = line.rstrip().split(None, 2) + self.value = [value] + + if self.package is not None: + yield self._flush() + +############################################################################# + def external_overrides_copy(from_suite_name, to_suite_name, force = False): session = DBConn().session() @@ -92,8 +134,7 @@ def external_overrides_import(suite_name, component_name, key, file, force = Fal session.query(ExternalOverride).filter_by(suite=suite,component=component,key=key).delete() - for line in file: - (package, key, value) = line.strip().split(None, 2) + for package, key, value in ExternalOverrideReader(file): eo = ExternalOverride() eo.suite = suite eo.component = component @@ -112,9 +153,9 @@ def main(): Arguments = [('h',"help","External-Overrides::Options::Help"), ('f','force','External-Overrides::Options::Force')] - args = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv) + args = apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv) try: - Options = cnf.SubTree("External-Overrides::Options") + Options = cnf.subtree("External-Overrides::Options") except KeyError: Options = {} @@ -125,7 +166,7 @@ def main(): if Options.has_key("Force") and Options["Force"]: force = True - logger = daklog.Logger(cnf, 'external-overrides') + logger = daklog.Logger('external-overrides') command = args[0] if command in ('import', 'i'):