mirror of
https://chromium.googlesource.com/chromium/tools/depot_tools.git
synced 2026-01-11 18:51:29 +00:00
Make download_from_google_storage.py print nothing in the happy case where it needs to do nothing.
The script prints a bunch of stuff behind `if verbose` checks, but then "verbose" was turned on by default in https://bugs.chromium.org/p/chromium/issues/detail?id=504452 I think the wrong lesson was learned from that bug – it sounds like the problem was that an error message was printed only if verbose was set. After this change, the script is silent when it does nothing, and prints something if something happens. (Arguably, it still prints too much in the case where it successfully downloads something.) This is part of a few changes to make `gclient runhooks` less noisy. Bug: 772741,504452 Change-Id: I5823c296abe97611ba4411bab2743673b10dca4b Reviewed-on: https://chromium-review.googlesource.com/706915 Commit-Queue: Nico Weber <thakis@chromium.org> Reviewed-by: Dirk Pranke <dpranke@chromium.org> Reviewed-by: Ryan Tseng <hinoka@chromium.org>
This commit is contained in:
@@ -215,7 +215,7 @@ def _validate_tar_file(tar, prefix):
|
|||||||
return all(map(_validate, tar.getmembers()))
|
return all(map(_validate, tar.getmembers()))
|
||||||
|
|
||||||
def _downloader_worker_thread(thread_num, q, force, base_url,
|
def _downloader_worker_thread(thread_num, q, force, base_url,
|
||||||
gsutil, out_q, ret_codes, verbose, extract,
|
gsutil, out_q, ret_codes, extract,
|
||||||
delete=True):
|
delete=True):
|
||||||
while True:
|
while True:
|
||||||
input_sha1_sum, output_filename = q.get()
|
input_sha1_sum, output_filename = q.get()
|
||||||
@@ -232,10 +232,6 @@ def _downloader_worker_thread(thread_num, q, force, base_url,
|
|||||||
if os.path.exists(output_filename) and not force:
|
if os.path.exists(output_filename) and not force:
|
||||||
if not extract or os.path.exists(extract_dir):
|
if not extract or os.path.exists(extract_dir):
|
||||||
if get_sha1(output_filename) == input_sha1_sum:
|
if get_sha1(output_filename) == input_sha1_sum:
|
||||||
if verbose:
|
|
||||||
out_q.put(
|
|
||||||
'%d> File %s exists and SHA1 matches. Skipping.' % (
|
|
||||||
thread_num, output_filename))
|
|
||||||
continue
|
continue
|
||||||
# Check if file exists.
|
# Check if file exists.
|
||||||
file_url = '%s/%s' % (base_url, input_sha1_sum)
|
file_url = '%s/%s' % (base_url, input_sha1_sum)
|
||||||
@@ -326,18 +322,26 @@ def _downloader_worker_thread(thread_num, q, force, base_url,
|
|||||||
st = os.stat(output_filename)
|
st = os.stat(output_filename)
|
||||||
os.chmod(output_filename, st.st_mode | stat.S_IEXEC)
|
os.chmod(output_filename, st.st_mode | stat.S_IEXEC)
|
||||||
|
|
||||||
def printer_worker(output_queue):
|
|
||||||
while True:
|
class PrinterThread(threading.Thread):
|
||||||
line = output_queue.get()
|
def __init__(self, output_queue):
|
||||||
# Its plausible we want to print empty lines.
|
super(PrinterThread, self).__init__()
|
||||||
if line is None:
|
self.output_queue = output_queue
|
||||||
break
|
self.did_print_anything = False
|
||||||
print line
|
|
||||||
|
def run(self):
|
||||||
|
while True:
|
||||||
|
line = self.output_queue.get()
|
||||||
|
# It's plausible we want to print empty lines: Explicit `is None`.
|
||||||
|
if line is None:
|
||||||
|
break
|
||||||
|
self.did_print_anything = True
|
||||||
|
print line
|
||||||
|
|
||||||
|
|
||||||
def download_from_google_storage(
|
def download_from_google_storage(
|
||||||
input_filename, base_url, gsutil, num_threads, directory, recursive,
|
input_filename, base_url, gsutil, num_threads, directory, recursive,
|
||||||
force, output, ignore_errors, sha1_file, verbose, auto_platform, extract):
|
force, output, ignore_errors, sha1_file, auto_platform, extract):
|
||||||
# Start up all the worker threads.
|
# Start up all the worker threads.
|
||||||
all_threads = []
|
all_threads = []
|
||||||
download_start = time.time()
|
download_start = time.time()
|
||||||
@@ -349,11 +353,11 @@ def download_from_google_storage(
|
|||||||
t = threading.Thread(
|
t = threading.Thread(
|
||||||
target=_downloader_worker_thread,
|
target=_downloader_worker_thread,
|
||||||
args=[thread_num, work_queue, force, base_url,
|
args=[thread_num, work_queue, force, base_url,
|
||||||
gsutil, stdout_queue, ret_codes, verbose, extract])
|
gsutil, stdout_queue, ret_codes, extract])
|
||||||
t.daemon = True
|
t.daemon = True
|
||||||
t.start()
|
t.start()
|
||||||
all_threads.append(t)
|
all_threads.append(t)
|
||||||
printer_thread = threading.Thread(target=printer_worker, args=[stdout_queue])
|
printer_thread = PrinterThread(stdout_queue)
|
||||||
printer_thread.daemon = True
|
printer_thread.daemon = True
|
||||||
printer_thread.start()
|
printer_thread.start()
|
||||||
|
|
||||||
@@ -376,10 +380,9 @@ def download_from_google_storage(
|
|||||||
max_ret_code = max(ret_code, max_ret_code)
|
max_ret_code = max(ret_code, max_ret_code)
|
||||||
if message:
|
if message:
|
||||||
print >> sys.stderr, message
|
print >> sys.stderr, message
|
||||||
if verbose and not max_ret_code:
|
|
||||||
print 'Success!'
|
|
||||||
|
|
||||||
if verbose:
|
# Only print summary if any work was done.
|
||||||
|
if printer_thread.did_print_anything:
|
||||||
print 'Downloading %d files took %1f second(s)' % (
|
print 'Downloading %d files took %1f second(s)' % (
|
||||||
work_queue_size, time.time() - download_start)
|
work_queue_size, time.time() - download_start)
|
||||||
return max_ret_code
|
return max_ret_code
|
||||||
@@ -535,7 +538,7 @@ def main(args):
|
|||||||
return download_from_google_storage(
|
return download_from_google_storage(
|
||||||
input_filename, base_url, gsutil, options.num_threads, options.directory,
|
input_filename, base_url, gsutil, options.num_threads, options.directory,
|
||||||
options.recursive, options.force, options.output, options.ignore_errors,
|
options.recursive, options.force, options.output, options.ignore_errors,
|
||||||
options.sha1_file, options.verbose, options.auto_platform,
|
options.sha1_file, options.auto_platform,
|
||||||
options.extract)
|
options.extract)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ class DownloadTests(unittest.TestCase):
|
|||||||
stdout_queue = Queue.Queue()
|
stdout_queue = Queue.Queue()
|
||||||
download_from_google_storage._downloader_worker_thread(
|
download_from_google_storage._downloader_worker_thread(
|
||||||
0, self.queue, False, self.base_url, self.gsutil,
|
0, self.queue, False, self.base_url, self.gsutil,
|
||||||
stdout_queue, self.ret_codes, True, False)
|
stdout_queue, self.ret_codes, True)
|
||||||
expected_calls = [
|
expected_calls = [
|
||||||
('check_call',
|
('check_call',
|
||||||
('ls', input_filename)),
|
('ls', input_filename)),
|
||||||
@@ -256,7 +256,7 @@ class DownloadTests(unittest.TestCase):
|
|||||||
stdout_queue = Queue.Queue()
|
stdout_queue = Queue.Queue()
|
||||||
download_from_google_storage._downloader_worker_thread(
|
download_from_google_storage._downloader_worker_thread(
|
||||||
0, self.queue, False, self.base_url, self.gsutil,
|
0, self.queue, False, self.base_url, self.gsutil,
|
||||||
stdout_queue, self.ret_codes, True, False)
|
stdout_queue, self.ret_codes, True)
|
||||||
expected_output = [
|
expected_output = [
|
||||||
'0> File %s exists and SHA1 matches. Skipping.' % output_filename
|
'0> File %s exists and SHA1 matches. Skipping.' % output_filename
|
||||||
]
|
]
|
||||||
@@ -278,7 +278,7 @@ class DownloadTests(unittest.TestCase):
|
|||||||
stdout_queue = Queue.Queue()
|
stdout_queue = Queue.Queue()
|
||||||
download_from_google_storage._downloader_worker_thread(
|
download_from_google_storage._downloader_worker_thread(
|
||||||
0, self.queue, True, self.base_url, self.gsutil,
|
0, self.queue, True, self.base_url, self.gsutil,
|
||||||
stdout_queue, self.ret_codes, True, True, delete=False)
|
stdout_queue, self.ret_codes, True, delete=False)
|
||||||
expected_calls = [
|
expected_calls = [
|
||||||
('check_call',
|
('check_call',
|
||||||
('ls', input_filename)),
|
('ls', input_filename)),
|
||||||
@@ -311,7 +311,7 @@ class DownloadTests(unittest.TestCase):
|
|||||||
self.gsutil.add_expected(1, '', '') # Return error when 'ls' is called.
|
self.gsutil.add_expected(1, '', '') # Return error when 'ls' is called.
|
||||||
download_from_google_storage._downloader_worker_thread(
|
download_from_google_storage._downloader_worker_thread(
|
||||||
0, self.queue, False, self.base_url, self.gsutil,
|
0, self.queue, False, self.base_url, self.gsutil,
|
||||||
stdout_queue, self.ret_codes, True, False)
|
stdout_queue, self.ret_codes, True)
|
||||||
expected_output = [
|
expected_output = [
|
||||||
'0> Failed to fetch file %s for %s, skipping. [Err: ]' % (
|
'0> Failed to fetch file %s for %s, skipping. [Err: ]' % (
|
||||||
input_filename, output_filename),
|
input_filename, output_filename),
|
||||||
@@ -345,7 +345,6 @@ class DownloadTests(unittest.TestCase):
|
|||||||
output=output_filename,
|
output=output_filename,
|
||||||
ignore_errors=False,
|
ignore_errors=False,
|
||||||
sha1_file=False,
|
sha1_file=False,
|
||||||
verbose=True,
|
|
||||||
auto_platform=False,
|
auto_platform=False,
|
||||||
extract=False)
|
extract=False)
|
||||||
expected_calls = [
|
expected_calls = [
|
||||||
@@ -377,7 +376,7 @@ class DownloadTests(unittest.TestCase):
|
|||||||
self.gsutil.add_expected(0, '', '')
|
self.gsutil.add_expected(0, '', '')
|
||||||
self.gsutil.add_expected(0, '', '', _write_bad_file)
|
self.gsutil.add_expected(0, '', '', _write_bad_file)
|
||||||
download_from_google_storage._downloader_worker_thread(
|
download_from_google_storage._downloader_worker_thread(
|
||||||
1, q, True, self.base_url, self.gsutil, out_q, ret_codes, True, False)
|
1, q, True, self.base_url, self.gsutil, out_q, ret_codes, True)
|
||||||
self.assertTrue(q.empty())
|
self.assertTrue(q.empty())
|
||||||
msg = ('1> ERROR remote sha1 (%s) does not match expected sha1 (%s).' %
|
msg = ('1> ERROR remote sha1 (%s) does not match expected sha1 (%s).' %
|
||||||
('8843d7f92416211de9ebb963ff4ce28125932878', sha1_hash))
|
('8843d7f92416211de9ebb963ff4ce28125932878', sha1_hash))
|
||||||
@@ -403,7 +402,6 @@ class DownloadTests(unittest.TestCase):
|
|||||||
output=None,
|
output=None,
|
||||||
ignore_errors=False,
|
ignore_errors=False,
|
||||||
sha1_file=False,
|
sha1_file=False,
|
||||||
verbose=True,
|
|
||||||
auto_platform=False,
|
auto_platform=False,
|
||||||
extract=False)
|
extract=False)
|
||||||
expected_calls = [
|
expected_calls = [
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import time
|
|||||||
|
|
||||||
from download_from_google_storage import get_sha1
|
from download_from_google_storage import get_sha1
|
||||||
from download_from_google_storage import Gsutil
|
from download_from_google_storage import Gsutil
|
||||||
from download_from_google_storage import printer_worker
|
from download_from_google_storage import PrinterThread
|
||||||
from download_from_google_storage import GSUTIL_DEFAULT_PATH
|
from download_from_google_storage import GSUTIL_DEFAULT_PATH
|
||||||
|
|
||||||
USAGE_STRING = """%prog [options] target [target2 ...].
|
USAGE_STRING = """%prog [options] target [target2 ...].
|
||||||
@@ -145,7 +145,7 @@ def upload_to_google_storage(
|
|||||||
upload_queue = Queue.Queue()
|
upload_queue = Queue.Queue()
|
||||||
upload_timer = time.time()
|
upload_timer = time.time()
|
||||||
stdout_queue = Queue.Queue()
|
stdout_queue = Queue.Queue()
|
||||||
printer_thread = threading.Thread(target=printer_worker, args=[stdout_queue])
|
printer_thread = PrinterThread(stdout_queue)
|
||||||
printer_thread.daemon = True
|
printer_thread.daemon = True
|
||||||
printer_thread.start()
|
printer_thread.start()
|
||||||
for thread_num in range(num_threads):
|
for thread_num in range(num_threads):
|
||||||
|
|||||||
Reference in New Issue
Block a user