| # 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 Installer base class.""" |
| |
| import cr |
| |
| |
| class Installer(cr.Action, cr.Plugin.Type): |
| """Base class for implementing installers. |
| |
| Installer implementations must implement the Uninstall and Install methods. |
| If the location into which targets are built is find for running them, then |
| they do not actually have to do anything. |
| """ |
| |
| SELECTOR_ARG = '--installer' |
| SELECTOR = 'CR_INSTALLER' |
| SELECTOR_HELP = 'Sets the installer to use.' |
| |
| @cr.Plugin.activemethod |
| def Uninstall(self, context, targets, arguments): |
| """Removes a target from it's installed location.""" |
| |
| raise NotImplementedError('Must be overridden.') |
| |
| @cr.Plugin.activemethod |
| def Install(self, context, targets, arguments): |
| """Installs a target somewhere so that it is ready to run.""" |
| raise NotImplementedError('Must be overridden.') |
| |
| @cr.Plugin.activemethod |
| def Reinstall(self, context, targets, arguments): |
| """Force a target to install even if already installed. |
| |
| Default implementation is to do an Uninstall Install sequence. |
| Do not call the base version if you implement a more efficient one. |
| """ |
| self.Uninstall(context, targets, []) |
| self.Install(context, targets, arguments) |
| |
| |
| class SkipInstaller(Installer): |
| """An Installer the user chooses to bypass the install step of a command.""" |
| |
| @property |
| def priority(self): |
| return super(SkipInstaller, self).priority - 1 |
| |
| def Uninstall(self, context, targets, arguments): |
| pass |
| |
| def Install(self, context, targets, arguments): |
| pass |