]>
git.ipfire.org Git - people/stevee/pakfire.git/blob - src/pakfire/repository/index.py
2 ###############################################################################
4 # Pakfire - The IPFire package management system #
5 # Copyright (C) 2011 Pakfire development team #
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. #
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. #
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/>. #
20 ###############################################################################
25 log
= logging
.getLogger("pakfire")
27 import pakfire
.packages
as packages
28 import pakfire
.satsolver
as satsolver
32 Wraps around the solvable index in the memory.
35 def __init__(self
, pakfire
, repo
):
36 self
.pakfire
= pakfire
38 # Create reference to repository and the solver repo.
40 self
.solver_repo
= repo
.solver_repo
43 return "<%s %s>" % (self
.__class
__.__name
__, self
.repo
)
48 def read(self
, filename
):
50 Read file in SOLV format from filename.
52 self
.solver_repo
.read(filename
)
54 def write(self
, filename
):
56 Write content to filename in SOLV format.
58 self
.solver_repo
.write(filename
)
64 self
.solver_repo
.internalize()
66 def add_package(self
, pkg
):
67 log
.debug("Adding package to index %s: %s" % (self
, pkg
))
69 solvable
= satsolver
.Solvable(self
.solver_repo
, pkg
.name
,
70 pkg
.friendly_version
, pkg
.arch
)
73 solvable
.set_uuid(pkg
.uuid
)
77 solvable
.set_hash1(hash1
)
81 solvable
.set_vendor(pkg
.vendor
)
84 solvable
.set_maintainer(pkg
.maintainer
)
87 solvable
.set_groups(" ".join(pkg
.groups
))
89 # Save upstream information (summary, description, license, url).
91 solvable
.set_summary(pkg
.summary
)
94 solvable
.set_description(pkg
.description
)
97 solvable
.set_license(pkg
.license
)
100 solvable
.set_url(pkg
.url
)
102 # Save build information.
104 solvable
.set_buildhost(pkg
.build_host
)
107 solvable
.set_buildtime(pkg
.build_time
)
110 filename
= os
.path
.basename(pkg
.filename
)
112 solvable
.set_filename(filename
)
114 solvable
.set_downloadsize(pkg
.size
)
115 solvable
.set_installsize(pkg
.inst_size
)
117 # Import all requires.
118 requires
= pkg
.requires
119 prerequires
= pkg
.prerequires
121 requires
.append("solvable:prereqmarker")
122 requires
+= prerequires
125 rel
= self
.pakfire
.pool
.create_relation(req
)
126 solvable
.add_requires(rel
)
128 # Import all provides.
129 for prov
in pkg
.provides
:
130 rel
= self
.pakfire
.pool
.create_relation(prov
)
131 solvable
.add_provides(rel
)
133 # Import all conflicts.
134 for conf
in pkg
.conflicts
:
135 rel
= self
.pakfire
.pool
.create_relation(conf
)
136 solvable
.add_conflicts(rel
)
138 # Import all obsoletes.
139 for obso
in pkg
.obsoletes
:
140 rel
= self
.pakfire
.pool
.create_relation(obso
)
141 solvable
.add_obsoletes(rel
)
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
)
150 # Import all recommends.
151 for reco
in pkg
.recommends
:
152 rel
= self
.pakfire
.pool
.create_relation(reco
)
153 solvable
.add_recommends(rel
)
155 # Import all suggests.
156 for sugg
in pkg
.suggests
:
157 rel
= self
.pakfire
.pool
.create_relation(sugg
)
158 solvable
.add_suggests(rel
)
162 Forget all packages from memory.
164 self
.solver_repo
.clear()