#!/usr/bin/env python3
# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

# Script for uploading to x20 as a dependency in the same way we use cloud
# storage.

import optparse
import os
import shutil
import stat
import subprocess
import sys
import tarfile
import utils

GMSCORE_DEPS = '/google/data/rw/teams/r8/deps'

def parse_options():
  return optparse.OptionParser().parse_args()

def uploadFile(filename, dest):
  print 'Uploading to %s' % dest
  shutil.copyfile(filename, dest)
  subprocess.check_call(['chmod', '664', dest])

def Main():
  (options, args) = parse_options()
  assert len(args) == 1
  name = args[0]
  print 'Creating archive for %s' % name
  if not name in os.listdir('.'):
    print 'You must be standing directly below the directory you are uploading'
    return 1
  filename = utils.create_archive(name)
  sha1 = utils.get_sha1(filename)
  dest = os.path.join(GMSCORE_DEPS, sha1)
  uploadFile(filename, dest)
  sha1_file = '%s.sha1' % filename
  with open(sha1_file, 'w') as output:
    output.write(sha1)
  print 'Sha (%s) written to: %s' % (sha1, sha1_file)

if __name__ == '__main__':
  sys.exit(Main())
