blob: 50a362d0f4983ed326af9346108e6d28c2f92b10 [file] [log] [blame]
David James0f5252f2013-04-19 08:03:14 -07001# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Download a binpkg from Google Storage.
6
7This is needed for two reasons:
8 1) In the case where a binpkg is left over in the packages dir,
9 portage doesn't handle retries well and reports an error.
10 2) gsutil retries when a download is interrupted, but it doesn't
11 handle the case where we are unable to resume a transfer and the
12 transfer needs to be restarted from scratch. Ensuring that the
13 file is deleted between each retry helps handle that eventuality.
14"""
15
Mike Frysinger383367e2014-09-16 15:06:17 -040016from __future__ import print_function
17
David James0f5252f2013-04-19 08:03:14 -070018import shutil
19
20from chromite.lib import commandline
21from chromite.lib import cros_build_lib
22from chromite.lib import gs
23from chromite.lib import osutils
24
25
26def GetParser():
27 """Creates the argparse parser."""
28 parser = commandline.ArgumentParser(description=__doc__)
29 parser.add_argument('uri', help='Google Storage URI to download')
30 parser.add_argument('filename', help='Location to store the file.')
31 return parser
32
Mike Frysinger33494002014-05-07 23:46:08 -040033
David James0f5252f2013-04-19 08:03:14 -070034def Copy(ctx, uri, filename):
35 """Run the copy using a temp file."""
36 temp_path = '%s.tmp' % filename
37 osutils.SafeUnlink(temp_path)
38 try:
Mike Frysinger33494002014-05-07 23:46:08 -040039 ctx.Copy(uri, temp_path)
David James0f5252f2013-04-19 08:03:14 -070040 shutil.move(temp_path, filename)
41 finally:
42 osutils.SafeUnlink(temp_path)
43
Mike Frysinger33494002014-05-07 23:46:08 -040044
Mike Frysinger9ad5fab2013-05-30 13:37:26 -040045def main(argv):
David James0f5252f2013-04-19 08:03:14 -070046 parser = GetParser()
Mike Frysinger9ad5fab2013-05-30 13:37:26 -040047 options = parser.parse_args(argv)
Gabe Blackcb8bc8a2014-08-20 11:47:53 -070048 ctx = gs.GSContext()
David James0f5252f2013-04-19 08:03:14 -070049 try:
Mike Frysinger11291062014-08-18 00:01:11 -040050 Copy(ctx, options.uri, options.filename)
51 except gs.GSContextException as ex:
David James0f5252f2013-04-19 08:03:14 -070052 # Hide the stack trace using Die.
53 cros_build_lib.Die('%s', ex)