summaryrefslogtreecommitdiff
path: root/add_openeuler_pkg.patch
blob: 69f5438b604e356efba6c8abf3caea3521de380b (plain)
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