]>
git.ipfire.org Git - pakfire.git/blob - pakfire/packages/installed.py
0a784fe6330f60410808338cbe6839687d2a7318
5 import pakfire
.downloader
7 from base
import Package
8 from binary
import BinaryPackage
10 from pakfire
.constants
import *
12 class DatabasePackage(Package
):
15 def __init__(self
, pakfire
, repo
, db
, data
):
16 Package
.__init
__(self
, pakfire
, repo
)
22 for key
in data
.keys():
23 self
._data
[key
] = data
[key
]
26 return "<%s %s>" % (self
.__class
__.__name
__, self
.friendly_name
)
34 id = self
.metadata
.get("id")
42 return self
.metadata
.get("name")
46 return self
.metadata
.get("version")
50 return self
.metadata
.get("release")
54 epoch
= self
.metadata
.get("epoch", 0)
60 return self
.metadata
.get("arch")
64 return self
.metadata
.get("maintainer")
68 return self
.metadata
.get("license")
72 return self
.metadata
.get("summary")
75 def description(self
):
76 return self
.metadata
.get("description")
80 return self
.metadata
.get("groups", "").split()
84 return self
.metadata
.get("build_date")
88 build_time
= self
.metadata
.get("build_time", 0)
91 return int(build_time
)
97 return self
.metadata
.get("build_host")
101 return self
.metadata
.get("build_id")
105 return self
.metadata
.get("uuid")
109 return self
.metadata
.get("size", 0)
113 return self
.metadata
.get("provides", "").split()
117 return self
.metadata
.get("requires", "").split()
121 return self
.metadata
.get("conflicts", "").split()
125 return self
.metadata
.get("obsoletes", "").split()
129 return self
.metadata
.get("hash1")
133 return self
.metadata
.get("scriptlet")
137 return self
.metadata
.get("filename") # XXX basename?
143 c
.execute("SELECT name FROM files WHERE pkg = ?", (self
.id,))
145 return [f
["name"] for f
in c
]
149 def _does_provide_file(self
, requires
):
151 A faster version to find a file in the database.
154 c
.execute("SELECT * FROM files WHERE name GLOB ? AND pkg = ?",
155 (requires
.requires
, self
.id))
166 def download(self
, text
=""):
168 Downloads the package from repository and returns a new instance
172 # XXX a bit hacky, but InstalledRepository has no cache.
173 if self
.repo
.name
== "installed":
176 # Marker, if we need to download the package.
179 # Add shortcut for cache.
180 cache
= self
.repo
.cache
182 cache_filename
= "packages/%s" % os
.path
.basename(self
.filename
)
184 # Check if file already exists in cache.
185 if cache
.exists(cache_filename
):
186 # If the file does already exist, we check if the hash1 matches.
187 if cache
.verify(cache_filename
, self
.hash1
):
188 # We already got the right file. Skip download.
191 # The file in cache has a wrong hash. Remove it and repeat download.
192 cache
.remove(cache_filename
)
195 # Make sure filename is of type string (and not unicode)
196 filename
= str(self
.filename
)
198 # Get a package grabber and add mirror download capabilities to it.
199 grabber
= pakfire
.downloader
.PackageDownloader(
200 text
=text
+ os
.path
.basename(filename
),
202 grabber
= self
.repo
.mirrors
.group(grabber
)
204 i
= grabber
.urlopen(filename
)
206 # Open input and output files and download the file.
207 o
= cache
.open(cache_filename
, "w")
209 buf
= i
.read(BUFFER_SIZE
)
212 buf
= i
.read(BUFFER_SIZE
)
217 # Verify if the download was okay.
218 if not cache
.verify(cache_filename
, self
.hash1
):
219 raise Exception, "XXX this should never happen..."
221 filename
= os
.path
.join(cache
.path
, cache_filename
)
222 return BinaryPackage(self
.pakfire
, self
.repo
, filename
)
224 # XXX maybe we can remove this later?
225 class InstalledPackage(DatabasePackage
):