From ca4fc19a50571925e353d3ff3e80bc4a136c69e1 Mon Sep 17 00:00:00 2001 From: Ross Bayer Date: Sun, 26 Jan 2020 23:32:34 -0800 Subject: [PATCH] [Build System: build-script] Remove the tar module from swift_build_support. The single function it provided to archive a source diretory has been moved to build-script which was the only caller. --- utils/build-script | 24 ++++++- .../swift_build_support/tar.py | 34 --------- utils/swift_build_support/tests/test_tar.py | 72 ------------------- 3 files changed, 21 insertions(+), 109 deletions(-) delete mode 100644 utils/swift_build_support/swift_build_support/tar.py delete mode 100644 utils/swift_build_support/tests/test_tar.py diff --git a/utils/build-script b/utils/build-script index 436fb357bac59..e0bce39463355 100755 --- a/utils/build-script +++ b/utils/build-script @@ -30,7 +30,6 @@ from swift_build_support.swift_build_support import ( diagnostics, products, shell, - tar, targets, workspace ) @@ -89,6 +88,25 @@ def print_xcodebuild_versions(file=sys.stdout): file.flush() +def tar(source, destination): + """ + Create a gzip archive of the file at 'source' at the given + 'destination' path. + """ + # We do not use `tarfile` here because: + # - We wish to support LZMA2 compression while also supporting Python 2.7. + # - We wish to explicitly set the owner and group of the archive. + args = ['tar', '-c', '-z', '-f', destination] + + if platform.system() != 'Darwin' and platform.system() != 'Windows': + args += ['--owner=0', '--group=0'] + + # Discard stderr output such as 'tar: Failed to open ...'. We'll detect + # these cases using the exit code, which should cause 'shell.call' to + # raise. + shell.call(args + [source], stderr=shell.DEVNULL) + + class BuildScriptInvocation(object): """Represent a single build script invocation.""" @@ -1169,8 +1187,8 @@ def main_normal(): # run `tar` without the leading '/' (we remove it ourselves to keep # `tar` from emitting a warning). with shell.pushd(args.install_symroot): - tar.tar(source=prefix.lstrip('/'), - destination=args.symbols_package) + tar(source=prefix.lstrip('/'), + destination=args.symbols_package) return 0 diff --git a/utils/swift_build_support/swift_build_support/tar.py b/utils/swift_build_support/swift_build_support/tar.py deleted file mode 100644 index 15d29ee5d40b3..0000000000000 --- a/utils/swift_build_support/swift_build_support/tar.py +++ /dev/null @@ -1,34 +0,0 @@ -# swift_build_support/tar.py - Call tar from Python -*- python -*- -# -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See https://swift.org/LICENSE.txt for license information -# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors - -from __future__ import absolute_import - -import platform - -from . import shell - - -def tar(source, destination): - """ - Create a gzip archive of the file at 'source' at the given - 'destination' path. - """ - # We do not use `tarfile` here because: - # - We wish to support LZMA2 compression while also supporting Python 2.7. - # - We wish to explicitly set the owner and group of the archive. - args = ['tar', '-c', '-z', '-f', destination] - - if platform.system() != 'Darwin' and platform.system() != 'Windows': - args += ['--owner=0', '--group=0'] - - # Discard stderr output such as 'tar: Failed to open ...'. We'll detect - # these cases using the exit code, which should cause 'shell.call' to - # raise. - shell.call(args + [source], stderr=shell.DEVNULL) diff --git a/utils/swift_build_support/tests/test_tar.py b/utils/swift_build_support/tests/test_tar.py deleted file mode 100644 index 290a4179e4c78..0000000000000 --- a/utils/swift_build_support/tests/test_tar.py +++ /dev/null @@ -1,72 +0,0 @@ -# test_tar.py - Unit tests for swift_build_support.tar -*- python -*- -# -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See https://swift.org/LICENSE.txt for license information -# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors - -import os -import platform -import sys -import tempfile -import unittest -try: - from StringIO import StringIO -except ImportError: - from io import StringIO - -from swift_build_support.tar import tar - - -class TarTestCase(unittest.TestCase): - def setUp(self): - self._orig_stdout = sys.stdout - self._orig_stderr = sys.stderr - self.stdout = StringIO() - self.stderr = StringIO() - sys.stdout = self.stdout - sys.stderr = self.stderr - - def tearDown(self): - sys.stdout = self._orig_stdout - sys.stderr = self._orig_stderr - - def test_tar_this_file_succeeds(self): - # `tar` complains about absolute paths, so use a relative path here. - if platform.system() != 'Windows': - source = os.path.relpath(__file__) - else: - # Windows can use absolute paths, specially because the relative - # path might not exist because the file and the current directory - # might be in different drives. - source = __file__ - _, destination = tempfile.mkstemp() - tar(source=source, destination=destination) - - if platform.system() == "Darwin" or platform.system() == 'Windows': - expect = "+ tar -c -z -f {dest} {source}\n" - else: - expect = "+ tar -c -z -f {dest} --owner=0 --group=0 {source}\n" - - self.assertEqual(self.stdout.getvalue(), "") - self.assertEqual(self.stderr.getvalue(), - expect.format(dest=self._platform_quote(destination), - source=self._platform_quote(source))) - - def test_tar_nonexistent_file_raises(self): - with self.assertRaises(SystemExit): - tar(source='/path/to/something/that/surely/doesnt/exist', - destination='/another/path/that/shouldnt/exist') - - def _platform_quote(self, path): - if platform.system() == 'Windows': - return "'{}'".format(path) - else: - return path - - -if __name__ == '__main__': - unittest.main()