Merge pull request #85 from koenw/fix_keep_tags
Always keep tags passed in `--keep-tags`
This commit is contained in:
@@ -811,9 +811,11 @@ def main_loop(args):
|
|||||||
print(" layer: {0}".format(
|
print(" layer: {0}".format(
|
||||||
layer['blobSum']))
|
layer['blobSum']))
|
||||||
|
|
||||||
# add tags to "tags_to_keep" list, if we have regexp "tags_to_keep"
|
# add tags to "tags_to_keep" list if we have regexp "tags_to_keep"
|
||||||
# entries or a number of hours for "keep_by_hours":
|
# entries, a number of hours for "keep_by_hours" or if the user
|
||||||
|
# explicitly specified tags to always keep.
|
||||||
keep_tags = []
|
keep_tags = []
|
||||||
|
keep_tags.extend(args.keep_tags)
|
||||||
if args.keep_tags_like:
|
if args.keep_tags_like:
|
||||||
keep_tags.extend(get_tags_like(args.keep_tags_like, tags_list))
|
keep_tags.extend(get_tags_like(args.keep_tags_like, tags_list))
|
||||||
if args.keep_by_hours:
|
if args.keep_by_hours:
|
||||||
@@ -836,13 +838,13 @@ def main_loop(args):
|
|||||||
tag for tag in tags_list if tag not in tags_list_to_delete]
|
tag for tag in tags_list if tag not in tags_list_to_delete]
|
||||||
keep_tags.extend(tags_list_to_keep)
|
keep_tags.extend(tags_list_to_keep)
|
||||||
|
|
||||||
|
keep_tags.sort() # Make order deterministic for testing
|
||||||
delete_tags(
|
delete_tags(
|
||||||
registry, image_name, args.dry_run,
|
registry, image_name, args.dry_run,
|
||||||
tags_list_to_delete, keep_tags)
|
tags_list_to_delete, keep_tags)
|
||||||
|
|
||||||
# delete tags by age in hours
|
# delete tags by age in hours
|
||||||
if args.delete_by_hours:
|
if args.delete_by_hours:
|
||||||
keep_tags.extend(args.keep_tags)
|
|
||||||
delete_tags_by_age(registry, image_name, args.dry_run,
|
delete_tags_by_age(registry, image_name, args.dry_run,
|
||||||
args.delete_by_hours, keep_tags)
|
args.delete_by_hours, keep_tags)
|
||||||
|
|
||||||
|
|||||||
26
test.py
26
test.py
@@ -853,6 +853,32 @@ class TestKeepImagesLike(unittest.TestCase):
|
|||||||
keep_images_like_patched.assert_not_called()
|
keep_images_like_patched.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
|
class TestKeepTags(unittest.TestCase):
|
||||||
|
@staticmethod
|
||||||
|
def create_mock_registry(host, login, no_validate_ssl, digest_method="HEAD"):
|
||||||
|
r = Registry._create(host, login, no_validate_ssl, digest_method)
|
||||||
|
r.http = MockRequests()
|
||||||
|
r.list_images = MagicMock(return_value=['a'])
|
||||||
|
r.list_tags = MagicMock(return_value=['1', '2', '3', '4', '5', '6', '7'])
|
||||||
|
return r
|
||||||
|
|
||||||
|
# We store the actual mock registry here so we can later compare it in
|
||||||
|
# `assert_called_with()`.
|
||||||
|
mock_registry = create_mock_registry.__func__('localhost:8989', None, True)
|
||||||
|
|
||||||
|
def return_mock_registry(self, host, login, no_validate_ssl, digest_method="HEAD"):
|
||||||
|
return TestKeepTags.mock_registry
|
||||||
|
|
||||||
|
@patch('registry.Registry.create', return_mock_registry)
|
||||||
|
@patch('registry.get_auth_schemes') # called in main_loop, turn to noop
|
||||||
|
@patch('registry.delete_tags')
|
||||||
|
def test_keep_tags(self, delete_tags_patched, get_auth_schemes_patched):
|
||||||
|
# Check if delete_tags is called from main_loop (directly or indirectly
|
||||||
|
# through delete_tags_by_age) with `keep_tags` set to the tags we want to keep.
|
||||||
|
main_loop(parse_args(('--delete', '--num', '5', '-r', 'localhost:8989', '--keep-tags', '1')))
|
||||||
|
delete_tags_patched.assert_called_with(TestKeepTags.mock_registry, 'a', False, ['1', '2'], ['1', '3', '4', '5', '6', '7'])
|
||||||
|
|
||||||
|
|
||||||
class TestArgParser(unittest.TestCase):
|
class TestArgParser(unittest.TestCase):
|
||||||
|
|
||||||
def test_no_args(self):
|
def test_no_args(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user