| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import glob
- import json
- import os
- from pathlib import Path
- import subprocess
- from ...utils.deps import CACHE_DIR
- from ...utils.fs import remove_file, remove_tree
- from ...utils.log import log
- __all__ = ['execute']
- def _unpack_args(args):
- '''Unpack command line arguments
- '''
- return (args.tags, args.all)
- def execute(images, all_):
- '''Clean cached image(s)
- '''
- cache = Path(CACHE_DIR)
- if not images:
- images = [image[9:] for image in sorted(os.listdir(cache /
- 'share/images'))]
- for image in images:
- try:
- image, tag = image.rsplit(':', 1)
- except ValueError:
- tag = None
- if not image.replace('_', '').isalnum():
- raise ValueError(f'bad image tag ({image})')
- path = cache / f'share/images/manylinux{image}'
- if not path.exists():
- raise ValueError(f'no such image ({image})')
- if tag is None:
- if not all_:
- path = path / 'extracted'
- remove_tree(str(path))
- else:
- tag_file = path / f'tags/{tag}.json'
- if not tag_file.exists():
- raise ValueError(f'no such image ({image}:{tag})')
- if all_:
- with tag_file.open() as f:
- layers = json.load(f)["layers"]
- for layer in layers:
- layer = path / f'layers/{layer}.tar.gz'
- if layer.exists():
- remove_file(str(layer))
- remove_file(str(tag_file))
- else:
- path = cache / f'share/images/{image}/extracted/{tag}'
- if path.exists():
- remove_tree(str(path))
|