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)
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)