diff options
-rwxr-xr-x | importpkg.py | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/importpkg.py b/importpkg.py index 6e22b54..56e03ae 100755 --- a/importpkg.py +++ b/importpkg.py @@ -61,16 +61,31 @@ def get_hashes(tar): hashes[hashobj.name] = hashvalue yield (elem.name, elem.size, hashes) +def process_control(control_contents): + control = deb822.Packages(control_contents) + package = control["package"].encode("ascii") + try: + source = control["source"].encode("ascii").split()[0] + except KeyError: + source = package + version = control["version"].encode("ascii") + architecture = control["architecture"].encode("ascii") + + depends = set(dep[0]["name"].encode("ascii") + for dep in control.relations.get("depends", ()) + if len(dep) == 1) + return dict(package=package, source=source, version=version, + architecture=architecture, depends=depends) + def process_package(filelike): af = ArReader(filelike) af.read_magic() state = "start" - while state not in ("finished", "skipped"): + while True: try: name = af.read_entry() except EOFError: - if state != "finished": - raise ValueError("data.tar not found") + raise ValueError("data.tar not found") if name == "control.tar.gz": if state != "start": raise ValueError("unexpected control.tar.gz") @@ -82,21 +97,7 @@ def process_package(filelike): if state != "control": raise ValueError("duplicate control file") state = "control_file" - control = tf.extractfile(elem).read() - control = deb822.Packages(control) - package = control["package"].encode("ascii") - try: - source = control["source"].encode("ascii").split()[0] - except KeyError: - source = package - version = control["version"].encode("ascii") - architecture = control["architecture"].encode("ascii") - - depends = control.relations.get("depends", []) - depends = set(dep[0]["name"].encode("ascii") - for dep in depends if len(dep) == 1) - yield dict(package=package, source=source, version=version, - architecture=architecture, depends=depends) + yield process_control(tf.extractfile(elem).read()) break continue elif name == "data.tar.gz": @@ -117,8 +118,8 @@ def process_package(filelike): print("warning: skipping filename with encoding error") continue # skip files with non-utf8 encoding for now yield dict(name=name, size=size, hashes=hashes) - state = "finished" yield "commit" + break def main(): yaml.safe_dump_all(process_package(sys.stdin), sys.stdout) |