]>
git.ipfire.org Git - pbs.git/blob - src/buildservice/distribution.py
11 from .repository
import Repository
, RepositoryAux
13 from .decorators
import *
15 class Distributions(base
.Object
):
16 def _get_distribution(self
, query
, *args
):
17 res
= self
.db
.get(query
, *args
)
20 return Distribution(self
.backend
, res
.id, data
=res
)
22 def _get_distributions(self
, query
, *args
):
23 res
= self
.db
.query(query
, *args
)
26 yield Distribution(self
.backend
, row
.id, data
=row
)
29 distros
= self
._get
_distributions
("SELECT * FROM distributions \
30 WHERE deleted IS FALSE ORDER BY name")
34 def get_by_id(self
, distro_id
):
35 return self
._get
_distribution
("SELECT * FROM distributions \
36 WHERE id = %s", distro_id
)
38 def get_by_name(self
, sname
):
39 return self
._get
_distribution
("SELECT * FROM distributions \
40 WHERE sname = %s AND deleted IS FALSE", sname
)
42 def get_by_ident(self
, ident
):
43 return self
.get_by_name(ident
)
45 def get_default(self
):
47 return self
.get_by_ident("ipfire3")
50 class Distribution(base
.DataObject
):
51 table
= "distributions"
54 return "<%s %s>" % (self
.__class
__.__name
__, self
.name
)
57 return iter(self
.repositories
)
64 "slogan" : self
.slogan
,
65 "vendor" : self
.vendor
,
66 "contact" : self
.contact
,
67 "description" : self
.description
,
72 name
, release
= self
.name
.split()
80 "release = %s" % release
,
81 "slogan = %s" % self
.slogan
,
83 "vendor = %s" % self
.vendor
,
84 "contact = %s" % self
.contact
,
87 return "\n".join(lines
)
95 return self
.data
.sname
103 return self
.data
.slogan
105 def get_arches(self
):
106 res
= self
.db
.query("SELECT arch FROM distributions_arches \
107 WHERE distro_id = %s ORDER BY arch", self
.id)
109 return sorted((row
.arch
for row
in res
), key
=arches
.priority
)
111 def set_arches(self
, arches
):
112 self
.db
.execute("DELETE FROM distro_arches WHERE distro_id = %s", self
.id)
115 self
.db
.execute("INSERT INTO distro_arches(distro_id, arch) \
116 VALUES(%s, %s)", self
.id, arch
)
118 self
.arches
= sorted(arches
)
120 arches
= lazy_property(get_arches
, set_arches
)
124 return self
.data
.vendor
126 def get_contact(self
):
127 return self
.data
.contact
129 def set_contact(self
, contact
):
130 self
._set
_attribute
("contact", contact
)
132 contact
= property(get_contact
, set_contact
)
137 def set_tag(self
, tag
):
138 self
._set
_attribute
("tag", tag
)
140 tag
= property(get_tag
, set_tag
)
143 def description(self
):
144 return self
.data
.description
or ""
147 def repositories(self
):
148 _repositories
= self
.backend
.repos
._get
_repositories
("SELECT * FROM repositories \
149 WHERE distro_id = %s", self
.id)
153 for repo
in _repositories
:
155 repositories
.append(repo
)
157 return sorted(repositories
)
160 def repositories_aux(self
):
161 _repos
= self
.db
.query("SELECT id FROM repositories_aux \
162 WHERE status = 'enabled' AND distro_id = %s", self
.id)
166 repo
= RepositoryAux(self
.pakfire
, repo
.id)
173 def get_repo(self
, name
):
174 repo
= self
.backend
.repos
._get
_repository
("SELECT * FROM repositories \
175 WHERE distro_id = %s AND name = %s", self
.id, name
)
182 def get_build_repos(self
):
185 for repo
in self
.repositories
:
186 if repo
.enabled_for_builds
:
189 # Add all aux. repositories.
190 repos
+= self
.repositories_aux
195 def first_repo(self
):
196 repos
= self
.repositories
199 return self
.repositories
[-1]
205 def has_package(self
, name
, epoch
, version
, release
):
206 #pkg = self.db.get("SELECT packages.id AS id FROM packages \
207 # JOIN builds ON packages.id = builds.pkg_id \
208 # JOIN sources_commits ON packages.commit_id = sources_commits.id \
209 # JOIN sources ON sources_commits.source_id = sources.id \
210 # WHERE builds.type = 'release' AND sources.distro_id = %s \
211 # AND packages.name = %s AND packages.epoch = %s \
212 # AND packages.version = %s AND packages.release = %s LIMIT 1",
213 # self.id, name, epoch, version, release)
215 pkg
= self
.db
.get("SELECT p.id AS id FROM packages p \
216 JOIN builds b ON p.id = b.pkg_id \
217 WHERE b.type = 'release' AND b.distro_id = %s AND \
218 p.name = %s AND p.epoch = %s AND p.version = %s AND p.release = %s \
219 LIMIT 1", self
.id, name
, epoch
, version
, release
)
222 logging
.debug("Package %s-%s:%s-%s does not exist, yet." % \
223 (name
, epoch
, version
, release
))
226 logging
.debug("Package %s-%s:%s-%s does already exist." % \
227 (name
, epoch
, version
, release
))
229 return packages
.Package(self
.pakfire
, pkg
.id)
231 def delete_package(self
, name
):
232 pass # XXX figure out what to do at this place
238 for source
in self
.db
.query("SELECT id FROM sources WHERE distro_id = %s", self
.id):
239 source
= sources
.Source(self
.pakfire
, source
.id)
240 _sources
.append(source
)
242 return sorted(_sources
)
244 def get_source(self
, identifier
):
245 for source
in self
.sources
:
246 if not source
.identifier
== identifier
: