]>
git.ipfire.org Git - pbs.git/blob - src/buildservice/distribution.py
eea205c65c79421abc98d6ebd3aaa527efb4d151
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
)
61 "slogan" : self
.slogan
,
62 "vendor" : self
.vendor
,
63 "contact" : self
.contact
,
64 "description" : self
.description
,
69 name
, release
= self
.name
.split()
77 "release = %s" % release
,
78 "slogan = %s" % self
.slogan
,
80 "vendor = %s" % self
.vendor
,
81 "contact = %s" % self
.contact
,
84 return "\n".join(lines
)
92 return self
.data
.sname
100 return self
.data
.slogan
102 def get_arches(self
):
103 res
= self
.db
.query("SELECT arch FROM distributions_arches \
104 WHERE distro_id = %s ORDER BY arch", self
.id)
106 return sorted((row
.arch
for row
in res
), key
=arches
.priority
)
108 def set_arches(self
, arches
):
109 self
.db
.execute("DELETE FROM distro_arches WHERE distro_id = %s", self
.id)
112 self
.db
.execute("INSERT INTO distro_arches(distro_id, arch) \
113 VALUES(%s, %s)", self
.id, arch
)
115 self
.arches
= sorted(arches
)
117 arches
= lazy_property(get_arches
, set_arches
)
121 return self
.data
.vendor
123 def get_contact(self
):
124 return self
.data
.contact
126 def set_contact(self
, contact
):
127 self
._set
_attribute
("contact", contact
)
129 contact
= property(get_contact
, set_contact
)
134 def set_tag(self
, tag
):
135 self
._set
_attribute
("tag", tag
)
137 tag
= property(get_tag
, set_tag
)
140 def description(self
):
141 return self
.data
.description
or ""
144 def repositories(self
):
145 _repositories
= self
.backend
.repos
._get
_repositories
("SELECT * FROM repositories \
146 WHERE distro_id = %s", self
.id)
150 for repo
in _repositories
:
152 repositories
.append(repo
)
154 return sorted(repositories
)
157 def repositories_aux(self
):
158 _repos
= self
.db
.query("SELECT id FROM repositories_aux \
159 WHERE status = 'enabled' AND distro_id = %s", self
.id)
163 repo
= RepositoryAux(self
.pakfire
, repo
.id)
170 def get_repo(self
, name
):
171 repo
= self
.backend
.repos
._get
_repository
("SELECT * FROM repositories \
172 WHERE distro_id = %s AND name = %s", self
.id, name
)
179 def get_build_repos(self
):
182 for repo
in self
.repositories
:
183 if repo
.enabled_for_builds
:
186 # Add all aux. repositories.
187 repos
+= self
.repositories_aux
192 def first_repo(self
):
193 repos
= self
.repositories
196 return self
.repositories
[-1]
202 def has_package(self
, name
, epoch
, version
, release
):
203 #pkg = self.db.get("SELECT packages.id AS id FROM packages \
204 # JOIN builds ON packages.id = builds.pkg_id \
205 # JOIN sources_commits ON packages.commit_id = sources_commits.id \
206 # JOIN sources ON sources_commits.source_id = sources.id \
207 # WHERE builds.type = 'release' AND sources.distro_id = %s \
208 # AND packages.name = %s AND packages.epoch = %s \
209 # AND packages.version = %s AND packages.release = %s LIMIT 1",
210 # self.id, name, epoch, version, release)
212 pkg
= self
.db
.get("SELECT p.id AS id FROM packages p \
213 JOIN builds b ON p.id = b.pkg_id \
214 WHERE b.type = 'release' AND b.distro_id = %s AND \
215 p.name = %s AND p.epoch = %s AND p.version = %s AND p.release = %s \
216 LIMIT 1", self
.id, name
, epoch
, version
, release
)
219 logging
.debug("Package %s-%s:%s-%s does not exist, yet." % \
220 (name
, epoch
, version
, release
))
223 logging
.debug("Package %s-%s:%s-%s does already exist." % \
224 (name
, epoch
, version
, release
))
226 return packages
.Package(self
.pakfire
, pkg
.id)
228 def delete_package(self
, name
):
229 pass # XXX figure out what to do at this place
235 for source
in self
.db
.query("SELECT id FROM sources WHERE distro_id = %s", self
.id):
236 source
= sources
.Source(self
.pakfire
, source
.id)
237 _sources
.append(source
)
239 return sorted(_sources
)
241 def get_source(self
, identifier
):
242 for source
in self
.sources
:
243 if not source
.identifier
== identifier
: