old_contents: #!/usr/bin/env python
  #
  # Copyright 2016 Google Inc.
  #
  # Use of this source code is governed by a BSD-style license that can be
  # found in the LICENSE file.
  
  
  """Tool for managing assets."""
  
  
  import argparse
  import asset_utils
  import os
  import shutil
  import subprocess
  import sys
  
  FILE_DIR = os.path.dirname(os.path.abspath(__file__))
  INFRA_BOTS_DIR = os.path.realpath(os.path.join(FILE_DIR, os.pardir))
  
  sys.path.insert(0, INFRA_BOTS_DIR)
  import utils
  
  
  def _common_args(prs):
    """Add common args to the given argparse.ArgumentParser."""
    prs.add_argument('asset_name', help='Name of the asset.')
    prs.add_argument('--gsutil')
    prs.add_argument('--service_account_json')
  
  
  def _store(args):
    """Return asset_utils.MultiStore based on args."""
    return asset_utils.MultiStore(gsutil=args.gsutil,
                                  service_account_json=args.service_account_json)
  
  
  def _asset(args):
    """Return asset_utils.Asset based on args."""
    return asset_utils.Asset(args.asset_name, _store(args))
  
  
  def add(args):
    """Add a new asset."""
    asset_utils.Asset.add(args.asset_name, _store(args))
  
  
  def remove(args):
    """Remove an asset."""
    _asset(args).remove()
  
  
  def download(args):
    """Download the current version of an asset."""
    _asset(args).download_current_version(args.target_dir)
  
  
  def upload(args):
    """Upload a new version of the asset."""
    _asset(args).upload_new_version(args.target_dir, commit=args.commit,
                                    extra_tags=args.extra_tags)
  
  
  def main(argv):
    parser = argparse.ArgumentParser(description='Tool for managing assets.')
    subs = parser.add_subparsers(help='Commands:')
  
    prs_add = subs.add_parser('add', help='Add a new asset.')
    prs_add.set_defaults(func=add)
    _common_args(prs_add)
  
    prs_remove = subs.add_parser('remove', help='Remove an asset.')
    prs_remove.set_defaults(func=remove)
    _common_args(prs_remove)
  
    prs_download = subs.add_parser(
        'download', help='Download the current version of an asset.')
    prs_download.set_defaults(func=download)
    _common_args(prs_download)
    prs_download.add_argument('--target_dir', '-t', required=True)
  
    prs_upload = subs.add_parser(
        'upload', help='Upload a new version of an asset.')
    prs_upload.set_defaults(func=upload)
    _common_args(prs_upload)
    prs_upload.add_argument('--target_dir', '-t', required=True)
    prs_upload.add_argument('--commit', action='store_true')
    prs_upload.add_argument(
      '--extra_tags', nargs='+',
      help='Additional tags for the CIPD package, "key:value"')
  
    args = parser.parse_args(argv)
    args.func(args)
  
  
  if __name__ == '__main__':
    main(sys.argv[1:])
  
new_contents: #!/usr/bin/env python
  #
  # Copyright 2016 Google Inc.
  #
  # Use of this source code is governed by a BSD-style license that can be
  # found in the LICENSE file.
  
  
  """Tool for managing assets."""
  
  
  import argparse
  from . import asset_utils
  import os
  import shutil
  import subprocess
  import sys
  
  FILE_DIR = os.path.dirname(os.path.abspath(__file__))
  INFRA_BOTS_DIR = os.path.realpath(os.path.join(FILE_DIR, os.pardir))
  
  sys.path.insert(0, INFRA_BOTS_DIR)
  import utils
  
  
  def _common_args(prs):
    """Add common args to the given argparse.ArgumentParser."""
    prs.add_argument('asset_name', help='Name of the asset.')
    prs.add_argument('--gsutil')
    prs.add_argument('--service_account_json')
  
  
  def _store(args):
    """Return asset_utils.MultiStore based on args."""
    return asset_utils.MultiStore(gsutil=args.gsutil,
                                  service_account_json=args.service_account_json)
  
  
  def _asset(args):
    """Return asset_utils.Asset based on args."""
    return asset_utils.Asset(args.asset_name, _store(args))
  
  
  def add(args):
    """Add a new asset."""
    asset_utils.Asset.add(args.asset_name, _store(args))
  
  
  def remove(args):
    """Remove an asset."""
    _asset(args).remove()
  
  
  def download(args):
    """Download the current version of an asset."""
    _asset(args).download_current_version(args.target_dir)
  
  
  def upload(args):
    """Upload a new version of the asset."""
    _asset(args).upload_new_version(args.target_dir, commit=args.commit,
                                    extra_tags=args.extra_tags)
  
  
  def main(argv):
    parser = argparse.ArgumentParser(description='Tool for managing assets.')
    subs = parser.add_subparsers(help='Commands:')
  
    prs_add = subs.add_parser('add', help='Add a new asset.')
    prs_add.set_defaults(func=add)
    _common_args(prs_add)
  
    prs_remove = subs.add_parser('remove', help='Remove an asset.')
    prs_remove.set_defaults(func=remove)
    _common_args(prs_remove)
  
    prs_download = subs.add_parser(
        'download', help='Download the current version of an asset.')
    prs_download.set_defaults(func=download)
    _common_args(prs_download)
    prs_download.add_argument('--target_dir', '-t', required=True)
  
    prs_upload = subs.add_parser(
        'upload', help='Upload a new version of an asset.')
    prs_upload.set_defaults(func=upload)
    _common_args(prs_upload)
    prs_upload.add_argument('--target_dir', '-t', required=True)
    prs_upload.add_argument('--commit', action='store_true')
    prs_upload.add_argument(
      '--extra_tags', nargs='+',
      help='Additional tags for the CIPD package, "key:value"')
  
    args = parser.parse_args(argv)
    args.func(args)
  
  
  if __name__ == '__main__':
    main(sys.argv[1:])
  
subject: Fix asset_utils import