Fix lookup of manifests referenced solely by a manifest list
We need to ensure we can find them if there is an active tag pointing to the parent list
This commit is contained in:
parent
54904cfd6e
commit
e972e4088b
5 changed files with 97 additions and 13 deletions
|
@ -2,7 +2,7 @@ import logging
|
|||
|
||||
from collections import namedtuple
|
||||
|
||||
from peewee import IntegrityError
|
||||
from peewee import IntegrityError, JOIN
|
||||
|
||||
from data.database import (Tag, Manifest, ManifestBlob, ManifestLegacyImage, ManifestChild,
|
||||
db_transaction)
|
||||
|
@ -32,8 +32,24 @@ def lookup_manifest(repository_id, manifest_digest, allow_dead=False):
|
|||
.where(Manifest.repository == repository_id)
|
||||
.where(Manifest.digest == manifest_digest))
|
||||
|
||||
if not allow_dead:
|
||||
query = filter_to_alive_tags(query.join(Tag)).group_by(Manifest.id)
|
||||
if allow_dead:
|
||||
try:
|
||||
return query.get()
|
||||
except Manifest.DoesNotExist:
|
||||
return None
|
||||
|
||||
# Try first to filter to those manifests referenced by an alive tag,
|
||||
try:
|
||||
return filter_to_alive_tags(query.join(Tag)).get()
|
||||
except Manifest.DoesNotExist:
|
||||
pass
|
||||
|
||||
# Try referenced as the child of a manifest that has an alive tag.
|
||||
query = (query
|
||||
.join(ManifestChild, on=(ManifestChild.child_manifest == Manifest.id))
|
||||
.join(Tag, on=(Tag.manifest == ManifestChild.manifest)))
|
||||
|
||||
query = filter_to_alive_tags(query)
|
||||
|
||||
try:
|
||||
return query.get()
|
||||
|
|
Reference in a new issue