summaryrefslogtreecommitdiff
path: root/devel/management/commands/reporead.py
diff options
context:
space:
mode:
Diffstat (limited to 'devel/management/commands/reporead.py')
-rw-r--r--devel/management/commands/reporead.py17
1 files changed, 9 insertions, 8 deletions
diff --git a/devel/management/commands/reporead.py b/devel/management/commands/reporead.py
index 3e835f7c..8b591aeb 100644
--- a/devel/management/commands/reporead.py
+++ b/devel/management/commands/reporead.py
@@ -13,6 +13,7 @@ Example:
./manage.py reporead i686 /tmp/core.db.tar.gz
"""
+from base64 import b64decode
from collections import defaultdict
from copy import copy
import io
@@ -140,8 +141,8 @@ DEPEND_RE = re.compile(r"^(.+?)((>=|<=|=|>|<)(.+))?$")
def create_depend(package, dep_str, deptype='D'):
depend = Depend(pkg=package, deptype=deptype)
- # lop off any description first
- parts = dep_str.split(':', 1)
+ # lop off any description first, don't get confused by epoch
+ parts = dep_str.split(': ', 1)
if len(parts) > 1:
depend.description = parts[1].strip()
match = DEPEND_RE.match(parts[0].strip())
@@ -222,7 +223,7 @@ def populate_pkg(dbpkg, repopkg, force=False, timestamp=None):
dbpkg.packager_str = repopkg.packager
# attempt to find the corresponding django user for this string
dbpkg.packager = finder.find(repopkg.packager)
- dbpkg.pgp_signature = repopkg.pgpsig
+ dbpkg.signature_bytes = b64decode(repopkg.pgpsig.encode('utf-8'))
if timestamp:
dbpkg.last_update = timestamp
@@ -307,7 +308,7 @@ def update_common(archname, reponame, pkgs, sanity_check=True):
# If isolation level is repeatable-read, we need to ensure each package
# update starts a new transaction and re-queries the database as
# necessary to guard against simultaneous updates.
- with transaction.commit_on_success():
+ with transaction.atomic():
# force the transaction dirty, even though we will only do reads
transaction.set_dirty()
@@ -370,7 +371,7 @@ def db_update(archname, reponame, pkgs, force=False):
dbpkg = Package(pkgname=pkg.name, arch=architecture, repo=repository,
created=timestamp)
try:
- with transaction.commit_on_success():
+ with transaction.atomic():
populate_pkg(dbpkg, pkg, timestamp=timestamp)
Update.objects.log_update(None, dbpkg)
except IntegrityError:
@@ -385,7 +386,7 @@ def db_update(archname, reponame, pkgs, force=False):
for pkgname in (dbset - syncset):
logger.info("Removing package %s", pkgname)
dbpkg = dbdict[pkgname]
- with transaction.commit_on_success():
+ with transaction.atomic():
Update.objects.log_update(dbpkg, None)
# no race condition here as long as simultaneous threads both
# issue deletes; second delete will be a no-op
@@ -408,7 +409,7 @@ def db_update(archname, reponame, pkgs, force=False):
# The odd select_for_update song and dance here are to ensure
# simultaneous updates don't happen on a package, causing
# files/depends/all related items to be double-imported.
- with transaction.commit_on_success():
+ with transaction.atomic():
dbpkg = Package.objects.select_for_update().get(id=dbpkg.id)
if not force and pkg_same_version(pkg, dbpkg):
logger.debug("Package %s was already updated", pkg.name)
@@ -436,7 +437,7 @@ def filesonly_update(archname, reponame, pkgs, force=False):
# The odd select_for_update song and dance here are to ensure
# simultaneous updates don't happen on a package, causing
# files to be double-imported.
- with transaction.commit_on_success():
+ with transaction.atomic():
if not dbpkg.files_last_update or not dbpkg.last_update:
pass
elif not force and dbpkg.files_last_update >= dbpkg.last_update: