diff options
author | Jelle van der Waa <jelle@vdwaa.nl> | 2018-07-07 22:27:54 +0200 |
---|---|---|
committer | Jelle van der Waa <jelle@vdwaa.nl> | 2018-07-13 22:08:37 +0200 |
commit | 6ceb818145c6fbb1bca2c6a278c4f513530a34be (patch) | |
tree | dc316579c0b7e096930bda66327cccfaeb306110 /devel | |
parent | f8958f8f8ecf0b66a532737568380a14609baf3d (diff) | |
download | archweb-6ceb818145c6fbb1bca2c6a278c4f513530a34be.tar.gz archweb-6ceb818145c6fbb1bca2c6a278c4f513530a34be.zip |
devel: reporead remove old flagrequests
When updating a package in our repository remove any old 'flagged out of
date' requests.
Diffstat (limited to 'devel')
-rw-r--r-- | devel/management/commands/reporead.py | 9 | ||||
-rw-r--r-- | devel/tests/test_reporead.py | 50 |
2 files changed, 57 insertions, 2 deletions
diff --git a/devel/management/commands/reporead.py b/devel/management/commands/reporead.py index aa08e27f..37ba10d8 100644 --- a/devel/management/commands/reporead.py +++ b/devel/management/commands/reporead.py @@ -33,7 +33,7 @@ from django.contrib.auth.models import User from devel.utils import UserFinder from main.models import Arch, Package, PackageFile, Repo -from packages.models import Depend, Conflict, Provision, Replacement, Update, PackageRelation +from packages.models import Depend, Conflict, FlagRequest, Provision, Replacement, Update, PackageRelation from packages.utils import parse_version @@ -216,6 +216,13 @@ def populate_pkg(dbpkg, repopkg, force=False, timestamp=None): elif dbpkg.pkgver is None or dbpkg.pkgver != repopkg.ver: dbpkg.flag_date = None + # Remove flagged out of date objects when a package is updated. + if dbpkg.epoch != repopkg.epoch or dbpkg.pkgver != repopkg.ver: + repo = Repo.objects.get(name__iexact=repopkg.repo) + requests = FlagRequest.objects.filter(pkgbase=repopkg.base, repo=repo) + requests = requests.exclude(pkgver=repopkg.ver, epoch=repopkg.epoch) + requests.delete() + if repopkg.base: dbpkg.pkgbase = repopkg.base else: diff --git a/devel/tests/test_reporead.py b/devel/tests/test_reporead.py index 5aa3ceea..62db32ec 100644 --- a/devel/tests/test_reporead.py +++ b/devel/tests/test_reporead.py @@ -1,19 +1,34 @@ import tarfile from mock import patch +from datetime import datetime from django.core.management import call_command from django.core.management.base import CommandError from django.test import TransactionTestCase +from django.utils import timezone -from main.models import Package +from main.models import Arch, Package, Repo +from packages.models import FlagRequest # Django's TestCase is wrapped in transaction, therefore use TransactionTestCase class RepoReadTest(TransactionTestCase): fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json'] + def create_pkg(self, repo=None, pkgver='4.10.1', pkgrel='1'): + if not repo: + repo = Repo.objects.get(name__iexact='core') + + arch = Arch.objects.get(name__iexact='any') + now = datetime.now(tz=timezone.utc) + return Package.objects.create(arch=arch, repo=repo, pkgname='systemd', + pkgbase='systemd', pkgver=pkgver, + pkgrel=pkgrel, pkgdesc='Linux kernel', + compressed_size=10, installed_size=20, + last_update=now, created=now) + def test_invalid_args(self): with self.assertRaises(CommandError) as e: call_command('reporead') @@ -39,3 +54,36 @@ class RepoReadTest(TransactionTestCase): packages = Package.objects.all() import_packages = ["{}-{}-{}".format(pkg.pkgname, pkg.pkgver, pkg.pkgrel) for pkg in packages] self.assertItemsEqual(files, import_packages) + + def test_flagoutofdate(self): + pkg = self.create_pkg() + FlagRequest.objects.create(pkgbase=pkg.pkgbase, repo=pkg.repo, + pkgver=pkg.pkgver, epoch=pkg.epoch, + ip_address='1.1.1.1') + + with patch('devel.management.commands.reporead.logger') as logger: + call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz') + logger.info.assert_called() + + self.assertEqual(len(FlagRequest.objects.all()), 0) + + def test_flagoutofdate_staging(self): + staging = Repo.objects.get(name__iexact='staging') + + pkg = self.create_pkg() + staging_pkg = self.create_pkg(repo=staging, pkgrel='2') + + FlagRequest.objects.create(pkgbase=pkg.pkgbase, repo=pkg.repo, + pkgver=pkg.pkgver, epoch=pkg.epoch, + ip_address='1.1.1.1') + FlagRequest.objects.create(pkgbase=staging_pkg.pkgbase, repo=staging_pkg.repo, + pkgver=staging_pkg.pkgver, epoch=staging_pkg.epoch, + ip_address='1.1.1.1') + + with patch('devel.management.commands.reporead.logger') as logger: + call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz') + logger.info.assert_called() + + objects = FlagRequest.objects.all() + self.assertEqual(len(objects), 1) + self.assertEqual(objects[0].pkgver, staging_pkg.pkgver) |