diff options
author | Andreas Bergmeier <abergmeier@gmx.net> | 2017-12-21 01:00:25 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2017-12-21 01:01:54 -0800 |
commit | 8268c56e27494d345077720e129fda05c40b0514 (patch) | |
tree | 3b8f55a0b436123dbebb75bef27fc5c003d03ab4 /tools | |
parent | 26b7ea6a37961ce993afe510d0ff8c1b5ecb30bc (diff) |
Raise path error for failing read in GetTarFile.
Closes #4282.
PiperOrigin-RevId: 179783690
Diffstat (limited to 'tools')
-rw-r--r-- | tools/build_defs/docker/BUILD | 3 | ||||
-rw-r--r-- | tools/build_defs/docker/utils.py | 18 |
2 files changed, 15 insertions, 6 deletions
diff --git a/tools/build_defs/docker/BUILD b/tools/build_defs/docker/BUILD index 9db68adb3a..d3b6f3e13b 100644 --- a/tools/build_defs/docker/BUILD +++ b/tools/build_defs/docker/BUILD @@ -74,6 +74,9 @@ py_binary( py_library( name = "utils", srcs = ["utils.py"], + deps = [ + "//third_party/py/six", + ], ) filegroup( diff --git a/tools/build_defs/docker/utils.py b/tools/build_defs/docker/utils.py index f6c53d01cc..6ddec17b29 100644 --- a/tools/build_defs/docker/utils.py +++ b/tools/build_defs/docker/utils.py @@ -16,6 +16,8 @@ import json import tarfile +from six import raise_from + def ExtractValue(value): """Return the contents of a file point to by value if it starts with an @. @@ -45,12 +47,16 @@ def GetTarFile(f, name): Returns: The content of the file, or None if not found. """ - with tarfile.open(f, 'r') as tar: - members = [tarinfo.name for tarinfo in tar.getmembers()] - for i in ['', './', '/']: - if i + name in members: - return tar.extractfile(i + name).read() - return None + with open(f, 'rb') as fobj: + try: + with tarfile.open(fileobj=fobj) as tar: + members = [tarinfo.name for tarinfo in tar.getmembers()] + for i in ['', './', '/']: + if i + name in members: + return tar.extractfile(i + name).read() + except tarfile.ReadError as error: + raise_from(IOError('Error when reading %s' % f), error) + return None def GetManifestFromTar(f=None): |