summaryrefslogtreecommitdiffstats
path: root/devel
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2010-11-05 04:11:00 +0100
committerDan McGee <dan@archlinux.org>2010-11-05 04:11:00 +0100
commitfcc6d98bc438ea917c757ee1a565a5dba625f333 (patch)
tree69275d1942d6a8ef73f9dfaafd955f900d275f62 /devel
parent01cb0348e30b31c15a4bebbe3ecfb4605509d29d (diff)
downloadarchweb-fcc6d98bc438ea917c757ee1a565a5dba625f333.tar.gz
archweb-fcc6d98bc438ea917c757ee1a565a5dba625f333.tar.xz
reporead: fix small issues when loading files databases
We didn't verify that the version in the files database was the same as in the SQL side of things, so we could load old files for a new package and lose track of this fact. When loading files, ensure the database version matches the version in the package before continuing with the file load operation. There are also a few other small updates in here, like skipping the sanity check for filesonly as we never delete packages, and removing some unnecessary string concatenation operations. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'devel')
-rw-r--r--devel/management/commands/reporead.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/devel/management/commands/reporead.py b/devel/management/commands/reporead.py
index ef30977..6f7fd95 100644
--- a/devel/management/commands/reporead.py
+++ b/devel/management/commands/reporead.py
@@ -212,6 +212,13 @@ def populate_pkg(dbpkg, repopkg, force=False, timestamp=None):
def populate_files(dbpkg, repopkg, force=False):
if not force:
+ if dbpkg.pkgver != repopkg.ver or dbpkg.pkgrel != repopkg.rel:
+ logger.info("db version (%s) didn't match repo version (%s) "
+ "for package %s, skipping file list addition" %
+ ('-'.join((dbpkg.pkgver, dbpkg.pkgrel)),
+ '-'.join((repopkg.ver, repopkg.rel)),
+ dbpkg.pkgname))
+ return
if not dbpkg.files_last_update or not dbpkg.last_update:
pass
elif dbpkg.files_last_update > dbpkg.last_update:
@@ -219,7 +226,8 @@ def populate_files(dbpkg, repopkg, force=False):
# only delete files if we are reading a DB that contains them
if 'files' in repopkg.__dict__:
dbpkg.packagefile_set.all().delete()
- logger.info("adding %d files for package %s" % (len(repopkg.files), dbpkg.pkgname))
+ logger.info("adding %d files for package %s" %
+ (len(repopkg.files), dbpkg.pkgname))
for x in repopkg.files:
dbpkg.packagefile_set.create(path=x)
dbpkg.files_last_update = datetime.now()
@@ -267,7 +275,9 @@ def db_update(archname, reponame, pkgs, options):
# means we expect the repo to fluctuate a lot.
msg = "Package database has %.1f%% the number of packages in the " \
"web database" % dbpercent
- if len(dbset) > 20 and dbpercent < 50.0 and not repository.testing:
+ if not filesonly and \
+ len(dbset) > 20 and dbpercent < 50.0 and \
+ not repository.testing:
logger.error(msg)
raise Exception(msg)
if dbpercent < 75.0:
@@ -297,14 +307,14 @@ def db_update(archname, reponame, pkgs, options):
# for a non-force, we don't want to do anything at all.
if filesonly:
pass
- elif '-'.join((p.ver, p.rel)) == '-'.join((dbp.pkgver, dbp.pkgrel)):
+ elif p.ver == dbp.pkgver and p.rel == dbp.pkgrel:
if not force:
continue
else:
timestamp = datetime.now()
if filesonly:
logger.debug("Checking files for package %s in database", p.name)
- populate_files(dbp, p)
+ populate_files(dbp, p, force=force)
else:
logger.info("Updating package %s in database", p.name)
populate_pkg(dbp, p, force=force, timestamp=timestamp)