Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 7c4eba7867e14cf9628ee319934010a05e284419
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Mon Mar 23 10:49:42 2015 +0100
[backend][frontend] Send for delete action only `src_pkg_name` instead of original
URL.
---------------------------------------------------------------
backend/backend/actions.py | 8 +++---
backend/tests/test_action.py | 8 +++---
.../coprs_frontend/coprs/logic/builds_logic.py | 8 ++++-
.../tests/test_logic/test_builds_logic.py | 26 ++++++++++++++++++++
.../test_views/test_coprs_ns/test_coprs_builds.py | 8 ++++--
5 files changed, 45 insertions(+), 13 deletions(-)
diff --git a/backend/backend/actions.py b/backend/backend/actions.py
index c195100..1c178c8 100644
--- a/backend/backend/actions.py
+++ b/backend/backend/actions.py
@@ -106,12 +106,12 @@ class Action(object):
projectname = ext_data["projectname"]
chroots_requested = set(ext_data["chroots"])
- package_name =
os.path.basename(ext_data["pkgs"]).replace(".src.rpm", "")
- # TODO: replace with explicit pkg_name, send cleaned string into the action
- if not package_name:
- self.add_event("Bad package name {}, action data: {}
".format(package_name, ext_data))
+ if not ext_data.get("src_pkg_name"):
+ self.add_event("Delete build action missing `src_pkg_name` field, check
frontend version. Raw ext_data: {}"
+ .format(ext_data))
return
+ package_name = ext_data["src_pkg_name"]
path = os.path.join(self.destdir, project)
self.add_event("Deleting package {0}".format(package_name))
diff --git a/backend/tests/test_action.py b/backend/tests/test_action.py
index 2ca6d47..08fb806 100644
--- a/backend/tests/test_action.py
+++ b/backend/tests/test_action.py
@@ -59,7 +59,7 @@ class TestAction(object):
self.pkgs_stripped = ["foo"]
self.ext_data_for_delete_build = json.dumps({
- "pkgs": " ".join(self.pkgs),
+ "src_pkg_name": self.pkgs_stripped[0],
"username": "foo",
"projectname": "bar",
"chroots": ["fedora20", "epel7"]
@@ -514,7 +514,7 @@ class TestAction(object):
"id": 15,
"old_value": "old_dir",
"data": json.dumps({
- "pkgs": "rubygem-log4r-1.1.10-2.fc21.src.rpm",
+ "src_pkg_name": "rubygem-log4r-1.1.10-2.fc21",
"username": "foo",
"projectname": "bar",
"chroots": ["fedora-20-x86_64",
"fedora-21-x86_64"]
@@ -583,7 +583,7 @@ class TestAction(object):
"id": 15,
"old_value": "old_dir",
"data": json.dumps({
- "pkgs": "rubygem-log4r-1.1.10-2.fc21.src.rpm",
+ "src_pkg_name": "rubygem-log4r-1.1.10-2.fc21",
"username": "foo",
"projectname": "bar",
"chroots": ["fedora-20-x86_64",
"fedora-21-x86_64"]
@@ -636,7 +636,7 @@ class TestAction(object):
"id": 15,
"old_value": "old_dir",
"data": json.dumps({
- "pkgs": "http://example.com/",
+ "src_pkg_name": "",
"username": "foo",
"projectname": "bar",
"chroots": ["fedora-20-x86_64",
"fedora-21-x86_64"]
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py
b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index 0e839b3..2712e48 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -212,6 +212,10 @@ class BuildsLogic(object):
@classmethod
def delete_build(cls, user, build):
+ """
+ :type user: models.User
+ :type build: models.Build
+ """
if not user.can_build_in(build.copr):
raise exceptions.InsufficientRightsException(
"You are not allowed to delete this build.")
@@ -229,8 +233,8 @@ class BuildsLogic(object):
if chroot.state not in ["skipped"]
]
- if chroots_to_delete:
- data_dict = {"pkgs": build.pkgs,
+ if chroots_to_delete and build.src_pkg_name:
+ data_dict = {"src_pkg_name": build.src_pkg_name,
"username": build.copr.owner.name,
"projectname": build.copr.name,
"chroots": chroots_to_delete}
diff --git a/frontend/coprs_frontend/tests/test_logic/test_builds_logic.py
b/frontend/coprs_frontend/tests/test_logic/test_builds_logic.py
index e8a375e..9423c36 100644
--- a/frontend/coprs_frontend/tests/test_logic/test_builds_logic.py
+++ b/frontend/coprs_frontend/tests/test_logic/test_builds_logic.py
@@ -120,6 +120,9 @@ class TestBuildsLogic(CoprsTestCase):
def test_delete_build_basic(
self, f_users, f_coprs, f_mock_chroots, f_builds, f_db):
+
+ self.b1.pkgs = "http://example.com/copr-keygen-1.58-1.fc20.src.rpm"
+ self.db.session.add(self.b1)
self.db.session.commit()
expected_chroots_to_delete = set()
@@ -134,11 +137,32 @@ class TestBuildsLogic(CoprsTestCase):
action = ActionsLogic.get_many().one()
delete_data = json.loads(action.data)
assert "chroots" in delete_data
+ assert "copr-keygen-1.58-1.fc20" ==
delete_data["src_pkg_name"]
assert expected_chroots_to_delete == set(delete_data["chroots"])
with pytest.raises(NoResultFound):
BuildsLogic.get(self.b1.id).one()
+ def test_delete_build_bad_src_pkg(
+ self, f_users, f_coprs, f_mock_chroots, f_builds, f_db):
+
+ self.b1.pkgs = "http://example.com/"
+ self.db.session.add(self.b1)
+ self.db.session.commit()
+
+ expected_chroots_to_delete = set()
+ for bchroot in self.b1_bc:
+ expected_chroots_to_delete.add(bchroot.name)
+
+ assert len(ActionsLogic.get_many().all()) == 0
+ BuildsLogic.delete_build(self.u1, self.b1)
+ self.db.session.commit()
+
+ assert len(ActionsLogic.get_many().all()) == 0
+
+ with pytest.raises(NoResultFound):
+ BuildsLogic.get(self.b1.id).one()
+
def test_delete_build_no_chroots_to_clean(
self, f_users, f_coprs, f_mock_chroots, f_builds, f_db):
@@ -159,6 +183,8 @@ class TestBuildsLogic(CoprsTestCase):
for bchroot in self.b1_bc[1:-1]:
bchroot.status = helpers.StatusEnum("skipped")
+ self.b1.pkgs = "http://example.com/copr-keygen-1.58-1.fc20.src.rpm"
+ self.db.session.add(self.b1)
self.db.session.commit()
assert len(ActionsLogic.get_many().all()) == 0
diff --git a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
index 393b00e..d8cbf08 100644
--- a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
+++ b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
@@ -104,9 +104,11 @@ class TestCoprDeleteBuild(CoprsTestCase):
f_coprs, f_mock_chroots,
f_builds, f_db):
- self.db.session.add_all([self.u1, self.c1, self.b1])
- pkgs = "one two three"
+ pkgs = "http://example.com/one.src.rpm"
self.b1.pkgs = pkgs
+ self.db.session.add_all([self.u1, self.c1, self.b1])
+ self.db.session.commit()
+
r = self.test_client.post(
"/coprs/{0}/{1}/delete_build/{2}/"
.format(self.u1.name, self.c1.name, self.b1.id),
@@ -120,7 +122,7 @@ class TestCoprDeleteBuild(CoprsTestCase):
act = self.models.Action.query.first()
assert act.object_type == "build"
assert act.old_value == "user1/foocopr"
- assert json.loads(act.data)["pkgs"] == pkgs
+ assert json.loads(act.data)["src_pkg_name"] == self.b1.src_pkg_name
@TransactionDecorator("u2")
def test_copr_build_non_submitter_cannot_delete_build(self, f_users,