Add ability to tag images from the UI, including moving existing tags to different images

This commit is contained in:
Joseph Schorr 2014-02-28 00:12:09 -05:00
parent 9371c70941
commit 20ad666308
11 changed files with 581 additions and 200 deletions

View file

@ -1450,11 +1450,45 @@ def get_image_changes(namespace, repository, image_id):
abort(403)
@api.route('/repository/<path:repository>/tag/<tag>',
methods=['PUT'])
@parse_repository_name
def change_tag_image(namespace, repository, tag):
permission = ModifyRepositoryPermission(namespace, repository)
if permission.can():
image_id = request.get_json()['image']
image = model.get_repo_image(namespace, repository, image_id)
if not image:
abort(404)
original_image_id = None
try:
original_tag_image = model.get_tag_image(namespace, repository, tag)
if original_tag_image:
original_image_id = original_tag_image.docker_image_id
except model.DataModelException:
# This is a new tag.
pass
model.create_or_update_tag(namespace, repository, tag, image_id)
model.garbage_collect_repository(namespace, repository)
username = current_user.db_user().username
log_action('move_tag' if original_image_id else 'create_tag', namespace,
{ 'username': username, 'repo': repository, 'tag': tag,
'image': image_id, 'original_image': original_image_id },
repo=model.get_repository(namespace, repository))
return make_response('Updated', 201)
abort(403) # Permission denied
@api.route('/repository/<path:repository>/tag/<tag>',
methods=['DELETE'])
@parse_repository_name
def delete_full_tag(namespace, repository, tag):
permission = AdministerRepositoryPermission(namespace, repository)
permission = ModifyRepositoryPermission(namespace, repository)
if permission.can():
model.delete_tag(namespace, repository, tag)
model.garbage_collect_repository(namespace, repository)