]>
Commit | Line | Data |
---|---|---|
c605d735 | 1 | #!/usr/bin/python |
b792d887 MT |
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 | ############################################################################### | |
c605d735 | 21 | |
811d22ad | 22 | import os |
c605d735 MT |
23 | import re |
24 | ||
25 | import base | |
e0636b31 | 26 | import file |
c605d735 MT |
27 | |
28 | class SolvPackage(base.Package): | |
8276111d MT |
29 | def __init__(self, pakfire, solvable, repo=None): |
30 | base.Package.__init__(self, pakfire, repo) | |
c605d735 MT |
31 | |
32 | # Save solvable object | |
33 | self.solvable = solvable | |
34 | ||
35 | self.__evr = None | |
36 | ||
37 | @property | |
38 | def uuid(self): | |
39 | return self.solvable.get_uuid() | |
40 | ||
41 | @property | |
42 | def hash1(self): | |
43 | return self.solvable.get_hash1() | |
44 | ||
45 | @property | |
46 | def name(self): | |
47 | return self.solvable.get_name() | |
48 | ||
49 | @property | |
50 | def evr(self): | |
51 | if self.__evr is None: | |
643994f9 | 52 | m = re.match("^([0-9]+\:)?([0-9A-Za-z\.\-_]+)-([0-9]+\.?[a-z0-9]+|[0-9]+)$", |
c605d735 MT |
53 | self.solvable.get_evr()) |
54 | ||
55 | if m: | |
56 | (e, v, r) = m.groups() | |
57 | ||
58 | if e: | |
59 | e = e.replace(":", "") | |
60 | e = int(e) | |
61 | ||
62 | self.__evr = (e, v, r) | |
63 | ||
643994f9 | 64 | assert self.__evr |
c605d735 MT |
65 | return self.__evr |
66 | ||
67 | @property | |
68 | def epoch(self): | |
69 | return self.evr[0] | |
70 | ||
71 | @property | |
72 | def version(self): | |
73 | return self.evr[1] | |
74 | ||
75 | @property | |
76 | def release(self): | |
77 | return self.evr[2] | |
78 | ||
79 | @property | |
80 | def arch(self): | |
81 | return self.solvable.get_arch() | |
82 | ||
83 | @property | |
84 | def repo(self): | |
8276111d MT |
85 | if self._repo: |
86 | return self._repo | |
c605d735 | 87 | |
8276111d | 88 | repo_name = self.solvable.get_repo_name() |
c605d735 MT |
89 | return self.pakfire.repos.get_repo(repo_name) |
90 | ||
91 | @property | |
92 | def summary(self): | |
93 | return self.solvable.get_summary() | |
94 | ||
95 | @property | |
96 | def description(self): | |
c157d1e2 | 97 | return self.solvable.get_description() or "" |
c605d735 MT |
98 | |
99 | @property | |
100 | def groups(self): | |
2212640f MT |
101 | groups = self.solvable.get_groups() |
102 | ||
103 | if groups: | |
104 | return groups.split() | |
105 | ||
106 | return [] | |
c605d735 MT |
107 | |
108 | @property | |
109 | def license(self): | |
110 | return self.solvable.get_license() | |
111 | ||
112 | @property | |
113 | def maintainer(self): | |
114 | return self.solvable.get_maintainer() | |
115 | ||
116 | @property | |
117 | def url(self): | |
118 | return self.solvable.get_url() | |
119 | ||
120 | @property | |
121 | def size(self): | |
122 | return self.solvable.get_downloadsize() | |
123 | ||
85a1120f MT |
124 | @property |
125 | def vendor(self): | |
126 | vendor = self.solvable.get_vendor() | |
127 | ||
128 | if vendor == "<NULL>": | |
129 | return None | |
130 | ||
131 | return vendor | |
132 | ||
c605d735 MT |
133 | @property |
134 | def uuid(self): | |
135 | return self.solvable.get_uuid() | |
136 | ||
137 | @property | |
138 | def build_host(self): | |
139 | return self.solvable.get_buildhost() | |
140 | ||
141 | @property | |
142 | def build_time(self): | |
143 | return self.solvable.get_buildtime() | |
144 | ||
145 | @property | |
146 | def build_id(self): | |
147 | return "XXX CURRENTLY NOT IMPLEMENTED" | |
148 | ||
149 | @property | |
150 | def provides(self): | |
151 | return self.solvable.get_provides() | |
152 | ||
71d3b468 MT |
153 | @property |
154 | def _requires(self): | |
155 | requires = self.solvable.get_requires() | |
156 | ||
157 | try: | |
158 | i = requires.index("solvable:prereqmarker") | |
159 | ||
160 | return (requires[:i], requires[i:],) | |
161 | except ValueError: | |
162 | return ([], requires,) | |
163 | ||
164 | @property | |
165 | def prerequires(self): | |
166 | prereqs, reqs = self._requires | |
167 | ||
168 | return prereqs | |
169 | ||
c605d735 MT |
170 | @property |
171 | def requires(self): | |
71d3b468 MT |
172 | prereqs, reqs = self._requires |
173 | ||
174 | return reqs | |
c605d735 MT |
175 | |
176 | @property | |
177 | def obsoletes(self): | |
178 | return self.solvable.get_obsoletes() | |
179 | ||
180 | @property | |
181 | def conflicts(self): | |
182 | return self.solvable.get_conflicts() | |
183 | ||
184 | @property | |
185 | def filename(self): | |
186 | return self.solvable.get_filename() | |
187 | ||
c157d1e2 MT |
188 | @property |
189 | def filelist(self): | |
190 | # XXX need to support filelist. | |
191 | return ["%s does not support filelists, yet." % self.__class__.__name__,] | |
192 | ||
c605d735 MT |
193 | @property |
194 | def is_in_cache(self): | |
811d22ad MT |
195 | # Local files are always kinda cached. |
196 | if self.repo.local: | |
197 | return True | |
198 | ||
c605d735 MT |
199 | return self.repo.cache.exists("package/%s" % self.filename) |
200 | ||
201 | def get_from_cache(self): | |
811d22ad MT |
202 | path = None |
203 | ||
204 | if self.repo.local: | |
022c792a MT |
205 | # Search for a file in the local repository. It can be either in |
206 | # the root directory of the repository or in a subdirectory that | |
207 | # is named by the architecture. | |
208 | for i in ("", self.arch,): | |
209 | path = os.path.join(self.repo.path, i, self.filename) | |
210 | ||
211 | if os.path.exists(path): | |
e0636b31 | 212 | return file.BinaryPackage(self.pakfire, self.repo, path) |
811d22ad MT |
213 | else: |
214 | filename = "packages/%s" % self.filename | |
215 | ||
216 | if self.repo.cache.exists(filename): | |
217 | path = self.repo.cache.abspath(filename) | |
c605d735 | 218 | |
811d22ad | 219 | if path: |
e0636b31 | 220 | return file.BinaryPackage(self.pakfire, self.repo, path) |
c605d735 MT |
221 | |
222 | def download(self, text=""): | |
811d22ad MT |
223 | if not self.repo.local: |
224 | self.repo.download(self, text=text) | |
c605d735 MT |
225 | |
226 | return self.get_from_cache() | |
c07a3ca7 MT |
227 | |
228 | def get_scriptlet(self, type): | |
229 | # XXX TODO | |
230 | return None |