10
DEB_PACKAGE = 1 << 16 | PACKAGE
11
DEB_PROVIDES = 2 << 16 | PROVIDES
12
DEB_NAME_PROVIDES = 3 << 16 | PROVIDES
13
DEB_REQUIRES = 4 << 16 | REQUIRES
14
DEB_OR_REQUIRES = 5 << 16 | REQUIRES
15
DEB_UPGRADES = 6 << 16 | UPGRADES
16
DEB_CONFLICTS = 7 << 16 | CONFLICTS
19
class PackageTypeError(Exception):
20
"""Raised when an unsupported package type is passed to build_skeleton."""
23
class PackageSkeleton(object):
31
def __init__(self, type, name, version):
34
self.version = version
37
def add_relation(self, type, info):
38
self.relations.append((type, info))
41
digest = sha.new("[%d %s %s]" % (self.type, self.name, self.version))
43
for pair in self.relations:
44
digest.update("[%d %s]" % pair)
45
return digest.digest()
48
def build_skeleton(pkg, with_info=False):
49
if not build_skeleton.inited:
50
build_skeleton.inited = True
51
global DebPackage, DebNameProvides, DebOrDepends
53
# Importing from backends depends on smart.init().
54
from smart.backends.deb.base import (
55
DebPackage, DebNameProvides, DebOrDepends)
57
if not isinstance(pkg, DebPackage):
58
raise PackageTypeError()
60
skeleton = PackageSkeleton(DEB_PACKAGE, pkg.name, pkg.version)
62
for relation in pkg.provides:
63
if isinstance(relation, DebNameProvides):
64
relations.add((DEB_NAME_PROVIDES, str(relation)))
66
relations.add((DEB_PROVIDES, str(relation)))
67
for relation in pkg.requires:
68
if isinstance(relation, DebOrDepends):
69
relations.add((DEB_OR_REQUIRES, str(relation)))
71
relations.add((DEB_REQUIRES, str(relation)))
72
for relation in pkg.upgrades:
73
relations.add((DEB_UPGRADES, str(relation)))
74
for relation in pkg.conflicts:
75
relations.add((DEB_CONFLICTS, str(relation)))
77
skeleton.relations = sorted(relations)
80
info = pkg.loaders.keys()[0].getInfo(pkg)
81
skeleton.section = info.getGroup()
82
skeleton.summary = info.getSummary()
83
skeleton.description = info.getDescription()
84
skeleton.size = sum(info.getSize(url) for url in info.getURLs())
85
skeleton.installed_size = info.getInstalledSize()
89
build_skeleton.inited = False