[copr] master: [frontend] repofiles without specifying architecture (32bb20f)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 32bb20f0132ba186517a0bbe4250ce8a34d211e5
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Mon Jun 9 16:45:55 2014 +0200
[frontend] repofiles without specifying architecture
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/logic/coprs_logic.py | 44 ++++++++++++--------
frontend/coprs_frontend/coprs/models.py | 20 +++------
.../coprs/templates/coprs/detail/overview.html | 6 +-
.../coprs/views/coprs_ns/coprs_general.py | 13 +----
4 files changed, 38 insertions(+), 45 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/logic/coprs_logic.py b/frontend/coprs_frontend/coprs/logic/coprs_logic.py
index 1bc8be4..54efefe 100644
--- a/frontend/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/coprs_logic.py
@@ -365,21 +365,29 @@ class CoprChrootsLogic(object):
class MockChrootsLogic(object):
@classmethod
- def get(cls, user, os_release, os_version, arch, active_only=False):
+ def get(cls, user, os_release, os_version, arch, active_only=False, noarch=False):
+ if noarch and not arch:
+ return (models.MockChroot.query
+ .filter(models.MockChroot.os_release == os_release,
+ models.MockChroot.os_version == os_version))
+
return (models.MockChroot.query
.filter(models.MockChroot.os_release == os_release,
models.MockChroot.os_version == os_version,
models.MockChroot.arch == arch))
@classmethod
- def get_from_name(cls, chroot_name, active_only=False):
+ def get_from_name(cls, chroot_name, active_only=False, noarch=False):
"""
+ chroot_name should be os-version-architecture, e.g. fedora-rawhide-x86_64
+ the architecture could be optional with noarch=True
+
Return MockChroot object for textual representation of chroot
"""
- name_tuple = cls.tuple_from_name(None, chroot_name)
- return cls.get(None, name_tuple[0], name_tuple[1],
- name_tuple[2], active_only=active_only)
+ name_tuple = cls.tuple_from_name(None, chroot_name, noarch=noarch)
+ return cls.get(None, name_tuple[0], name_tuple[1], name_tuple[2],
+ active_only=active_only, noarch=noarch)
@classmethod
def get_multiple(cls, user, active_only=False):
@@ -435,21 +443,21 @@ class MockChrootsLogic(object):
db.session.delete(mock_chroot)
@classmethod
- def tuple_from_name(cls, user, name):
- """
- valid name can be "fedora-rawhide-x86_64" or even "fedora-rawhide"
+ def tuple_from_name(cls, user, name, noarch=False):
"""
+ input should be os-version-architecture, e.g. fedora-rawhide-x86_64
- split_name = name.rsplit('-', 1)
- if len(split_name) < 2:
+ the architecture could be optional with noarch=True
+
+ returns ("os", "vetsion", "arch") or ("os", "version", None)
+ """
+ splitted_name = name.split("-")
+ if (not noarch and len(splitted_name) is not 3)\
+ or (noarch and len(splitted_name) not in (2,3)):
raise exceptions.MalformedArgumentException(
- "Chroot Name doesn't contain dash,"
- " can't determine chroot architecure.")
+ "Chroot name is not valid")
- if '-' in split_name[0]:
- os_release, os_version = (split_name[0].rsplit('-'))[0:2]
- else:
- os_release, os_version = split_name[0], ''
+ if noarch:
+ splitted_name.append(None)
- arch = split_name[1]
- return (os_release, os_version, arch)
+ return tuple(splitted_name)
diff --git a/frontend/coprs_frontend/coprs/models.py b/frontend/coprs_frontend/coprs/models.py
index 519aac6..5b71fff 100644
--- a/frontend/coprs_frontend/coprs/models.py
+++ b/frontend/coprs_frontend/coprs/models.py
@@ -320,23 +320,15 @@ class MockChroot(db.Model, helpers.Serializer):
"""
Textual representation of name of this chroot
"""
-
- if self.os_version:
- format_string = "{rel}-{ver}-{arch}"
- else:
- format_string = "{rel}-{arch}"
- return format_string.format(rel=self.os_release,
- ver=self.os_version,
- arch=self.arch)
+ return "{0}-{1}-{2}".format(
+ self.os_release, self.os_version, self.arch)
@property
def os(self):
- if self.os_version:
- format_string = "{rel} {ver}"
- else:
- format_string = "{rel}"
- return format_string.format(rel=self.os_release,
- ver=self.os_version)
+ """
+ Textual representation of the operating system name
+ """
+ return "{0} {1}".format(self.os_release, self.os_version)
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html
index 2eb5c88..5dd2c41 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html
@@ -51,9 +51,9 @@
'coprs_ns.generate_repo_file',
username=copr.owner.name,
coprname=copr.name,
- chroot=mock_chroot.name,
- repofile=copr.owner.name+'-'+copr.name+'-'+mock_chroot.name+'.repo') }}">
- {{ copr.owner.name }}-{{ copr.name }}-{{mock_chroot.name}}.repo</a></td>
+ chroot=mock_chroot.os_release+"-"+mock_chroot.os_version,
+ repofile=copr.owner.name+'-'+copr.name+'-'+mock_chroot.os_release+"-"+mock_chroot.os_version+'.repo') }}">
+ {{ copr.owner.name }}-{{ copr.name }}-{{mock_chroot.os_release+"-"+mock_chroot.os_version}}.repo</a></td>
{% else %}
<td></td>
{% endif %}
diff --git a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index f51f7e1..3646305 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -477,11 +477,6 @@ def generate_repo_file(username, coprname, chroot, repofile):
.format(repofile))
- if "-" not in reponame:
- return page_not_found(
- "Bad repository name: {0}. Must be username-projectname"
- .format(reponame))
-
copr = None
try:
# query.one() is used since it fetches all builds, unlike
@@ -492,12 +487,10 @@ def generate_repo_file(username, coprname, chroot, repofile):
return page_not_found(
"Project {0}/{1} does not exist".format(username, coprname))
- try:
- mock_chroot = coprs_logic.MockChrootsLogic.get_from_name(chroot).one()
- except sqlalchemy.orm.exc.NoResultFound:
+ mock_chroot = coprs_logic.MockChrootsLogic.get_from_name(chroot,
+ noarch=True).first()
+ if not mock_chroot:
return page_not_found("Chroot {0} does not exist".format(chroot))
- except ValueError as e:
- return page_not_found(str(e))
url = ""
for build in copr.builds: