Commit 50c631e3 authored by Joanna Wang's avatar Joanna Wang Committed by LUCI CQ

Skip 'ls' when downloading from gs.

Bug: 959167
Change-Id: I160658264dac71a9cff280cf3ba606d583d8f2b3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/3646593Reviewed-by: 's avatarGavin Mak <gavinmak@google.com>
Commit-Queue: Joanna Wang <jojwang@chromium.org>
parent bfefaa83
...@@ -273,9 +273,20 @@ def _downloader_worker_thread(thread_num, q, force, base_url, ...@@ -273,9 +273,20 @@ def _downloader_worker_thread(thread_num, q, force, base_url,
skip = False skip = False
if skip: if skip:
continue continue
# Check if file exists.
file_url = '%s/%s' % (base_url, input_sha1_sum) file_url = '%s/%s' % (base_url, input_sha1_sum)
(code, _, err) = gsutil.check_call('ls', file_url)
try:
if delete:
os.remove(output_filename) # Delete the file if it exists already.
except OSError:
if os.path.exists(output_filename):
out_q.put('%d> Warning: deleting %s failed.' % (
thread_num, output_filename))
if verbose:
out_q.put('%d> Downloading %s@%s...' % (
thread_num, output_filename, input_sha1_sum))
code, _, err = gsutil.check_call('cp', file_url, output_filename)
if code != 0: if code != 0:
if code == 404: if code == 404:
out_q.put('%d> File %s for %s does not exist, skipping.' % ( out_q.put('%d> File %s for %s does not exist, skipping.' % (
...@@ -294,25 +305,9 @@ def _downloader_worker_thread(thread_num, q, force, base_url, ...@@ -294,25 +305,9 @@ def _downloader_worker_thread(thread_num, q, force, base_url,
# Other error, probably auth related (bad ~/.boto, etc). # Other error, probably auth related (bad ~/.boto, etc).
out_q.put('%d> Failed to fetch file %s for %s, skipping. [Err: %s]' % out_q.put('%d> Failed to fetch file %s for %s, skipping. [Err: %s]' %
(thread_num, file_url, output_filename, err)) (thread_num, file_url, output_filename, err))
ret_codes.put((1, 'Failed to fetch file %s for %s. [Err: %s]' % ret_codes.put((code, 'Failed to fetch file %s for %s. [Err: %s]' %
(file_url, output_filename, err))) (file_url, output_filename, err)))
continue continue
# Fetch the file.
if verbose:
out_q.put('%d> Downloading %s@%s...' %
(thread_num, output_filename, input_sha1_sum))
try:
if delete:
os.remove(output_filename) # Delete the file if it exists already.
except OSError:
if os.path.exists(output_filename):
out_q.put('%d> Warning: deleting %s failed.' % (
thread_num, output_filename))
code, _, err = gsutil.check_call('cp', file_url, output_filename)
if code != 0:
out_q.put('%d> %s' % (thread_num, err))
ret_codes.put((code, err))
continue
remote_sha1 = get_sha1(output_filename) remote_sha1 = get_sha1(output_filename)
if remote_sha1 != input_sha1_sum: if remote_sha1 != input_sha1_sum:
......
...@@ -248,7 +248,6 @@ class DownloadTests(unittest.TestCase): ...@@ -248,7 +248,6 @@ class DownloadTests(unittest.TestCase):
sha1_hash = self.lorem_ipsum_sha1 sha1_hash = self.lorem_ipsum_sha1
input_filename = '%s/%s' % (self.base_url, sha1_hash) input_filename = '%s/%s' % (self.base_url, sha1_hash)
output_filename = os.path.join(self.base_path, 'uploaded_lorem_ipsum.txt') output_filename = os.path.join(self.base_path, 'uploaded_lorem_ipsum.txt')
self.gsutil.add_expected(0, '', '') # ls
self.gsutil.add_expected(0, '', '', lambda: shutil.copyfile( self.gsutil.add_expected(0, '', '', lambda: shutil.copyfile(
self.lorem_ipsum, output_filename)) # cp self.lorem_ipsum, output_filename)) # cp
self.queue.put((sha1_hash, output_filename)) self.queue.put((sha1_hash, output_filename))
...@@ -258,8 +257,6 @@ class DownloadTests(unittest.TestCase): ...@@ -258,8 +257,6 @@ class DownloadTests(unittest.TestCase):
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, False)
expected_calls = [ expected_calls = [
('check_call',
('ls', input_filename)),
('check_call', ('check_call',
('cp', input_filename, output_filename))] ('cp', input_filename, output_filename))]
sha1_hash = '7871c8e24da15bad8b0be2c36edc9dc77e37727f' sha1_hash = '7871c8e24da15bad8b0be2c36edc9dc77e37727f'
...@@ -304,8 +301,6 @@ class DownloadTests(unittest.TestCase): ...@@ -304,8 +301,6 @@ class DownloadTests(unittest.TestCase):
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, True, delete=False)
expected_calls = [ expected_calls = [
('check_call',
('ls', input_filename)),
('check_call', ('check_call',
('cp', input_filename, output_filename))] ('cp', input_filename, output_filename))]
if sys.platform != 'win32': if sys.platform != 'win32':
...@@ -362,8 +357,7 @@ class DownloadTests(unittest.TestCase): ...@@ -362,8 +357,7 @@ class DownloadTests(unittest.TestCase):
True, True,
True, True,
delete=False) delete=False)
expected_calls += [('check_call', ('ls', input_filename)), expected_calls += [('check_call', ('cp', input_filename, output_filename))]
('check_call', ('cp', input_filename, output_filename))]
if sys.platform != 'win32': if sys.platform != 'win32':
expected_calls.append( expected_calls.append(
('check_call', ('stat', 'gs://sometesturl/%s' % sha1_hash))) ('check_call', ('stat', 'gs://sometesturl/%s' % sha1_hash)))
...@@ -389,17 +383,18 @@ class DownloadTests(unittest.TestCase): ...@@ -389,17 +383,18 @@ class DownloadTests(unittest.TestCase):
self.queue.put((sha1_hash, output_filename)) self.queue.put((sha1_hash, output_filename))
self.queue.put((None, None)) self.queue.put((None, None))
stdout_queue = queue.Queue() stdout_queue = queue.Queue()
self.gsutil.add_expected(1, '', '') # Return error when 'ls' is called. self.gsutil.add_expected(1, '', '') # Return error when 'cp' 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, False)
expected_output = [ expected_output = [
'0> Downloading %s@%s...' % (output_filename, sha1_hash),
'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),
] ]
expected_calls = [ expected_calls = [
('check_call', ('check_call',
('ls', input_filename)) ('cp', input_filename, output_filename))
] ]
expected_ret_codes = [ expected_ret_codes = [
(1, 'Failed to fetch file %s for %s. [Err: ]' % ( (1, 'Failed to fetch file %s for %s. [Err: ]' % (
...@@ -413,8 +408,7 @@ class DownloadTests(unittest.TestCase): ...@@ -413,8 +408,7 @@ class DownloadTests(unittest.TestCase):
sha1_hash = '7871c8e24da15bad8b0be2c36edc9dc77e37727f' sha1_hash = '7871c8e24da15bad8b0be2c36edc9dc77e37727f'
input_filename = '%s/%s' % (self.base_url, sha1_hash) input_filename = '%s/%s' % (self.base_url, sha1_hash)
output_filename = os.path.join(self.base_path, 'uploaded_lorem_ipsum.txt') output_filename = os.path.join(self.base_path, 'uploaded_lorem_ipsum.txt')
self.gsutil.add_expected(0, '', '') # ls self.gsutil.add_expected(101, '', 'Test error message.') # cp
self.gsutil.add_expected(101, '', 'Test error message.')
code = download_from_google_storage.download_from_google_storage( code = download_from_google_storage.download_from_google_storage(
input_filename=sha1_hash, input_filename=sha1_hash,
base_url=self.base_url, base_url=self.base_url,
...@@ -430,8 +424,6 @@ class DownloadTests(unittest.TestCase): ...@@ -430,8 +424,6 @@ class DownloadTests(unittest.TestCase):
auto_platform=False, auto_platform=False,
extract=False) extract=False)
expected_calls = [ expected_calls = [
('check_call',
('ls', input_filename)),
('check_call', ('check_call',
('cp', input_filename, output_filename)) ('cp', input_filename, output_filename))
] ]
...@@ -450,8 +442,7 @@ class DownloadTests(unittest.TestCase): ...@@ -450,8 +442,7 @@ class DownloadTests(unittest.TestCase):
def _write_bad_file(): def _write_bad_file():
with open(output_filename, 'w') as f: with open(output_filename, 'w') as f:
f.write('foobar') f.write('foobar')
self.gsutil.add_expected(0, '', '') self.gsutil.add_expected(0, '', '', _write_bad_file) # cp
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, False)
self.assertTrue(q.empty()) self.assertTrue(q.empty())
...@@ -470,7 +461,6 @@ class DownloadTests(unittest.TestCase): ...@@ -470,7 +461,6 @@ class DownloadTests(unittest.TestCase):
input_filename = '%s/%s' % (self.base_url, sha1_hash) input_filename = '%s/%s' % (self.base_url, sha1_hash)
output_filename = os.path.join(self.base_path, 'uploaded_lorem_ipsum.txt') output_filename = os.path.join(self.base_path, 'uploaded_lorem_ipsum.txt')
self.gsutil.add_expected(0, '', '') # version self.gsutil.add_expected(0, '', '') # version
self.gsutil.add_expected(0, '', '') # ls
self.gsutil.add_expected(0, '', '', lambda: shutil.copyfile( self.gsutil.add_expected(0, '', '', lambda: shutil.copyfile(
self.lorem_ipsum, output_filename)) # cp self.lorem_ipsum, output_filename)) # cp
code = download_from_google_storage.download_from_google_storage( code = download_from_google_storage.download_from_google_storage(
...@@ -489,8 +479,6 @@ class DownloadTests(unittest.TestCase): ...@@ -489,8 +479,6 @@ class DownloadTests(unittest.TestCase):
extract=False) extract=False)
expected_calls = [ expected_calls = [
('check_call', ('version',)), ('check_call', ('version',)),
('check_call',
('ls', input_filename)),
('check_call', ('check_call',
('cp', input_filename, output_filename))] ('cp', input_filename, output_filename))]
if sys.platform != 'win32': if sys.platform != 'win32':
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment