Unreverts revert: Makes it possible to find files used by some unit tests when running them as Chrome native tests.
TBR=andrew@webrtc.org BUG=N/A Review URL: https://webrtc-codereview.appspot.com/1754005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@4303 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
155
webrtc/tools/update_resources.py
Executable file
155
webrtc/tools/update_resources.py
Executable file
@ -0,0 +1,155 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (c) 2012 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.
|
||||
|
||||
"""Downloads WebRTC resources files from a remote host."""
|
||||
|
||||
from optparse import OptionParser
|
||||
from urlparse import urljoin
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import tarfile
|
||||
import tempfile
|
||||
import urllib2
|
||||
|
||||
DESIRED_VERSION = 16
|
||||
REMOTE_URL_BASE = 'http://commondatastorage.googleapis.com/webrtc-resources'
|
||||
VERSION_FILENAME = 'webrtc-resources-version'
|
||||
FILENAME_PREFIX = 'webrtc-resources-'
|
||||
EXTENSION = '.tgz'
|
||||
RELATIVE_OUTPUT_PATH = '../../'
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
Downloads WebRTC resources files from a remote host.
|
||||
|
||||
This script will download WebRTC resource files used for testing, like audio
|
||||
and video files. It will check the current version in the DEPS file and
|
||||
compare it with the one downloaded (kept in a text file in the download dir).
|
||||
If the DEPS version is different than the one downloaded, the correct version
|
||||
will be downloaded.
|
||||
"""
|
||||
|
||||
# Make it possible to skip download using an environment variable:
|
||||
if os.getenv('WEBRTC_SKIP_RESOURCES_DOWNLOAD'):
|
||||
print 'Skipping resources download since WEBRTC_SKIP_RESOURCES_DOWNLOAD set'
|
||||
return
|
||||
|
||||
# Define and parse arguments.
|
||||
parser = OptionParser()
|
||||
parser.add_option('-f', '--force', action='store_true', dest='force',
|
||||
help='forces download and removal of existing resources.')
|
||||
parser.add_option('-b', '--base_url', dest='base_url',
|
||||
help= 'Overrides the default Base URL (%s) and uses the '
|
||||
'supplied URL instead.' % REMOTE_URL_BASE)
|
||||
parser.add_option('-p', dest='path', help= 'path of resources directory'
|
||||
'relative to this script', default=RELATIVE_OUTPUT_PATH)
|
||||
options = parser.parse_args()[0]
|
||||
|
||||
project_root_dir = os.path.normpath(sys.path[0] + '/' + options.path)
|
||||
downloads_dir = os.path.join(project_root_dir, 'resources')
|
||||
current_version_file = os.path.join(downloads_dir, VERSION_FILENAME)
|
||||
|
||||
# Ensure the downloads dir is created.
|
||||
if not os.path.isdir(downloads_dir):
|
||||
os.mkdir(downloads_dir)
|
||||
|
||||
# Download archive if forced or DEPS version is different than our current.
|
||||
current_version = _get_current_version(current_version_file)
|
||||
if DESIRED_VERSION != current_version or options.force:
|
||||
base_url = options.base_url or REMOTE_URL_BASE
|
||||
_perform_download(base_url, DESIRED_VERSION, downloads_dir)
|
||||
else:
|
||||
print 'Already have correct version: %s' % current_version
|
||||
|
||||
|
||||
def _get_current_version(current_version_file):
|
||||
"""Returns the version already downloaded (if any).
|
||||
|
||||
Args:
|
||||
current_version_file: The filename of the text file containing the
|
||||
currently downloaded version (if any) on local disk.
|
||||
Returns:
|
||||
The version number, or 0 if no downloaded version exists.
|
||||
"""
|
||||
current_version = 0
|
||||
if os.path.isfile(current_version_file):
|
||||
f = open(current_version_file)
|
||||
current_version = int(f.read())
|
||||
f.close()
|
||||
print 'Found downloaded resources: version: %s' % current_version
|
||||
return current_version
|
||||
|
||||
|
||||
def _perform_download(base_url, desired_version, downloads_dir):
|
||||
"""Performs the download and extracts the downloaded resources.
|
||||
|
||||
Args:
|
||||
base_url: URL that holds the resource downloads.
|
||||
desired_version: Desired version, which decides the filename.
|
||||
"""
|
||||
temp_dir = tempfile.mkdtemp(prefix='webrtc-resources-')
|
||||
try:
|
||||
archive_name = '%s%s%s' % (FILENAME_PREFIX, desired_version, EXTENSION)
|
||||
# urljoin requires base URL to end with slash to construct a proper URL
|
||||
# to our file:
|
||||
if not base_url[-1:] == '/':
|
||||
base_url += '/'
|
||||
remote_archive_url = urljoin(base_url, archive_name)
|
||||
# Download into the temporary directory with display of progress, inspired
|
||||
# by the Stack Overflow post at http://goo.gl/JIrbo
|
||||
temp_filename = os.path.join(temp_dir, archive_name)
|
||||
print 'Downloading: %s' % remote_archive_url
|
||||
|
||||
response = urllib2.urlopen(remote_archive_url)
|
||||
temp_file = open(temp_filename, 'wb')
|
||||
meta = response.info()
|
||||
file_size_kb = int(meta.getheaders('Content-Length')[0]) / 1024
|
||||
print 'Progress: %s : %s kB' % (archive_name, file_size_kb)
|
||||
|
||||
file_size_dl_kb = 0
|
||||
block_size = 65536
|
||||
while True:
|
||||
file_buffer = response.read(block_size)
|
||||
if not file_buffer:
|
||||
break
|
||||
file_size_dl_kb += len(file_buffer) / 1024
|
||||
temp_file.write(file_buffer)
|
||||
status = r'%10d kB [%3.2f%%]' % (file_size_dl_kb,
|
||||
file_size_dl_kb * 100. / file_size_kb)
|
||||
status += chr(8) * (len(status) + 1)
|
||||
print status,
|
||||
print
|
||||
temp_file.close()
|
||||
|
||||
# Clean up the existing resources dir.
|
||||
print 'Removing old resources in %s' % downloads_dir
|
||||
shutil.rmtree(downloads_dir)
|
||||
os.mkdir(downloads_dir)
|
||||
|
||||
# Extract the archive.
|
||||
archive = tarfile.open(temp_filename, 'r:gz')
|
||||
archive.extractall(downloads_dir)
|
||||
archive.close()
|
||||
print 'Extracted resource files into %s' % downloads_dir
|
||||
|
||||
# Write the downloaded version to a text file in the resources dir to avoid
|
||||
# re-download of the same version in the future.
|
||||
new_version_filename = os.path.join(downloads_dir, VERSION_FILENAME)
|
||||
version_file = open(new_version_filename, 'w')
|
||||
version_file.write('%d' % desired_version)
|
||||
version_file.close()
|
||||
|
||||
finally:
|
||||
# Clean up the temp dir.
|
||||
shutil.rmtree(temp_dir)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Reference in New Issue
Block a user