mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-25 23:06:10 +03:00
52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
|
# Copyright 2022 The Chromium Authors
|
||
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
# found in the LICENSE file.
|
||
|
|
||
|
import logging
|
||
|
import os
|
||
|
import subprocess
|
||
|
import sys
|
||
|
import tarfile
|
||
|
import tempfile
|
||
|
|
||
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),
|
||
|
'test')))
|
||
|
|
||
|
from common import DIR_SRC_ROOT
|
||
|
|
||
|
sys.path.append(os.path.join(DIR_SRC_ROOT, 'build'))
|
||
|
import find_depot_tools
|
||
|
|
||
|
|
||
|
def DownloadAndUnpackFromCloudStorage(url, output_dir):
|
||
|
"""Fetches a tarball from GCS and uncompresses it to |output_dir|."""
|
||
|
|
||
|
# Pass the compressed stream directly to 'tarfile'; don't bother writing it
|
||
|
# to disk first.
|
||
|
tmp_file = 'image.tgz'
|
||
|
with tempfile.TemporaryDirectory() as tmp_d:
|
||
|
tmp_file_location = os.path.join(tmp_d, tmp_file)
|
||
|
cmd = [
|
||
|
sys.executable,
|
||
|
os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, 'gsutil.py'), 'cp', url,
|
||
|
tmp_file_location
|
||
|
]
|
||
|
|
||
|
logging.debug('Running "%s"', ' '.join(cmd))
|
||
|
task = subprocess.run(cmd,
|
||
|
stderr=subprocess.PIPE,
|
||
|
stdout=subprocess.PIPE,
|
||
|
check=True,
|
||
|
encoding='utf-8')
|
||
|
|
||
|
try:
|
||
|
tarfile.open(name=tmp_file_location,
|
||
|
mode='r|gz').extractall(path=output_dir)
|
||
|
except tarfile.ReadError as exc:
|
||
|
_, stderr_data = task.communicate()
|
||
|
stderr_data = stderr_data.decode()
|
||
|
raise subprocess.CalledProcessError(
|
||
|
task.returncode, cmd,
|
||
|
'Failed to read a tarfile from gsutil.py.\n{}'.format(
|
||
|
stderr_data if stderr_data else '')) from exc
|