]> git.ipfire.org Git - people/stevee/pakfire.git/blob - src/pakfire/repository/index.py
Use autotools.
[people/stevee/pakfire.git] / src / pakfire / repository / index.py
1 #!/usr/bin/python
2 ###############################################################################
3 # #
4 # Pakfire - The IPFire package management system #
5 # Copyright (C) 2011 Pakfire development team #
6 # #
7 # This program is free software: you can redistribute it and/or modify #
8 # it under the terms of the GNU General Public License as published by #
9 # the Free Software Foundation, either version 3 of the License, or #
10 # (at your option) any later version. #
11 # #
12 # This program is distributed in the hope that it will be useful, #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15 # GNU General Public License for more details. #
16 # #
17 # You should have received a copy of the GNU General Public License #
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
19 # #
20 ###############################################################################
21
22 import os
23
24 import logging
25 log = logging.getLogger("pakfire")
26
27 import pakfire.packages as packages
28 import pakfire.satsolver as satsolver
29
30 class Index(object):
31 """
32 Wraps around the solvable index in the memory.
33 """
34
35 def __init__(self, pakfire, repo):
36 self.pakfire = pakfire
37
38 # Create reference to repository and the solver repo.
39 self.repo = repo
40 self.solver_repo = repo.solver_repo
41
42 def __repr__(self):
43 return "<%s %s>" % (self.__class__.__name__, self.repo)
44
45 def __del__(self):
46 self.clear()
47
48 def read(self, filename):
49 """
50 Read file in SOLV format from filename.
51 """
52 self.solver_repo.read(filename)
53
54 def write(self, filename):
55 """
56 Write content to filename in SOLV format.
57 """
58 self.solver_repo.write(filename)
59
60 def optimize(self):
61 """
62 Optimize the index.
63 """
64 self.solver_repo.internalize()
65
66 def add_package(self, pkg):
67 log.debug("Adding package to index %s: %s" % (self, pkg))
68
69 solvable = satsolver.Solvable(self.solver_repo, pkg.name,
70 pkg.friendly_version, pkg.arch)
71
72 assert pkg.uuid
73 solvable.set_uuid(pkg.uuid)
74
75 hash1 = pkg.hash1
76 assert hash1
77 solvable.set_hash1(hash1)
78
79 # Save metadata.
80 if pkg.vendor:
81 solvable.set_vendor(pkg.vendor)
82
83 if pkg.maintainer:
84 solvable.set_maintainer(pkg.maintainer)
85
86 if pkg.groups:
87 solvable.set_groups(" ".join(pkg.groups))
88
89 # Save upstream information (summary, description, license, url).
90 if pkg.summary:
91 solvable.set_summary(pkg.summary)
92
93 if pkg.description:
94 solvable.set_description(pkg.description)
95
96 if pkg.license:
97 solvable.set_license(pkg.license)
98
99 if pkg.url:
100 solvable.set_url(pkg.url)
101
102 # Save build information.
103 if pkg.build_host:
104 solvable.set_buildhost(pkg.build_host)
105
106 if pkg.build_time:
107 solvable.set_buildtime(pkg.build_time)
108
109 # Save filename.
110 filename = os.path.basename(pkg.filename)
111 assert filename
112 solvable.set_filename(filename)
113
114 solvable.set_downloadsize(pkg.size)
115 solvable.set_installsize(pkg.inst_size)
116
117 # Import all requires.
118 requires = pkg.requires
119 prerequires = pkg.prerequires
120 if prerequires:
121 requires.append("solvable:prereqmarker")
122 requires += prerequires
123
124 for req in requires:
125 rel = self.pakfire.pool.create_relation(req)
126 solvable.add_requires(rel)
127
128 # Import all provides.
129 for prov in pkg.provides:
130 rel = self.pakfire.pool.create_relation(prov)
131 solvable.add_provides(rel)
132
133 # Import all conflicts.
134 for conf in pkg.conflicts:
135 rel = self.pakfire.pool.create_relation(conf)
136 solvable.add_conflicts(rel)
137
138 # Import all obsoletes.
139 for obso in pkg.obsoletes:
140 rel = self.pakfire.pool.create_relation(obso)
141 solvable.add_obsoletes(rel)
142
143 # Import all files that are in the package.
144 rel = self.pakfire.pool.create_relation("solvable:filemarker")
145 solvable.add_provides(rel)
146 for file in pkg.filelist:
147 rel = self.pakfire.pool.create_relation(file)
148 solvable.add_provides(rel)
149
150 # Import all recommends.
151 for reco in pkg.recommends:
152 rel = self.pakfire.pool.create_relation(reco)
153 solvable.add_recommends(rel)
154
155 # Import all suggests.
156 for sugg in pkg.suggests:
157 rel = self.pakfire.pool.create_relation(sugg)
158 solvable.add_suggests(rel)
159
160 def clear(self):
161 """
162 Forget all packages from memory.
163 """
164 self.solver_repo.clear()