aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/build_defs/docker
diff options
context:
space:
mode:
authorGravatar Damien Martin-Guillerez <dmarting@google.com>2015-09-23 14:53:43 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-09-24 14:16:25 +0000
commitbdb00121ef25d9300ed4c8975e0720acf2234db4 (patch)
tree468e05d1234eaecc3ae8c4752b53e5ac34891b61 /tools/build_defs/docker
parent7fb76a1e378b988858c1274e8b6009e8489a4873 (diff)
[Docker] Prevent duplicate entries in a layer
-- MOS_MIGRATED_REVID=103745334
Diffstat (limited to 'tools/build_defs/docker')
-rw-r--r--tools/build_defs/docker/archive.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/tools/build_defs/docker/archive.py b/tools/build_defs/docker/archive.py
index 0ddf18a36c..a8234e136f 100644
--- a/tools/build_defs/docker/archive.py
+++ b/tools/build_defs/docker/archive.py
@@ -100,6 +100,7 @@ class TarFileWriter(object):
def __init__(self, name):
self.tar = tarfile.open(name=name, mode='w')
+ self.members = set([])
def __enter__(self):
return self
@@ -150,6 +151,15 @@ class TarFileWriter(object):
self.add_file(name, tarfile.REGTYPE, file_content=path, uid=uid, gid=gid,
uname=uname, gname=gname, mtime=mtime, mode=mode)
+ def _addfile(self, info, fileobj=None):
+ """Add a file in the tar file if there is no conflict."""
+ if info.name not in self.members:
+ self.tar.addfile(info, fileobj)
+ self.members.add(info.name)
+ elif info.type != tarfile.DIRTYPE:
+ print('Duplicate file in archive: %s, '
+ 'picking first occurrence' % info.name)
+
def add_file(self, name, kind=tarfile.REGTYPE, content=None, link=None,
file_content=None, uid=0, gid=0, uname='', gname='', mtime=0,
mode=None):
@@ -194,9 +204,9 @@ class TarFileWriter(object):
elif file_content:
with open(file_content, 'rb') as f:
tarinfo.size = os.fstat(f.fileno()).st_size
- self.tar.addfile(tarinfo, f)
+ self._addfile(tarinfo, f)
else:
- self.tar.addfile(tarinfo)
+ self._addfile(tarinfo)
def add_tar(self, tar, rootuid=None, rootgid=None,
numeric=False, name_filter=None):
@@ -250,9 +260,9 @@ class TarFileWriter(object):
tarinfo.name = './' + name
if tarinfo.isfile():
- self.tar.addfile(tarinfo, intar.extractfile(tarinfo.name))
+ self._addfile(tarinfo, intar.extractfile(tarinfo.name))
else:
- self.tar.addfile(tarinfo)
+ self._addfile(tarinfo)
intar.close()
def close(self):