From 44e869875d449a7511315545d780b449712677c7 Mon Sep 17 00:00:00 2001 From: Victor Seva Date: Fri, 3 Mar 2023 18:24:18 +0100 Subject: [PATCH] MT#56231 repoapi: refactor PPA removal logic * move it to GerritRepoInfo Manager Change-Id: Iffabece2f11e444f4bd7e3ab144f552687f9396a --- repoapi/models/gri.py | 37 +++++++++++++++++++++++++++ repoapi/signals.py | 41 ++++++------------------------ repoapi/test/test_gerritinfo.py | 4 +-- repoapi/test/test_tasks.py | 2 +- repoapi/test/test_workfrontnote.py | 14 +++++----- 5 files changed, 55 insertions(+), 43 deletions(-) diff --git a/repoapi/models/gri.py b/repoapi/models/gri.py index 6bd3d14..1533d70 100644 --- a/repoapi/models/gri.py +++ b/repoapi/models/gri.py @@ -12,10 +12,46 @@ # # You should have received a copy of the GNU General Public License along # with this program. If not, see . +import structlog from django.db import models from django_extensions.db.fields import CreationDateTimeField from django_extensions.db.fields import ModificationDateTimeField +from ..tasks import jenkins_remove_project +from ..utils import jenkins_remove_ppa + +logger = structlog.get_logger(__name__) + + +class GerritRepoInfoManager(models.Manager): + def review_removed(self, ppa, gerrit_change, projectname, jbi_id=None): + qs = self.get_queryset().filter(param_ppa=ppa) + structlog.contextvars.bind_contextvars( + ppa=ppa, + gerrit_change=gerrit_change, + ) + try: + gri = qs.get(gerrit_change=gerrit_change) + gri.delete() + logger.info("removed gri") + except GerritRepoInfo.DoesNotExist: + logger.info("gri already gone") + pass + ppa_count = qs.count() + project_ppa_count = qs.filter(projectname=projectname).count() + if ppa_count == 0: + logger.info("trigger ppa removal") + jenkins_remove_ppa(ppa) + elif project_ppa_count == 0 and jbi_id is not None: + logger.info("remove source+packages from ppa") + jenkins_remove_project.delay(jbi_id) + else: + logger.info( + "nothing to do here", + ppa_count=ppa_count, + project_ppa_count=project_ppa_count, + ) + class GerritRepoInfo(models.Model): param_ppa = models.CharField(max_length=50, null=False) @@ -23,6 +59,7 @@ class GerritRepoInfo(models.Model): projectname = models.CharField(max_length=100) created = CreationDateTimeField() modified = ModificationDateTimeField() + objects = GerritRepoInfoManager() class Meta: unique_together = ["param_ppa", "gerrit_change"] diff --git a/repoapi/signals.py b/repoapi/signals.py index 0dfcb06..3a19b99 100644 --- a/repoapi/signals.py +++ b/repoapi/signals.py @@ -17,10 +17,9 @@ from django.apps import apps from django.db.models.signals import post_save from django.dispatch import receiver -from . import utils from .models.wni import NoteInfo from .tasks import get_jbi_files -from .tasks import jenkins_remove_project +from .utils import get_next_release from .utils import regex_mrXXX from release_dashboard.utils.build import is_ngcp_project @@ -72,37 +71,13 @@ def gerrit_repo_del(instance): if instance.param_ppa == "$ppa": logger.warn("ppa unset, skip removal") return - structlog.contextvars.bind_contextvars( - instance=str(instance), - branch=instance.param_branch, - ppa=instance.param_ppa, - gerrit_change=instance.gerrit_change, - ) GerritRepoInfo = apps.get_model("repoapi", "GerritRepoInfo") - gri = GerritRepoInfo.objects - try: - ppa = gri.get( - param_ppa=instance.param_ppa, gerrit_change=instance.gerrit_change - ) - ppa.delete() - logger.info("removed ppa") - except GerritRepoInfo.DoesNotExist: - logger.info("ppa already gone") - pass - qs = gri.filter(param_ppa=instance.param_ppa) - ppa_count = qs.count() - project_ppa_count = qs.filter(projectname=instance.projectname).count() - if ppa_count == 0: - utils.jenkins_remove_ppa(instance.param_ppa) - elif project_ppa_count == 0: - logger.info("remove source+packages from ppa") - jenkins_remove_project.delay(instance.id) - else: - logger.info( - "nothing to do here", - ppa_count=ppa_count, - project_ppa_count=project_ppa_count, - ) + GerritRepoInfo.objects.review_removed( + instance.param_ppa, + instance.gerrit_change, + instance.projectname, + instance.id, + ) @receiver( @@ -157,7 +132,7 @@ def tracker_release_target(instance, note: NoteInfo): if regex_mrXXX.search(branch): release = branch else: - release = utils.get_next_release(branch) + release = get_next_release(branch) if release: note.set_target_release(release) diff --git a/repoapi/test/test_gerritinfo.py b/repoapi/test/test_gerritinfo.py index abb5a67..2fa6d5e 100644 --- a/repoapi/test/test_gerritinfo.py +++ b/repoapi/test/test_gerritinfo.py @@ -19,8 +19,8 @@ from repoapi.models import JenkinsBuildInfo from repoapi.test.base import BaseTest -@patch("repoapi.signals.jenkins_remove_project") -@patch("repoapi.utils.jenkins_remove_ppa") +@patch("repoapi.models.gri.jenkins_remove_project") +@patch("repoapi.models.gri.jenkins_remove_ppa") class GerritRepoInfoTestCase(BaseTest): def get_defaults(self): defaults = { diff --git a/repoapi/test/test_tasks.py b/repoapi/test/test_tasks.py index 9f98e10..afcfd8a 100644 --- a/repoapi/test/test_tasks.py +++ b/repoapi/test/test_tasks.py @@ -58,7 +58,7 @@ class TasksTestCase(BaseTest): @override_settings(JBI_BASEDIR=FIXTURES_PATH) @patch("repoapi.tasks.jenkins_remove_project_ppa") -@patch("repoapi.utils.jenkins_remove_ppa") +@patch("repoapi.models.gri.jenkins_remove_ppa") class TaskGerritRepoTest(BaseTest): default_params = { "gerrit_patchset": "44323", diff --git a/repoapi/test/test_workfrontnote.py b/repoapi/test/test_workfrontnote.py index 4c0d5ad..882760a 100644 --- a/repoapi/test/test_workfrontnote.py +++ b/repoapi/test/test_workfrontnote.py @@ -53,7 +53,7 @@ class WorkfrontNoteTestCase(BaseTest): return defaults @patch("tracker.utils.workfront_set_release_target") - @patch("repoapi.utils.get_next_release") + @patch("repoapi.signals.get_next_release") @patch("tracker.utils.workfront_note_send") def test_note_gerrit(self, wns, gnr, wsrt): param = self.get_defaults() @@ -82,7 +82,7 @@ class WorkfrontNoteTestCase(BaseTest): wns.assert_called_once_with("0001", msg) @patch("tracker.utils.workfront_set_release_target") - @patch("repoapi.utils.get_next_release") + @patch("repoapi.signals.get_next_release") @patch("tracker.utils.workfront_note_send") def test_note_merge(self, wns, gnr, wsrt): param = self.get_defaults() @@ -142,7 +142,7 @@ class WorkfrontNoteTestCase(BaseTest): wns.assert_called_with("0001", msg) @patch("tracker.utils.workfront_set_release_target") - @patch("repoapi.utils.get_next_release") + @patch("repoapi.signals.get_next_release") @patch("tracker.utils.workfront_note_send") def test_note_commit(self, wns, gnr, wsrt): param = self.get_non_gerrit_defaults() @@ -168,7 +168,7 @@ class WorkfrontNoteTestCase(BaseTest): wns.assert_not_called() @patch("tracker.utils.workfront_set_release_target") - @patch("repoapi.utils.get_next_release") + @patch("repoapi.signals.get_next_release") @patch("tracker.utils.workfront_note_send") def test_note_commit_mrXX(self, wns, gnr, wsrt): param = self.get_non_gerrit_defaults() @@ -196,7 +196,7 @@ class WorkfrontNoteTestCase(BaseTest): wns.assert_not_called() @patch("tracker.utils.workfront_set_release_target") - @patch("repoapi.utils.get_next_release") + @patch("repoapi.signals.get_next_release") @patch("tracker.utils.workfront_note_send") def test_note_commit_mrXXX(self, wns, gnr, wsrt): param = self.get_non_gerrit_defaults() @@ -222,7 +222,7 @@ class WorkfrontNoteTestCase(BaseTest): wns.assert_not_called() @patch("tracker.utils.workfront_set_release_target") - @patch("repoapi.utils.get_next_release") + @patch("repoapi.signals.get_next_release") @patch("tracker.utils.workfront_note_send") def test_note_commit_next_distri(self, wns, gnr, wsrt): param = self.get_non_gerrit_defaults() @@ -251,7 +251,7 @@ class WorkfrontNoteTestCase(BaseTest): wns.assert_not_called() @patch("tracker.utils.workfront_set_release_target") - @patch("repoapi.utils.get_next_release") + @patch("repoapi.signals.get_next_release") @patch("tracker.utils.workfront_note_send") def test_note_commit_non_ngcp(self, wns, gnr, wsrt): param = self.get_non_gerrit_defaults()