Mercurial > treepkg > treepkg
view treepkg/debian.py @ 565:7de7869962ef
Correct syntax and display abspath of config file
author | Bjoern Ricks <bricks@intevation.de> |
---|---|
date | Fri, 02 Sep 2011 10:30:52 +0000 |
parents | 27eccce96949 |
children |
line wrap: on
line source
# Copyright (C) 2007, 2008 by Intevation GmbH # Authors: # Bernhard Herzog <bh@intevation.de> # # This program is free software under the GPL (>=v2) # Read the file COPYING coming with the software for details. """Support code for debian packages""" import os from treepkg.util import extract_value_for_key import treepkg.run class DebianControlFile(object): """Parses a debian/control file and makes some of it available. Instances have the following instance variables: packages -- A list of the names of all packages defined in the control file build_depends -- A list with the names of all package listed as Build-Depends. """ def __init__(self, filename): """Initialize the instance from a file given by filename""" self.packages = [] self.build_depends = [] self.parse(filename) def parse(self, filename): paragraph = [] paragraphs = [paragraph] for lineno, line in enumerate(open(filename)): stripped = line.strip() if stripped.startswith("#"): continue if not stripped: if paragraph: paragraph = [] paragraphs.append(paragraph) else: if line[:1] in " \t": # handle continuation line if paragraph: paragraph[-1] += " " + stripped else: raise RuntimeError("%s:%d: Continuation line without" " preceding line" % (filename, lineno)) else: paragraph.append(stripped) if not paragraphs[-1]: del paragraphs[-1] self.handle_source_paragraph(paragraphs[0]) for paragraph in paragraphs[1:]: self.handle_package_paragraph(paragraph) def handle_source_paragraph(self, paragraph): raw_deps = extract_value_for_key(paragraph, "Build-Depends:") for dep in raw_deps.split(","): # sanity check if dep.strip() != "": self.build_depends.append(dep.split()[0]) def handle_package_paragraph(self, paragraph): package_name = extract_value_for_key(paragraph, "Package:") arch = extract_value_for_key(paragraph, "Architecture:") self.packages.append((package_name, arch)) def sign_file(filename, keyid): """Signs a debian .dsc or .control file""" contents = open(filename).read() # make sure contents ends with an empty line. The signed files have # to have an empty line before the OpenPGP signature block if not contents.endswith("\n"): contents += "\n" contents += "\n" asc_file = filename + ".asc" treepkg.run.call(["gpg", "--clearsign", "--armor", "--textmode", "--local-user", keyid, "-o", asc_file, "-"], inputdata=contents, suppress_output=True) os.rename(asc_file, filename)