]> git.ipfire.org Git - people/stevee/pakfire.git/blame - pakfire/packages/solv.py
Add copyright information to all files.
[people/stevee/pakfire.git] / pakfire / packages / solv.py
CommitLineData
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 22import os
c605d735
MT
23import re
24
25import base
26import binary
27
28class 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):
97 return self.solvable.get_description()
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
124 @property
125 def uuid(self):
126 return self.solvable.get_uuid()
127
128 @property
129 def build_host(self):
130 return self.solvable.get_buildhost()
131
132 @property
133 def build_time(self):
134 return self.solvable.get_buildtime()
135
136 @property
137 def build_id(self):
138 return "XXX CURRENTLY NOT IMPLEMENTED"
139
140 @property
141 def provides(self):
142 return self.solvable.get_provides()
143
71d3b468
MT
144 @property
145 def _requires(self):
146 requires = self.solvable.get_requires()
147
148 try:
149 i = requires.index("solvable:prereqmarker")
150
151 return (requires[:i], requires[i:],)
152 except ValueError:
153 return ([], requires,)
154
155 @property
156 def prerequires(self):
157 prereqs, reqs = self._requires
158
159 return prereqs
160
c605d735
MT
161 @property
162 def requires(self):
71d3b468
MT
163 prereqs, reqs = self._requires
164
165 return reqs
c605d735
MT
166
167 @property
168 def obsoletes(self):
169 return self.solvable.get_obsoletes()
170
171 @property
172 def conflicts(self):
173 return self.solvable.get_conflicts()
174
175 @property
176 def filename(self):
177 return self.solvable.get_filename()
178
179 @property
180 def is_in_cache(self):
811d22ad
MT
181 # Local files are always kinda cached.
182 if self.repo.local:
183 return True
184
c605d735
MT
185 return self.repo.cache.exists("package/%s" % self.filename)
186
187 def get_from_cache(self):
811d22ad
MT
188 path = None
189
190 if self.repo.local:
022c792a
MT
191 # Search for a file in the local repository. It can be either in
192 # the root directory of the repository or in a subdirectory that
193 # is named by the architecture.
194 for i in ("", self.arch,):
195 path = os.path.join(self.repo.path, i, self.filename)
196
197 if os.path.exists(path):
198 return binary.BinaryPackage(self.pakfire, self.repo, path)
811d22ad
MT
199 else:
200 filename = "packages/%s" % self.filename
201
202 if self.repo.cache.exists(filename):
203 path = self.repo.cache.abspath(filename)
c605d735 204
811d22ad
MT
205 if path:
206 return binary.BinaryPackage(self.pakfire, self.repo, path)
c605d735
MT
207
208 def download(self, text=""):
811d22ad
MT
209 if not self.repo.local:
210 self.repo.download(self, text=text)
c605d735
MT
211
212 return self.get_from_cache()