diff options
author | Helmut Grohne <helmut@subdivi.de> | 2013-07-17 16:27:08 +0200 |
---|---|---|
committer | Helmut Grohne <helmut@subdivi.de> | 2013-07-17 16:27:08 +0200 |
commit | ed3e611cfc54b8c916e919701070bfd5c6770610 (patch) | |
tree | fe06694d5a2212c87a0d149eccb0f4cbb889a5cd /importpkg.py | |
parent | a03daac99a237babcd874748d19fc0f809a1dc60 (diff) | |
parent | 6205c89b1e289f04dcea1e6e32fafa6357abf063 (diff) | |
download | debian-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-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) |