Add unit tests and a stronger restriction on the revert API call

This commit is contained in:
Joseph Schorr 2015-04-19 15:43:16 -04:00
parent e16657ed0e
commit d1e2d072ea
3 changed files with 55 additions and 8 deletions

View file

@ -2829,12 +2829,20 @@ def repository_is_starred(user, repository):
return False
def revert_tag(namespace_name, repository_name, tag_name, docker_image_id):
def revert_tag(repository, tag_name, docker_image_id):
""" Reverts a tag to a specific image ID. """
image = get_image_by_id(namespace_name, repository_name, docker_image_id)
if image is None:
raise DataModelException('Cannot revert to unknown image')
# Verify that the image ID already existed under this repository under the
# tag.
try:
(RepositoryTag.select()
.join(Image)
.where(RepositoryTag.repository == repository)
.where(RepositoryTag.name == tag_name)
.where(Image.docker_image_id == docker_image_id)
.get())
except RepositoryTag.DoesNotExist:
raise DataModelException('Cannot revert to unknown or invalid image')
return create_or_update_tag(namespace_name, repository_name, tag_name, docker_image_id,
reversion=True)
return create_or_update_tag(repository.namespace_user.username, repository.name,
tag_name, docker_image_id, reversion=True)