]>
git.ipfire.org Git - people/stevee/pakfire.git/blob - src/pakfire/packages/solv.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 ###############################################################################
28 class SolvPackage(base
.Package
):
29 def __init__(self
, pakfire
, solvable
, repo
=None):
30 base
.Package
.__init
__(self
, pakfire
, repo
)
32 # Save solvable object
33 self
.solvable
= solvable
39 return self
.solvable
.get_uuid()
43 return self
.solvable
.get_hash1()
47 return self
.solvable
.get_name()
51 if self
.__evr
is None:
52 m
= re
.match("^([0-9]+\:)?([0-9A-Za-z\.\-_]+)-([0-9]+\.?[a-z0-9\.\-\_]+|[0-9]+)$",
53 self
.solvable
.get_evr())
56 (e
, v
, r
) = m
.groups()
59 e
= e
.replace(":", "")
62 self
.__evr
= (e
, v
, r
)
81 return self
.solvable
.get_arch()
88 repo_name
= self
.solvable
.get_repo_name()
89 return self
.pakfire
.repos
.get_repo(repo_name
)
93 return self
.solvable
.get_summary()
96 def description(self
):
97 return self
.solvable
.get_description() or ""
101 groups
= self
.solvable
.get_groups()
104 return groups
.split()
110 return self
.solvable
.get_license()
113 def maintainer(self
):
114 return self
.solvable
.get_maintainer()
118 return self
.solvable
.get_url()
122 return self
.solvable
.get_downloadsize()
126 return self
.solvable
.get_installsize()
130 vendor
= self
.solvable
.get_vendor()
132 if vendor
== "<NULL>":
138 def build_host(self
):
139 return self
.solvable
.get_buildhost()
142 def build_time(self
):
143 return self
.solvable
.get_buildtime()
147 return "XXX CURRENTLY NOT IMPLEMENTED"
151 return self
.solvable
.get_provides()
155 requires
= self
.solvable
.get_requires()
158 i
= requires
.index("solvable:prereqmarker")
160 return (requires
[i
+1:], requires
[:i
],)
162 return ([], requires
,)
165 def prerequires(self
):
166 prereqs
, reqs
= self
._requires
172 prereqs
, reqs
= self
._requires
178 return self
.solvable
.get_obsoletes()
182 return self
.solvable
.get_conflicts()
185 def recommends(self
):
186 return self
.solvable
.get_recommends()
190 return self
.solvable
.get_suggests()
194 return self
.solvable
.get_filename()
198 # XXX need to support filelist.
199 return ["%s does not support filelists, yet." % self
.__class
__.__name
__,]
202 def cache_filename(self
):
204 The path to this file in the cache.
208 return os
.path
.join(h
[0:2], h
[2:], os
.path
.basename(self
.filename
))
211 def is_in_cache(self
):
212 # Local files are always kinda cached.
216 # If the repository has got a cache, we check if the file
219 return self
.repo
.cache
.exists(self
.cache_filename
)
223 def get_from_cache(self
):
227 # Search for a file in the local repository. It can be either in
228 # the root directory of the repository or in a subdirectory that
229 # is named by the architecture.
230 for i
in ("", self
.arch
,):
231 p
= os
.path
.join(self
.repo
.path
, i
, self
.filename
)
233 if os
.path
.exists(p
):
237 return file.BinaryPackage(self
.pakfire
, self
.repo
, path
)
239 if not self
.repo
.cache
:
242 if self
.repo
.cache
.exists(self
.cache_filename
):
243 # Check if the checksum matches, too.
244 if not self
.repo
.cache
.verify(self
.cache_filename
, self
.hash1
):
247 path
= self
.repo
.cache
.abspath(self
.cache_filename
)
248 return file.BinaryPackage(self
.pakfire
, self
.repo
, path
)
250 def get_from_db(self
):
251 return self
.pakfire
.repos
.local
.get_package_by_uuid(self
.uuid
)
253 def download(self
, text
="", logger
=None):
254 if not self
.repo
.local
:
255 self
.repo
.download(self
, text
=text
, logger
=logger
)
257 return self
.get_from_cache()