Mercurial > treepkg > treepkg
view treepkg/debian.py @ 166:61fd2892b80b
Add a function to sign a debian .dsc or .control file
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Fri, 20 Jun 2008 14:54:27 +0000 |
parents | 674d14305e97 |
children | 86ea689eda5f |
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): lines = [line.strip() for line in open(filename).readlines()] paragraphs = [] while lines: try: empty_line = lines.index("") except ValueError: empty_line = len(lines) paragraphs.append(lines[:empty_line]) lines = lines[empty_line + 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(","): 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)