Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit d38b0d6531c877ad7be1b9686af88b511ff21fba
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Mon Aug 3 18:40:02 2015 +0200
[frontend] delete action now supports new build results naming schema
---------------------------------------------------------------
backend/backend/actions.py | 1 -
.../coprs_frontend/coprs/logic/actions_logic.py | 37 ++++++++++++++++++++
.../coprs_frontend/coprs/logic/builds_logic.py | 24 +------------
frontend/coprs_frontend/coprs/models.py | 6 +++
.../tests/test_logic/test_builds_logic.py | 3 ++
5 files changed, 48 insertions(+), 23 deletions(-)
diff --git a/backend/backend/actions.py b/backend/backend/actions.py
index 4fb68f0..5670ee9 100644
--- a/backend/backend/actions.py
+++ b/backend/backend/actions.py
@@ -125,7 +125,6 @@ class Action(object):
return
path = os.path.join(self.destdir, project)
-
self.log.info("Deleting package {0}".format(target_dir))
self.log.info("Copr path {0}".format(path))
diff --git a/frontend/coprs_frontend/coprs/logic/actions_logic.py
b/frontend/coprs_frontend/coprs/logic/actions_logic.py
index a32dfe7..9d47a85 100644
--- a/frontend/coprs_frontend/coprs/logic/actions_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/actions_logic.py
@@ -82,3 +82,40 @@ class ActionsLogic(object):
created_on=int(time.time()),
)
db.session.add(action)
+
+ @classmethod
+ def send_delete_build(cls, build):
+ """ Schedules build delete action
+ :type build: models.Build
+ """
+ # don't delete skipped chroots
+ chroots_to_delete = [
+ chroot.name for chroot in build.build_chroots
+ if chroot.state not in ["skipped"]
+ ]
+ if len(chroots_to_delete) == 0:
+ return
+
+ data_dict = {
+ "username": build.copr.owner.name,
+ "projectname": build.copr.name,
+ "chroots": chroots_to_delete
+ }
+ # import ipdb; ipdb.set_trace()
+ if build.is_older_results_naming_used:
+ if build.src_pkg_name is None or build.src_pkg_name == "":
+ return
+ data_dict["src_pkg_name"] = build.src_pkg_name
+ else:
+ data_dict["results_dir_name"] = build.result_dir_name
+
+ action = models.Action(
+ action_type=helpers.ActionTypeEnum("delete"),
+ object_type="build",
+ object_id=build.id,
+ old_value="{0}/{1}".format(build.copr.owner.name,
+ build.copr.name),
+ data=json.dumps(data_dict),
+ created_on=int(time.time())
+ )
+ db.session.add(action)
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py
b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index f609582..473f2b4 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -20,6 +20,7 @@ from coprs.helpers import StatusEnum
from coprs.logic import coprs_logic
from coprs.logic import users_logic
from coprs.logic import packages_logic
+from coprs.logic.actions_logic import ActionsLogic
log = app.logger
@@ -345,28 +346,7 @@ class BuildsLogic(object):
# Only failed, finished, succeeded get here.
if build.state not in ["cancelled"]: # has nothing in backend to
delete
- # don't delete skipped chroots
- chroots_to_delete = [
- chroot.name for chroot in build.build_chroots
- if chroot.state not in ["skipped"]
- ]
-
- 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}
-
- action = models.Action(
- action_type=helpers.ActionTypeEnum("delete"),
- object_type="build",
- object_id=build.id,
- old_value="{0}/{1}".format(build.copr.owner.name,
- build.copr.name),
- data=json.dumps(data_dict),
- created_on=int(time.time())
- )
- db.session.add(action)
+ ActionsLogic.send_delete_build(build)
for build_chroot in build.build_chroots:
db.session.delete(build_chroot)
diff --git a/frontend/coprs_frontend/coprs/models.py
b/frontend/coprs_frontend/coprs/models.py
index aa3547f..bf037b8 100644
--- a/frontend/coprs_frontend/coprs/models.py
+++ b/frontend/coprs_frontend/coprs/models.py
@@ -364,6 +364,12 @@ class Build(db.Model, helpers.Serializer):
chroots = association_proxy("build_chroots", "mock_chroot")
@property
+ def is_older_results_naming_used(self):
+ # we have changed result directory naming together with transition to dist-git
+ # that's why we use so strange criterion
+ return self.build_chroots[0].git_hash is None
+
+ @property
def result_dir_name(self):
return "{:08d}-{}".format(self.id, self.package.name)
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 f5d9e08..4c6dfbc 100644
--- a/frontend/coprs_frontend/tests/test_logic/test_builds_logic.py
+++ b/frontend/coprs_frontend/tests/test_logic/test_builds_logic.py
@@ -205,12 +205,15 @@ class TestBuildsLogic(CoprsTestCase):
def test_delete_build_bad_src_pkg(
self, f_users, f_coprs, f_mock_chroots, f_builds, f_db):
+ # has meaning only for the builds with old result dir naming schema
+
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:
+ bchroot.git_hash = None
expected_chroots_to_delete.add(bchroot.name)
assert len(ActionsLogic.get_many().all()) == 0