summaryrefslogtreecommitdiff
path: root/importpkg.py
diff options
context:
space:
mode:
authorHelmut Grohne <helmut@subdivi.de>2013-07-17 16:27:08 +0200
committerHelmut Grohne <helmut@subdivi.de>2013-07-17 16:27:08 +0200
commited3e611cfc54b8c916e919701070bfd5c6770610 (patch)
treefe06694d5a2212c87a0d149eccb0f4cbb889a5cd /importpkg.py
parenta03daac99a237babcd874748d19fc0f809a1dc60 (diff)
parent6205c89b1e289f04dcea1e6e32fafa6357abf063 (diff)
downloaddebian-dedup-ed3e611cfc54b8c916e919701070bfd5c6770610.tar.gz
Merge branch master into sqlalchemy
This basically pulls the packageid branch into sqlalchemy. The merge was complex, because many sql statements diverged. The merge brings us one step closer to supporting postgres, because an "INSERT OR REPLACE" was removed from readyaml.py in the packageid branch. Conflicts: update_sharing.py webapp.py
Diffstat (limited to 'importpkg.py')
-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)