summaryrefslogtreecommitdiffstats
path: root/devel
diff options
context:
space:
mode:
authorJelle van der Waa <jelle@vdwaa.nl>2018-07-07 22:27:54 +0200
committerJelle van der Waa <jelle@vdwaa.nl>2018-07-13 22:08:37 +0200
commit6ceb818145c6fbb1bca2c6a278c4f513530a34be (patch)
treedc316579c0b7e096930bda66327cccfaeb306110 /devel
parentf8958f8f8ecf0b66a532737568380a14609baf3d (diff)
downloadarchweb-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.py9
-rw-r--r--devel/tests/test_reporead.py50
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)