Retarget hard links pointing to deleted files by emitting the deleted file contents under the first hard link instance. This fixes a breakage in the squashed TAR where we were pointing hard links to missing data.
Fixes https://jira.coreos.com/browse/QUAY-885
This commit is contained in:
parent
041a7fcd36
commit
110366f656
8 changed files with 337 additions and 252 deletions
|
@ -19,7 +19,7 @@ class AppCImageFormatter(TarImageFormatter):
|
|||
"""
|
||||
|
||||
def stream_generator(self, repo_image, tag, synthetic_image_id, get_image_iterator,
|
||||
get_layer_iterator):
|
||||
tar_stream_getter_iterator):
|
||||
image_mtime = 0
|
||||
created = next(get_image_iterator()).v1_metadata.created
|
||||
if created is not None:
|
||||
|
@ -40,7 +40,7 @@ class AppCImageFormatter(TarImageFormatter):
|
|||
# Yield the merged layer dtaa.
|
||||
yield self.tar_folder('rootfs', mtime=image_mtime)
|
||||
|
||||
layer_merger = StreamLayerMerger(get_layer_iterator, path_prefix='rootfs/')
|
||||
layer_merger = StreamLayerMerger(tar_stream_getter_iterator, path_prefix='rootfs/')
|
||||
for entry in layer_merger.get_generator():
|
||||
yield entry
|
||||
|
||||
|
|
|
@ -8,16 +8,16 @@ class TarImageFormatter(object):
|
|||
"""
|
||||
|
||||
def build_stream(self, repo_image, tag, synthetic_image_id, get_image_iterator,
|
||||
get_layer_iterator):
|
||||
tar_stream_getter_iterator):
|
||||
"""
|
||||
Builds and streams a synthetic .tar.gz that represents the formatted tar created by this class's
|
||||
implementation.
|
||||
"""
|
||||
return GzipWrap(self.stream_generator(repo_image, tag, synthetic_image_id, get_image_iterator,
|
||||
get_layer_iterator))
|
||||
tar_stream_getter_iterator))
|
||||
|
||||
def stream_generator(self, repo_image, tag, synthetic_image_id, get_image_iterator,
|
||||
get_layer_iterator):
|
||||
tar_stream_getter_iterator):
|
||||
raise NotImplementedError
|
||||
|
||||
def tar_file(self, name, contents, mtime=None):
|
||||
|
|
|
@ -29,7 +29,7 @@ class SquashedDockerImageFormatter(TarImageFormatter):
|
|||
SIZE_MULTIPLIER = 1.2
|
||||
|
||||
def stream_generator(self, repo_image, tag, synthetic_image_id, get_image_iterator,
|
||||
get_layer_iterator):
|
||||
tar_stream_getter_iterator):
|
||||
image_mtime = 0
|
||||
created = next(get_image_iterator()).v1_metadata.created
|
||||
if created is not None:
|
||||
|
@ -42,7 +42,7 @@ class SquashedDockerImageFormatter(TarImageFormatter):
|
|||
# json - The layer JSON
|
||||
# layer.tar - The tarballed contents of the layer
|
||||
# VERSION - The docker import version: '1.0'
|
||||
layer_merger = StreamLayerMerger(get_layer_iterator)
|
||||
layer_merger = StreamLayerMerger(tar_stream_getter_iterator)
|
||||
|
||||
# Yield the repositories file:
|
||||
synthetic_layer_info = {}
|
||||
|
|
Reference in a new issue