Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Unified Diff: webrtc/tools/testing/utils.py

Issue 2861653005: Moving scripts to download and build apprtc/collider. (Closed)
Patch Set: rebasing Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/tools/testing/setup_apprtc.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/tools/testing/utils.py
diff --git a/webrtc/tools/testing/utils.py b/webrtc/tools/testing/utils.py
new file mode 100755
index 0000000000000000000000000000000000000000..7e38b42a710d605384f732c4a01b543ba2768027
--- /dev/null
+++ b/webrtc/tools/testing/utils.py
@@ -0,0 +1,135 @@
+#!/usr/bin/env python
+# Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
+#
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file in the root of the source
+# tree. An additional intellectual property rights grant can be found
+# in the file PATENTS. All contributing project authors may
+# be found in the AUTHORS file in the root of the source tree.
+
+"""Utilities for all our deps-management stuff."""
+
+import hashlib
+import os
+import shutil
+import sys
+import subprocess
+import tarfile
+import time
+import zipfile
+
+
+def RunSubprocessWithRetry(cmd):
+ """Invokes the subprocess and backs off exponentially on fail."""
+ for i in range(5):
+ try:
+ subprocess.check_call(cmd)
+ return
+ except subprocess.CalledProcessError as exception:
+ backoff = pow(2, i)
+ print 'Got %s, retrying in %d seconds...' % (exception, backoff)
+ time.sleep(backoff)
+
+ print 'Giving up.'
+ raise exception
+
+
+def DownloadFilesFromGoogleStorage(path):
+ print 'Downloading files in %s...' % path
+
+ extension = 'bat' if 'win32' in sys.platform else 'py'
+ cmd = ['download_from_google_storage.%s' % extension,
+ '--bucket=chromium-webrtc-resources',
+ '--auto_platform',
+ '--recursive',
+ '--directory', path]
+ subprocess.check_call(cmd)
+
+
+def ComputeSHA1(path):
+ if not os.path.exists(path):
+ return 0
+
+ sha1 = hashlib.sha1()
+ file_to_hash = open(path, 'rb')
+ try:
+ sha1.update(file_to_hash.read())
+ finally:
+ file_to_hash.close()
+
+ return sha1.hexdigest()
+
+
+# Code partially copied from
+# https://cs.chromium.org#chromium/build/scripts/common/chromium_utils.py
+def RemoveDirectory(*path):
+ """Recursively removes a directory, even if it's marked read-only.
+
+ Remove the directory located at *path, if it exists.
+
+ shutil.rmtree() doesn't work on Windows if any of the files or directories
+ are read-only, which svn repositories and some .svn files are. We need to
+ be able to force the files to be writable (i.e., deletable) as we traverse
+ the tree.
+
+ Even with all this, Windows still sometimes fails to delete a file, citing
+ a permission error (maybe something to do with antivirus scans or disk
+ indexing). The best suggestion any of the user forums had was to wait a
+ bit and try again, so we do that too. It's hand-waving, but sometimes it
+ works. :/
+ """
+ file_path = os.path.join(*path)
+ print 'Deleting `{}`.'.format(file_path)
+ if not os.path.exists(file_path):
+ print '`{}` does not exist.'.format(file_path)
+ return
+
+ if sys.platform == 'win32':
+ # Give up and use cmd.exe's rd command.
+ file_path = os.path.normcase(file_path)
+ for _ in xrange(3):
+ print 'RemoveDirectory running %s' % (' '.join(
+ ['cmd.exe', '/c', 'rd', '/q', '/s', file_path]))
+ if not subprocess.call(['cmd.exe', '/c', 'rd', '/q', '/s', file_path]):
+ break
+ print ' Failed'
+ time.sleep(3)
+ return
+ else:
+ shutil.rmtree(file_path, ignore_errors=True)
+
+
+def UnpackArchiveTo(archive_path, output_dir):
+ extension = os.path.splitext(archive_path)[1]
+ if extension == '.zip':
+ _UnzipArchiveTo(archive_path, output_dir)
+ else:
+ _UntarArchiveTo(archive_path, output_dir)
+
+
+def _UnzipArchiveTo(archive_path, output_dir):
+ print 'Unzipping {} in {}.'.format(archive_path, output_dir)
+ zip_file = zipfile.ZipFile(archive_path)
+ try:
+ zip_file.extractall(output_dir)
+ finally:
+ zip_file.close()
+
+
+def _UntarArchiveTo(archive_path, output_dir):
+ print 'Untarring {} in {}.'.format(archive_path, output_dir)
+ tar_file = tarfile.open(archive_path, 'r:gz')
+ try:
+ tar_file.extractall(output_dir)
+ finally:
+ tar_file.close()
+
+
+def GetPlatform():
+ if sys.platform.startswith('win'):
+ return 'win'
+ if sys.platform.startswith('linux'):
+ return 'linux'
+ if sys.platform.startswith('darwin'):
+ return 'mac'
+ raise Exception("Can't run on platform %s." % sys.platform)
« no previous file with comments | « webrtc/tools/testing/setup_apprtc.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698