summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-ximportpkg.py39
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)