# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""A module for the install command."""

import cr


class InstallCommand(cr.Command):
  """The implementation of the install command.

  This first uses Builder.Build to bring the target up to date, and then
  installs it using Installer.Reinstall.
  The builder installs its command line arguments, and you can use those to
  select which builder is used. Selecting the skip builder
  (using --builder=skip) bypasses the build stage.
  """

  def __init__(self):
    super(InstallCommand, self).__init__()
    self.help = 'Install a binary'

  def AddArguments(self, subparsers):
    parser = super(InstallCommand, self).AddArguments(subparsers)
    cr.Builder.AddArguments(self, parser)
    cr.Installer.AddArguments(self, parser)
    cr.Target.AddArguments(self, parser, allow_multiple=True)
    self.ConsumeArgs(parser, 'the installer')
    return parser

  def Run(self):
    targets = cr.Target.GetTargets()
    if not cr.Installer.Skipping():
      cr.Builder.Build(targets, [])
    cr.Installer.Reinstall(targets, cr.context.remains)
