diff options
author | Dan McGee <dan@archlinux.org> | 2010-04-17 03:02:22 +0200 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2010-04-17 03:02:22 +0200 |
commit | 8ec2e404514770cce407a34b8149097d51192a40 (patch) | |
tree | 0a62a8f51583a11e68073b76230575ea54e7950a | |
parent | 5fb2fca70a13181ae8aaec60e855693114b1198f (diff) | |
download | archweb-8ec2e404514770cce407a34b8149097d51192a40.tar.gz archweb-8ec2e404514770cce407a34b8149097d51192a40.tar.xz |
reporead: allow removal of last package in an arch
We had a situation where the last 'any' architecture package was present in
the [testing] repo and never got removed because we never did the
db_update() call on that architecture. Instead of looping all possible
architectures and only calling if len() > 0, always call db_update() for
both the primary architecture and the 'any' architecture.
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | devel/management/commands/reporead.py | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/devel/management/commands/reporead.py b/devel/management/commands/reporead.py index 32e7929..777bc5d 100644 --- a/devel/management/commands/reporead.py +++ b/devel/management/commands/reporead.py @@ -188,7 +188,7 @@ def populate_files(dbpkg, repopkg, force=False): dbpkg.files_last_update = datetime.now() dbpkg.save() -def db_update(archname, pkgs, options): +def db_update(archname, reponame, pkgs, options): """ Parses a list and updates the Arch dev database accordingly. @@ -199,7 +199,7 @@ def db_update(archname, pkgs, options): logger.info('Updating Arch: %s' % archname) force = options.get('force', False) filesonly = options.get('filesonly', False) - repository = Repo.objects.get(name__iexact=pkgs[0].repo) + repository = Repo.objects.get(name__iexact=reponame) architecture = Arch.objects.get(name__iexact=archname) dbpkgs = Package.objects.filter(arch=architecture, repo=repository) # It makes sense to fully evaluate our DB query now because we will @@ -362,7 +362,7 @@ def parse_repo(repopath): tpkg.write('\n') # just in case repodb.close() logger.info("Finished repo parsing") - return pkgs + return (reponame, pkgs) def validate_arch(arch): "Check if arch is valid." @@ -374,25 +374,23 @@ def read_repo(primary_arch, file, options): """ Parses repo.db.tar.gz file and returns exit status. """ - packages = parse_repo(file) + repo, packages = parse_repo(file) # sort packages by arch -- to handle noarch stuff packages_arches = {} - available_arches = [x.name for x in Arch.objects.all()] - for arch in available_arches: - packages_arches[arch] = [] + packages_arches['any'] = [] + packages_arches[primary_arch] = [] for package in packages: if package.arch in ('any', primary_arch): packages_arches[package.arch].append(package) else: + # we don't include mis-arched packages logger.warning("Package %s arch = %s" % ( package.name,package.arch)) - #package.arch = primary_arch logger.info('Starting database updates.') for (arch, pkgs) in packages_arches.items(): - if len(pkgs) > 0: - db_update(arch, pkgs, options) + db_update(arch, repo, pkgs, options) logger.info('Finished database updates.') return 0 |