[copr] jkadlcik-devel: [backend] move RepoRpmBuilder to it's own file (90d692f)
by frostyx@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : jkadlcik-devel
>---------------------------------------------------------------
commit 90d692f3c10728f71bb796f794af76acd3282b3b
Author: Jakub Kadlčík <jkadlcik(a)redhat.com>
Date: Wed Oct 21 11:47:28 2015 +0200
[backend] move RepoRpmBuilder to it's own file
>---------------------------------------------------------------
backend/backend/repo_rpm.py | 116 ++++++++++++++++++++++++
backend/run/copr_generate_repo_packages.py | 133 ++-------------------------
2 files changed, 126 insertions(+), 123 deletions(-)
diff --git a/backend/backend/repo_rpm.py b/backend/backend/repo_rpm.py
new file mode 100644
index 0000000..a776b3d
--- /dev/null
+++ b/backend/backend/repo_rpm.py
@@ -0,0 +1,116 @@
+import requests
+import os
+import shutil
+import subprocess
+from six.moves.urllib.parse import urljoin
+from backend.helpers import get_backend_opts
+from backend.sign import sign_rpms_in_dir
+
+
+opts = get_backend_opts()
+here = os.path.dirname(os.path.realpath(__file__))
+
+
+FRONTEND_URL = opts.frontend_base_url
+BACKEND_DIR = os.path.dirname(here)
+RESULTS_DIR = opts.destdir
+RPMBUILD = os.path.join(os.path.expanduser("~"), "rpmbuild")
+
+VERSION = 1
+RELEASE = 1
+
+
+class RepoRpmBuilder(object):
+
+ """
+ Purposed to create configuration RPM package for the repository.
+ There have to be multiple configuration packages for the repo,
+ so this builder needs to be instantiated with ``user`` and
+ ``copr`` as expected, but also with ``chroot``.
+ """
+
+ RPM_NAME_FORMAT = "copr-repo-{}-{}-{}-{}-1-1.noarch.rpm"
+ SPEC_NAME = "copr-repo-package.spec"
+
+ def __init__(self, user, copr, chroot, log, topdir=RPMBUILD, resdir=RESULTS_DIR, opts=opts):
+ self.user = user # Name of the user
+ self.copr = copr # Name of the copr
+ self.chroot = chroot # MockChroot object
+ self.topdir = topdir # rpmbuild directory (default $HOME/rpmbuild)
+ self.resdir = resdir # Backend results directory accessible via http
+ self.opts = opts
+ self.log = log
+
+ @property
+ def os_release(self):
+ return self.chroot.name.split("-")[0]
+
+ @property
+ def os_version(self):
+ return self.chroot.name.split("-")[1]
+
+ @property
+ def name_release(self):
+ return self.chroot.name[:self.chroot.name.rindex("-")]
+
+ @property
+ def rpm_name(self):
+ version = self.os_version
+ # All Fedora releases except for rawhide has same .repo file
+ if self.os_release == "fedora" and self.os_version.isdigit():
+ version = "all"
+ return self.RPM_NAME_FORMAT.format(self.user, self.copr, self.os_release, version)
+
+ @property
+ def rpm_dir(self):
+ return os.path.join(self.resdir, self.user, self.copr, "repo-packages")
+
+ @property
+ def repo_name(self):
+ return "{}-{}-{}-{}.repo" \
+ .format(self.user, self.copr, self.os_release, self.os_version)
+
+ def has_repo_package(self):
+ return os.path.isfile(os.path.join(self.rpm_dir, self.rpm_name))
+
+ def get_repofile(self):
+ api = "coprs/{}/{}/repo/{}/{}".format(self.user, self.copr, self.name_release, self.repo_name)
+ url = urljoin(FRONTEND_URL, api)
+ r = requests.get(url)
+ if r.status_code != 200:
+ raise RuntimeError("Can't get {}".format(url))
+ return r.content
+
+ def generate_repo_package(self):
+
+ shutil.copyfile(os.path.join(BACKEND_DIR, "backend/static/", self.SPEC_NAME),
+ os.path.join(self.topdir, "SPECS", self.SPEC_NAME))
+
+ with open(os.path.join(self.topdir, "SOURCES", self.repo_name), "w") as f:
+ f.writelines(self.get_repofile())
+
+ if not os.path.exists(self.rpm_dir):
+ os.makedirs(self.rpm_dir)
+
+ defines = [
+ "-D", "_topdir {}".format(self.topdir),
+ "-D", "_rpmdir {}".format(self.rpm_dir),
+ "-D", "_rpmfilename {}".format(self.rpm_name),
+ "-D", "pkg_name {}".format("copr-repo-{}-{}".format(self.user, self.copr)),
+ "-D", "pkg_version {}".format(VERSION),
+ "-D", "pkg_release {}".format(RELEASE),
+ "-D", "user {}".format(self.user),
+ "-D", "copr {}".format(self.copr),
+ "-D", "chroot {}".format("{}-{}".format(self.os_release, self.os_version)),
+ "-D", "repofile {}".format("_copr_{}-{}.repo".format(self.user, self.copr)),
+ ]
+
+ command = ["rpmbuild", "-ba"] + defines + [os.path.join(self.topdir, "SPECS", self.SPEC_NAME)]
+ process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = process.communicate()
+
+ if process.returncode != 0:
+ raise RuntimeError("Failed rpmbuild for: {}\n{}".format(self.repo_name, err))
+
+ def sign(self):
+ sign_rpms_in_dir(self.user, self.copr, self.rpm_dir, self.opts, self.log)
diff --git a/backend/run/copr_generate_repo_packages.py b/backend/run/copr_generate_repo_packages.py
index 1e3baad..3ede7c0 100755
--- a/backend/run/copr_generate_repo_packages.py
+++ b/backend/run/copr_generate_repo_packages.py
@@ -11,140 +11,35 @@ from __future__ import unicode_literals
from __future__ import division
from __future__ import absolute_import
-import requests
import os
-import shutil
-import subprocess
+import sys
import logging
-from six.moves.urllib.parse import urljoin
from copr import create_client2_from_params
here = os.path.dirname(os.path.realpath(__file__))
-import sys
sys.path.append(os.path.dirname(here))
sys.path.append("/usr/share/copr/")
-
-from backend.helpers import get_backend_opts
-from backend.sign import sign_rpms_in_dir
+from backend.repo_rpm import RepoRpmBuilder, FRONTEND_URL, RPMBUILD
-# ----------------------------------------------------------------------------------------------------------------------
-
-opts = get_backend_opts()
-
-FRONTEND_URL = opts.frontend_base_url
-BACKEND_DIR = "/usr/share/copr" if here == "/usr/bin" else os.path.dirname(here)
-RESULTS_DIR = opts.destdir
-RPMBUILD = os.path.join(os.path.expanduser("~"), "rpmbuild")
LOG_FILE = "/var/log/copr/repo-packages.log"
-VERSION = 1
-RELEASE = 1
-
-
-# ----------------------------------------------------------------------------------------------------------------------
log = logging.getLogger(__name__)
client = create_client2_from_params(FRONTEND_URL)
-class RepoRpmBuilder(object):
-
- RPM_NAME_FORMAT = "copr-repo-{}-{}-{}-{}-1-1.noarch.rpm"
- SPEC_NAME = "copr-repo-package.spec"
-
- def __init__(self, user, copr, chroot, topdir=RPMBUILD, resdir=RESULTS_DIR, opts=opts, log=log):
- self.user = user # Name of the user
- self.copr = copr # Name of the copr
- self.chroot = chroot # MockChroot object
- self.topdir = topdir # rpmbuild directory (default $HOME/rpmbuild)
- self.resdir = resdir # Backend results directory accessible via http
- self.opts = opts
- self.log = log
-
- @property
- def os_release(self):
- return self.chroot.name.split("-")[0]
-
- @property
- def os_version(self):
- return self.chroot.name.split("-")[1]
-
- @property
- def name_release(self):
- return self.chroot.name[:self.chroot.name.rindex("-")]
-
- @property
- def rpm_name(self):
- version = self.os_version
- # All Fedora releases except for rawhide has same .repo file
- if self.os_release == "fedora" and self.os_version.isdigit():
- version = "all"
- return self.RPM_NAME_FORMAT.format(self.user, self.copr, self.os_release, version)
-
- @property
- def rpm_dir(self):
- return os.path.join(self.resdir, self.user, self.copr, "repo-packages")
-
- @property
- def repo_name(self):
- return "{}-{}-{}-{}.repo"\
- .format(self.user, self.copr, self.os_release, self.os_version)
-
- def has_repo_package(self):
- return os.path.isfile(os.path.join(self.rpm_dir, self.rpm_name))
-
- def get_repofile(self):
- api = "coprs/{}/{}/repo/{}/{}".format(self.user, self.copr, self.name_release, self.repo_name)
- url = urljoin(FRONTEND_URL, api)
- r = requests.get(url)
- if r.status_code != 200:
- raise RuntimeError("Can't get {}".format(url))
- return r.content
-
- def generate_repo_package(self):
-
- shutil.copyfile(os.path.join(BACKEND_DIR, "backend/static/", self.SPEC_NAME),
- os.path.join(self.topdir, "SPECS", self.SPEC_NAME))
-
- with open(os.path.join(self.topdir, "SOURCES", self.repo_name), "w") as f:
- f.writelines(self.get_repofile())
-
- if not os.path.exists(self.rpm_dir):
- os.makedirs(self.rpm_dir)
-
- defines = [
- "-D", "_topdir {}".format(self.topdir),
- "-D", "_rpmdir {}".format(self.rpm_dir),
- "-D", "_rpmfilename {}".format(self.rpm_name),
- "-D", "pkg_name {}".format("copr-repo-{}-{}".format(self.user, self.copr)),
- "-D", "pkg_version {}".format(VERSION),
- "-D", "pkg_release {}".format(RELEASE),
- "-D", "user {}".format(self.user),
- "-D", "copr {}".format(self.copr),
- "-D", "chroot {}".format("{}-{}".format(self.os_release, self.os_version)),
- "-D", "repofile {}".format("_copr_{}-{}.repo".format(self.user, self.copr)),
- ]
-
- command = ["rpmbuild", "-ba"] + defines + [os.path.join(self.topdir, "SPECS", self.SPEC_NAME)]
- process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, err = process.communicate()
-
- if process.returncode != 0:
- raise RuntimeError("Failed rpmbuild for: {}\n{}".format(self.repo_name, err))
-
- def sign(self):
- sign_rpms_in_dir(self.user, self.copr, self.rpm_dir, self.opts, self.log)
-
-
-# ----------------------------------------------------------------------------------------------------------------------
-
-
def all_coprs():
return list(client.projects.get_list(limit=99999))
-# ----------------------------------------------------------------------------------------------------------------------
+def unique_chroots(copr):
+ d = {}
+ for chroot in client.project_chroots.get_list(copr):
+ name_release = chroot.name[:chroot.name.rindex("-")]
+ d[name_release] = chroot
+ return d.values()
+
def prepare_rpmbuild_directory():
dirs = ["BUILD", "RPMS", "SOURCES", "SPECS", "SRPMS"]
@@ -154,20 +49,12 @@ def prepare_rpmbuild_directory():
os.makedirs(d)
-def unique_chroots(copr):
- d = {}
- for chroot in client.project_chroots.get_list(copr):
- name_release = chroot.name[:chroot.name.rindex("-")]
- d[name_release] = chroot
- return d.values()
-
-
def main():
prepare_rpmbuild_directory()
for copr in all_coprs():
for chroot in unique_chroots(copr):
- builder = RepoRpmBuilder(user=copr.owner, copr=copr.name, chroot=chroot)
+ builder = RepoRpmBuilder(user=copr.owner, copr=copr.name, chroot=chroot, log=log)
if builder.has_repo_package():
log.info("Skipping {}".format(builder.repo_name))
8 years, 6 months
[copr] jkadlcik-devel: [frontend] print disabled download buttons when there are no builds (af615e2)
by frostyx@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : jkadlcik-devel
>---------------------------------------------------------------
commit af615e2f66157d9a349ae1e4bfa22ac4935e6013
Author: Jakub Kadlčík <jkadlcik(a)redhat.com>
Date: Tue Oct 20 16:00:10 2015 +0200
[frontend] print disabled download buttons when there are no builds
>---------------------------------------------------------------
.../coprs/templates/coprs/detail/overview.html | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html
index b463b6d..023eb23 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html
@@ -61,12 +61,12 @@
{% endfor %}
</td>
<td>
- <a class="btn btn-default btn-margin" href="{{ repo_rpm_href(copr, repo) }}">
+ <a class="btn btn-default btn-margin {% if not latest_build %}disabled{% endif %}" href="{{ repo_rpm_href(copr, repo) }}">
<span class="pficon pficon-save"> {{ repo.name_release_human|capitalize }}</span>
</a>
</td>
<td class="rightmost">
- <a class="btn btn-default btn-margin" href="{{ repo_file_href(copr, repo) }}">
+ <a class="btn btn-default btn-margin {% if not latest_build %}disabled{% endif %}" href="{{ repo_file_href(copr, repo) }}">
<span class="pficon pficon-save"> {{ repo.name_release_human|capitalize }}</span>
</a>
<small class="text-muted"> ({{ repo.dl_stat }} downloads) </small>
8 years, 6 months
[copr] jkadlcik-devel: [python] install also client_v2 (4be930a)
by frostyx@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : jkadlcik-devel
>---------------------------------------------------------------
commit 4be930aec2194db3a35bb22ac00b59275a239fa3
Author: Jakub Kadlčík <jkadlcik(a)redhat.com>
Date: Tue Oct 20 12:43:08 2015 +0200
[python] install also client_v2
>---------------------------------------------------------------
python/python-copr.spec | 1 +
python/setup.py | 2 +-
2 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/python/python-copr.spec b/python/python-copr.spec
index 322c4b7..5eff9b7 100644
--- a/python/python-copr.spec
+++ b/python/python-copr.spec
@@ -41,6 +41,7 @@ Requires: python-setuptools
Requires: python-six
Requires: python-requests
Requires: python-requests-toolbelt
+Requires: python-marshmallow
%description
COPR is lightweight build system. It allows you to create new project in WebUI,
diff --git a/python/setup.py b/python/setup.py
index fa3727f..5b853c3 100644
--- a/python/setup.py
+++ b/python/setup.py
@@ -42,7 +42,7 @@ setup(
"Development Status :: 1 - Alpha",
],
install_requires=requires,
- packages=['copr', 'copr.client', 'copr.test'],
+ packages=['copr', 'copr.client', 'copr.client_v2', 'copr.test'],
include_package_data=True,
zip_safe=False,
)
8 years, 6 months
[copr] jkadlcik-devel: [backend] sign repo packages (ba0fdc2)
by frostyx@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : jkadlcik-devel
>---------------------------------------------------------------
commit ba0fdc27a215e6e657cfe48d49b43267c7c29150
Author: Jakub Kadlčík <jkadlcik(a)redhat.com>
Date: Tue Oct 20 14:25:16 2015 +0200
[backend] sign repo packages
>---------------------------------------------------------------
backend/run/copr_generate_repo_packages.py | 11 +++++++++--
1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/backend/run/copr_generate_repo_packages.py b/backend/run/copr_generate_repo_packages.py
index bf2a25c..1e3baad 100755
--- a/backend/run/copr_generate_repo_packages.py
+++ b/backend/run/copr_generate_repo_packages.py
@@ -17,6 +17,7 @@ import shutil
import subprocess
import logging
from six.moves.urllib.parse import urljoin
+from copr import create_client2_from_params
here = os.path.dirname(os.path.realpath(__file__))
import sys
@@ -24,7 +25,7 @@ sys.path.append(os.path.dirname(here))
sys.path.append("/usr/share/copr/")
from backend.helpers import get_backend_opts
-from copr import create_client2_from_params
+from backend.sign import sign_rpms_in_dir
# ----------------------------------------------------------------------------------------------------------------------
@@ -52,12 +53,14 @@ class RepoRpmBuilder(object):
RPM_NAME_FORMAT = "copr-repo-{}-{}-{}-{}-1-1.noarch.rpm"
SPEC_NAME = "copr-repo-package.spec"
- def __init__(self, user, copr, chroot, topdir=RPMBUILD, resdir=RESULTS_DIR):
+ def __init__(self, user, copr, chroot, topdir=RPMBUILD, resdir=RESULTS_DIR, opts=opts, log=log):
self.user = user # Name of the user
self.copr = copr # Name of the copr
self.chroot = chroot # MockChroot object
self.topdir = topdir # rpmbuild directory (default $HOME/rpmbuild)
self.resdir = resdir # Backend results directory accessible via http
+ self.opts = opts
+ self.log = log
@property
def os_release(self):
@@ -130,6 +133,9 @@ class RepoRpmBuilder(object):
if process.returncode != 0:
raise RuntimeError("Failed rpmbuild for: {}\n{}".format(self.repo_name, err))
+ def sign(self):
+ sign_rpms_in_dir(self.user, self.copr, self.rpm_dir, self.opts, self.log)
+
# ----------------------------------------------------------------------------------------------------------------------
@@ -170,6 +176,7 @@ def main():
try:
builder.generate_repo_package()
log.info("Created RPM package for: {}".format(builder.repo_name))
+ builder.sign()
except RuntimeError as e:
log.error(e.message)
8 years, 6 months
[copr] jkadlcik-devel: [frontend] use APIv2 instead of database Prepare to migrating this feature to backend which has limited access to it. (a643971)
by frostyx@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : jkadlcik-devel
>---------------------------------------------------------------
commit a64397166f40810f6bc0e0ed9c0b87d38e09ce38
Author: Jakub Kadlčík <jkadlcik(a)redhat.com>
Date: Mon Oct 19 20:02:05 2015 +0200
[frontend] use APIv2 instead of database
Prepare to migrating this feature to backend which has limited
access to it.
>---------------------------------------------------------------
.../coprs_frontend/run/generate_repo_packages.py | 35 +++++++++++++------
1 files changed, 24 insertions(+), 11 deletions(-)
diff --git a/frontend/coprs_frontend/run/generate_repo_packages.py b/frontend/coprs_frontend/run/generate_repo_packages.py
index 2ed2533..c93ddaf 100644
--- a/frontend/coprs_frontend/run/generate_repo_packages.py
+++ b/frontend/coprs_frontend/run/generate_repo_packages.py
@@ -23,7 +23,7 @@ import sys
sys.path.append(os.path.dirname(here))
from coprs import app
-from coprs.logic.coprs_logic import CoprsLogic
+from copr import create_client2_from_params
# ----------------------------------------------------------------------------------------------------------------------
@@ -44,6 +44,7 @@ RELEASE = 1
# ----------------------------------------------------------------------------------------------------------------------
log = logging.getLogger(__name__)
+client = create_client2_from_params(FRONTEND_URL)
class RepoRpmBuilder(object):
@@ -60,22 +61,33 @@ class RepoRpmBuilder(object):
@property
def rpm_name(self):
- version = self.chroot.os_version
# All Fedora releases except for rawhide has same .repo file
- if self.chroot.os_release == "fedora" and self.chroot.os_version.isdigit():
+ if self.os_release == "fedora" and self.os_version.isdigit():
version = "all"
- return self.RPM_NAME_FORMAT.format(self.user, self.copr, self.chroot.os_release, version)
+ return self.RPM_NAME_FORMAT.format(self.user, self.copr, self.os_release, self.os_version)
+
+ @property
+ def os_release(self):
+ return self.chroot.name.split("-")[0]
+
+ @property
+ def os_version(self):
+ return self.chroot.name.split("-")[1]
+
+ @property
+ def name_release(self):
+ return self.chroot.name[:self.chroot.name.rindex("-")]
@property
def repo_name(self):
return "{}-{}-{}-{}.repo"\
- .format(self.user, self.copr, self.chroot.os_release, self.chroot.os_version)
+ .format(self.user, self.copr, self.os_release, self.os_version)
def has_repo_package(self):
return os.path.isfile(os.path.join(self.packagesdir, self.rpm_name))
def get_repofile(self):
- api = "coprs/{}/{}/repo/{}/{}".format(self.user, self.copr, self.chroot.name_release, self.repo_name)
+ api = "coprs/{}/{}/repo/{}/{}".format(self.user, self.copr, self.name_release, self.repo_name)
url = urljoin(FRONTEND_URL, api)
r = requests.get(url)
if r.status_code != 200:
@@ -99,7 +111,7 @@ class RepoRpmBuilder(object):
"-D", "pkg_release {}".format(RELEASE),
"-D", "user {}".format(self.user),
"-D", "copr {}".format(self.copr),
- "-D", "chroot {}".format("{}-{}".format(self.chroot.os_release, self.chroot.os_version)),
+ "-D", "chroot {}".format("{}-{}".format(self.os_release, self.os_version)),
"-D", "repofile {}".format("_copr_{}-{}.repo".format(self.user, self.copr)),
]
@@ -115,7 +127,7 @@ class RepoRpmBuilder(object):
def all_coprs():
- return CoprsLogic.get_all()
+ return list(client.projects.get_list(limit=99999))
# ----------------------------------------------------------------------------------------------------------------------
@@ -135,8 +147,9 @@ def prepare_packages_directory():
def unique_chroots(copr):
d = {}
- for chroot in copr.active_chroots:
- d[chroot.name_release] = chroot
+ for chroot in client.project_chroots.get_list(copr):
+ name_release = chroot.name[:chroot.name.rindex("-")]
+ d[name_release] = chroot
return d.values()
@@ -146,7 +159,7 @@ def main():
for copr in all_coprs():
for chroot in unique_chroots(copr):
- builder = RepoRpmBuilder(user=copr.owner.name, copr=copr.name, chroot=chroot)
+ builder = RepoRpmBuilder(user=copr.owner, copr=copr.name, chroot=chroot)
if builder.has_repo_package():
log.info("Skipping {}".format(builder.repo_name))
8 years, 6 months
[copr] jkadlcik-devel: [frontend][backend] move generating repo packages to backend (4a52e2a)
by frostyx@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : jkadlcik-devel
>---------------------------------------------------------------
commit 4a52e2a23bb1527510964472a4311db2f0621023
Author: Jakub Kadlčík <jkadlcik(a)redhat.com>
Date: Tue Oct 20 13:24:19 2015 +0200
[frontend][backend] move generating repo packages to backend
>---------------------------------------------------------------
.../backend/static}/copr-repo-package.spec | 0
backend/copr-backend.spec | 1 +
.../run/copr_generate_repo_packages.py | 62 ++++++++++----------
.../coprs/views/coprs_ns/coprs_general.py | 16 +----
4 files changed, 37 insertions(+), 42 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/copr-repo-package.spec b/backend/backend/static/copr-repo-package.spec
similarity index 100%
rename from frontend/coprs_frontend/coprs/templates/coprs/copr-repo-package.spec
rename to backend/backend/static/copr-repo-package.spec
diff --git a/backend/copr-backend.spec b/backend/copr-backend.spec
index 8abb276..0b52c4a 100644
--- a/backend/copr-backend.spec
+++ b/backend/copr-backend.spec
@@ -88,6 +88,7 @@ Requires: python-lockfile
Requires: logstash
Requires: libappstream-glib-builder >= 0.4.0
# Requires: python-plumbum
+Requires: rpmdevtools
Requires(post): systemd
Requires(preun): systemd
diff --git a/frontend/coprs_frontend/run/generate_repo_packages.py b/backend/run/copr_generate_repo_packages.py
old mode 100644
new mode 100755
similarity index 79%
rename from frontend/coprs_frontend/run/generate_repo_packages.py
rename to backend/run/copr_generate_repo_packages.py
index c93ddaf..bf2a25c
--- a/frontend/coprs_frontend/run/generate_repo_packages.py
+++ b/backend/run/copr_generate_repo_packages.py
@@ -2,8 +2,8 @@
# -*- coding: utf-8 -*-
# RUN
-# cd frontend/coprs_frontend
-# COPR_CONFIG=../config/copr_devel.conf python run/generate_repo_packages.py
+# cd backend
+# python run/copr_generate_repo_packages.py -c ./conf/copr-be.local.conf
from __future__ import print_function
@@ -21,19 +21,19 @@ from six.moves.urllib.parse import urljoin
here = os.path.dirname(os.path.realpath(__file__))
import sys
sys.path.append(os.path.dirname(here))
+sys.path.append("/usr/share/copr/")
-from coprs import app
+from backend.helpers import get_backend_opts
from copr import create_client2_from_params
# ----------------------------------------------------------------------------------------------------------------------
-hostname = app.config["PUBLIC_COPR_HOSTNAME"]
-scheme = "https" if hostname == "copr.fedoraproject.org" else "http" # Workaround to broken enforce https on fe-dev
+opts = get_backend_opts()
-FRONTEND_URL = "{}://{}".format(scheme, hostname)
-FRONTEND_DIR = os.path.dirname(here)
-PACKAGES_DIR = os.path.join(app.config["DATA_DIR"], "repo-rpm-packages")
+FRONTEND_URL = opts.frontend_base_url
+BACKEND_DIR = "/usr/share/copr" if here == "/usr/bin" else os.path.dirname(here)
+RESULTS_DIR = opts.destdir
RPMBUILD = os.path.join(os.path.expanduser("~"), "rpmbuild")
LOG_FILE = "/var/log/copr/repo-packages.log"
@@ -52,19 +52,12 @@ class RepoRpmBuilder(object):
RPM_NAME_FORMAT = "copr-repo-{}-{}-{}-{}-1-1.noarch.rpm"
SPEC_NAME = "copr-repo-package.spec"
- def __init__(self, user, copr, chroot, topdir=RPMBUILD, packagesdir=PACKAGES_DIR):
- self.user = user # Name of the user
- self.copr = copr # Name of the copr
- self.chroot = chroot # MockChroot object
- self.topdir = topdir # rpmbuild directory (default $HOME/rpmbuild)
- self.packagesdir = packagesdir # Directory where to store the rpm packages
-
- @property
- def rpm_name(self):
- # All Fedora releases except for rawhide has same .repo file
- if self.os_release == "fedora" and self.os_version.isdigit():
- version = "all"
- return self.RPM_NAME_FORMAT.format(self.user, self.copr, self.os_release, self.os_version)
+ def __init__(self, user, copr, chroot, topdir=RPMBUILD, resdir=RESULTS_DIR):
+ self.user = user # Name of the user
+ self.copr = copr # Name of the copr
+ self.chroot = chroot # MockChroot object
+ self.topdir = topdir # rpmbuild directory (default $HOME/rpmbuild)
+ self.resdir = resdir # Backend results directory accessible via http
@property
def os_release(self):
@@ -79,12 +72,24 @@ class RepoRpmBuilder(object):
return self.chroot.name[:self.chroot.name.rindex("-")]
@property
+ def rpm_name(self):
+ version = self.os_version
+ # All Fedora releases except for rawhide has same .repo file
+ if self.os_release == "fedora" and self.os_version.isdigit():
+ version = "all"
+ return self.RPM_NAME_FORMAT.format(self.user, self.copr, self.os_release, version)
+
+ @property
+ def rpm_dir(self):
+ return os.path.join(self.resdir, self.user, self.copr, "repo-packages")
+
+ @property
def repo_name(self):
return "{}-{}-{}-{}.repo"\
.format(self.user, self.copr, self.os_release, self.os_version)
def has_repo_package(self):
- return os.path.isfile(os.path.join(self.packagesdir, self.rpm_name))
+ return os.path.isfile(os.path.join(self.rpm_dir, self.rpm_name))
def get_repofile(self):
api = "coprs/{}/{}/repo/{}/{}".format(self.user, self.copr, self.name_release, self.repo_name)
@@ -96,15 +101,18 @@ class RepoRpmBuilder(object):
def generate_repo_package(self):
- shutil.copyfile(os.path.join(FRONTEND_DIR, "coprs/templates/coprs/", self.SPEC_NAME),
+ shutil.copyfile(os.path.join(BACKEND_DIR, "backend/static/", self.SPEC_NAME),
os.path.join(self.topdir, "SPECS", self.SPEC_NAME))
with open(os.path.join(self.topdir, "SOURCES", self.repo_name), "w") as f:
f.writelines(self.get_repofile())
+ if not os.path.exists(self.rpm_dir):
+ os.makedirs(self.rpm_dir)
+
defines = [
"-D", "_topdir {}".format(self.topdir),
- "-D", "_rpmdir {}".format(self.packagesdir),
+ "-D", "_rpmdir {}".format(self.rpm_dir),
"-D", "_rpmfilename {}".format(self.rpm_name),
"-D", "pkg_name {}".format("copr-repo-{}-{}".format(self.user, self.copr)),
"-D", "pkg_version {}".format(VERSION),
@@ -140,11 +148,6 @@ def prepare_rpmbuild_directory():
os.makedirs(d)
-def prepare_packages_directory():
- if not os.path.exists(PACKAGES_DIR):
- os.makedirs(PACKAGES_DIR)
-
-
def unique_chroots(copr):
d = {}
for chroot in client.project_chroots.get_list(copr):
@@ -155,7 +158,6 @@ def unique_chroots(copr):
def main():
prepare_rpmbuild_directory()
- prepare_packages_directory()
for copr in all_coprs():
for chroot in unique_chroots(copr):
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 b168e21..15b0c8d 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -735,18 +735,10 @@ def render_generate_repo_file(copr, name_release, repofile):
@coprs_ns.route("/<username>/<coprname>/rpm/<name_release>/<rpmfile>")
def copr_repo_rpm_file(username, coprname, name_release, rpmfile):
rpmsplit = rpmfile.split("-")
- if rpmsplit[4] == "fedora" and rpmsplit[5].isdigit():
- rpmfile = "-".join(rpmsplit[:5] + ["all"] + rpmsplit[6:])
- try:
- packages_dir = os.path.join(app.config["DATA_DIR"], "repo-rpm-packages")
- with open(os.path.join(packages_dir, rpmfile), "rb") as rpm:
- response = flask.make_response(rpm.read())
- response.mimetype = "application/x-rpm"
- response.headers["Content-Disposition"] = \
- "filename={0}".format(rpmfile)
- return response
- except IOError:
- return flask.render_template("404.html")
+ if rpmsplit[-4] == "fedora" and rpmsplit[-3].isdigit():
+ rpmfile = "-".join(rpmsplit[:-3] + ["all"] + rpmsplit[-2:])
+ return flask.redirect(os.path.join(app.config["BACKEND_BASE_URL"], "results",
+ username, coprname, "repo-packages", rpmfile))
def render_monitor(copr, detailed=False):
8 years, 6 months
[copr] jkadlcik-devel: [frontend] add link for downloading repo package (92150ff)
by frostyx@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : jkadlcik-devel
>---------------------------------------------------------------
commit 92150ff90c1083d7050a43107dc4f16fa6c58ce7
Author: Jakub Kadlčík <jkadlcik(a)redhat.com>
Date: Mon Oct 19 17:28:52 2015 +0200
[frontend] add link for downloading repo package
>---------------------------------------------------------------
.../coprs_frontend/coprs/templates/_helpers.html | 11 +++++++++++
.../coprs/templates/coprs/detail/overview.html | 8 +++++++-
.../coprs/views/coprs_ns/coprs_general.py | 3 +++
3 files changed, 21 insertions(+), 1 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/templates/_helpers.html b/frontend/coprs_frontend/coprs/templates/_helpers.html
index faf4355..35ce76b 100644
--- a/frontend/coprs_frontend/coprs/templates/_helpers.html
+++ b/frontend/coprs_frontend/coprs/templates/_helpers.html
@@ -295,3 +295,14 @@ https://admin.fedoraproject.org/accounts/group/view/{{name}}
{% endif %}
{% endmacro %}
+
+
+{% macro repo_rpm_href(copr, repo) %}
+{{url_for('coprs_ns.copr_repo_rpm_file',
+username=copr.owner.name,
+coprname=copr.name,
+name_release=repo.name_release,
+rpmfile="copr-repo-{}-1-1.noarch.rpm".format(repo.repo_file.replace(".repo", "")),
+_external=True
+)|fix_url_https_frontend}}
+{% endmacro %}
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html
index d71ef06..b463b6d 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/overview.html
@@ -1,7 +1,7 @@
{% extends "coprs/detail.html" %}
{% from "coprs/_coprs_forms.html" import copr_legal_flag_form with context %}
-{% from "_helpers.html" import chroot_to_os_logo, copr_name, build_href, repo_file_href %}
+{% from "_helpers.html" import chroot_to_os_logo, copr_name, build_href, repo_file_href, repo_rpm_href %}
{% set selected_tab = "overview" %}
@@ -41,6 +41,7 @@
<tr>
<th>Release</th>
<th>Architectures</th>
+ <th>Quick Enable</th>
<th>Repo Download </th>
</tr>
</thead>
@@ -59,6 +60,11 @@
<small class="text-muted"> ({{ repo.rpm_dl_stat[arch] }})*</small>{% if not loop.last %}, {% endif %}
{% endfor %}
</td>
+ <td>
+ <a class="btn btn-default btn-margin" href="{{ repo_rpm_href(copr, repo) }}">
+ <span class="pficon pficon-save"> {{ repo.name_release_human|capitalize }}</span>
+ </a>
+ </td>
<td class="rightmost">
<a class="btn btn-default btn-margin" href="{{ repo_file_href(copr, repo) }}">
<span class="pficon pficon-save"> {{ repo.name_release_human|capitalize }}</span>
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 75c0312..b168e21 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -734,6 +734,9 @@ def render_generate_repo_file(copr, name_release, repofile):
@coprs_ns.route("/<username>/<coprname>/rpm/<name_release>/<rpmfile>")
def copr_repo_rpm_file(username, coprname, name_release, rpmfile):
+ rpmsplit = rpmfile.split("-")
+ if rpmsplit[4] == "fedora" and rpmsplit[5].isdigit():
+ rpmfile = "-".join(rpmsplit[:5] + ["all"] + rpmsplit[6:])
try:
packages_dir = os.path.join(app.config["DATA_DIR"], "repo-rpm-packages")
with open(os.path.join(packages_dir, rpmfile), "rb") as rpm:
8 years, 6 months
[copr] master: [python] support APIv2 (89cf42e)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 89cf42ea7c462d22a77b7f5b71d7070b9fce5729
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Fri Sep 18 11:57:40 2015 +0200
[python] support APIv2
>---------------------------------------------------------------
Diff suppressed because of size. To see it, use:
git diff --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol ^89cf42ea7c462d22a77b7f5b71d7070b9fce5729~1 89cf42ea7c462d22a77b7f5b71d7070b9fce5729
8 years, 6 months
[copr] master: Merge branch 'frontend-python3' (f03b309)
by frostyx@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit f03b3097a39c5ae9e08b170121c1851186f04565
Merge: 62fcc42 b9825ef
Author: Jakub Kadlčík <jkadlcik(a)redhat.com>
Date: Mon Oct 19 15:20:43 2015 +0200
Merge branch 'frontend-python3'
* frontend-python3:
[frontend] still run on python2 until we get all py3 dependencies
[frontend] use integers division
[frontend] run on python3 from apache
[frontend] specify python3 dependencies
[frontend] use print function instead of statement
[frontend] run tests in python3 interpreter
[frontend][api 2] don't assert url parameters in fixed order Flask's url_for can generate them randomly
[frontend] sort by argument 'key' instead of 'cmp'
[frontend] explicitly cast map results to list On python3, the result of a map function is an iterator, not list
[frontend] do the str/bytes/unicode py2/3 compatibility magic
[frontend] use dict items() instead of iteritems()
[frontend] use python2/3 compatible metaclasses
[frontend] fix import path of rest_api
[frontend] use rpmutils provided by DNF
[frontend] use six.moves.urllib instead of py2 only urllib
>---------------------------------------------------------------
Diff suppressed because of size. To see it, use:
git diff --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol ^f03b3097a39c5ae9e08b170121c1851186f04565~1 f03b3097a39c5ae9e08b170121c1851186f04565
8 years, 6 months