1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_packages.py b/coprs_frontend/coprs/views/coprs_ns/coprs_packages.py
index 527c73d1..0874214d 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_packages.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_packages.py
@@ -1,7 +1,10 @@
+from os.path import dirname,basename
+import requests
import flask
from flask import stream_with_context
from flask import send_file
+from copr_common.enums import StatusEnum
from coprs import app
from coprs import db
from coprs import forms
@@ -27,7 +30,6 @@ from coprs.exceptions import (ActionInProgressException, ObjectNotFound, NoPacka
InsufficientRightsException, MalformedArgumentException)
-
@coprs_ns.route("/<username>/<coprname>/packages/")
@coprs_ns.route("/g/<group_name>/<coprname>/packages/")
@req_with_copr
@@ -122,6 +124,44 @@ def copr_rebuild_all_packages(copr):
form=form, copr=copr)
+@coprs_ns.route("/<username>/<coprname>/package/<package_name>/add_openeuler_pkg")
+@coprs_ns.route("/g/<group_name>/<coprname>/package/<package_name>/add_openeuler_pkg")
+@req_with_copr
+def copr_add_openeuler_package(copr, package_name):
+ base_url = app.config.get("OPENEULER_PKG_ENDPOINT", "")
+ if not base_url:
+ flask.flash(f"Package contribute service is not configured.", "error")
+ return flask.redirect(helpers.copr_url("coprs_ns.copr_package", copr, package_name=package_name))
+
+ build = ComplexLogic.get_package_safe(copr, package_name).last_build(True)
+ if not build:
+ flask.flash(f"Package {package_name} doest not contain any successful build.", "error")
+ return flask.redirect(helpers.copr_url("coprs_ns.copr_package", copr, package_name=package_name))
+
+ src_rpm_url = "/".join([build.result_dir_url, basename(build.srpm_url)])
+ if not requests.get(src_rpm_url).ok:
+ flask.flash(f"Package {package_name} srpm url{src_rpm_url} is invalid, maybe the build was pruned, please rebuild and try again.", "error")
+ return flask.redirect(helpers.copr_url("coprs_ns.copr_package", copr, package_name=package_name))
+
+ spec_url = "/".join([build.result_dir_url, f"{package_name}.spec"])
+ if not requests.get(spec_url).ok:
+ bcs = build.get_chroots_by_status([StatusEnum("succeeded")])
+ spec_url = ""
+ for bc in bcs:
+ tmp_url = "/".join([bc.result_dir_url, f"{package_name}.spec"])
+ if requests.get(tmp_url).ok:
+ spec_url = tmp_url
+ break
+ if not spec_url:
+ flask.flash(f"Package {package_name} spec url is invalid, maybe the build was pruned, please rebuild and try again.", "error")
+ return flask.redirect(helpers.copr_url("coprs_ns.copr_package", copr, package_name=package_name))
+
+ pkg_url = flask.request.url_root + dirname(flask.request.path)
+ desc = f"This package is imported from EUR: {pkg_url}"
+ url = f"{base_url}?pkg_name={package_name}&desc={desc}&src_rpm_url={src_rpm_url}&spec_url={spec_url}&sig=ecopkg"
+ return flask.redirect(url)
+
+
@coprs_ns.route("/<username>/<coprname>/package/<package_name>/rebuild")
@coprs_ns.route("/g/<group_name>/<coprname>/package/<package_name>/rebuild")
@req_with_copr
|