| """Build step class for setting up a clean SDK build environment.""" |
| |
| from __future__ import absolute_import |
| from slave.step import shell_step |
| |
| |
| _REPO_CMD = ['repo', '--time'] |
| |
| |
| def _dirty_validator(returncode, stdout, stderr): |
| return returncode == 0 and 'dirty' not in stdout and 'dirty' not in stderr |
| |
| |
| class CleanPrebuiltsSDKStep(shell_step.ShellStep): |
| """Build step class for setting up a clean SDK build environment.""" |
| |
| def __init__(self, purge_dirs, **kwargs): |
| """Creates a CleanSDKStep instance.""" |
| shell_step.ShellStep.__init__( |
| self, |
| name='SDK: clean build output & prebuilts', |
| halt_on_failure=True, |
| num_retries=0, |
| **kwargs) |
| self._purge_dirs = purge_dirs |
| |
| def get_commands(self): |
| commands = [] |
| if self._purge_dirs: |
| commands += [self.ShellCommand(['rm', '-rf'] + self._purge_dirs)] |
| return commands |
| |
| |
| class DirtyCheckSDKStep(shell_step.ShellStep): |
| """Build step class for setting up a clean SDK build environment.""" |
| |
| def __init__(self, halt_on_failure=True, **kwargs): |
| """Creates a CleanSDKStep instance.""" |
| name = 'SDK: git rev dirty ' |
| name += 'check' if halt_on_failure else 'info' |
| shell_step.ShellStep.__init__( |
| self, |
| name=name, |
| halt_on_failure=halt_on_failure, |
| num_retries=0, |
| **kwargs) |
| self._repo_regex = ['-r', kwargs['repo_regex'] |
| ] if 'repo_regex' in kwargs else [] |
| |
| def get_commands(self): |
| return [ |
| self.ShellCommand( |
| _REPO_CMD + [ |
| 'forall', *self._repo_regex, '-p', '--verbose', '--command', |
| 'git rev-parse --verify --short HEAD' |
| ], |
| validator=_dirty_validator), |
| ] |
| |
| |
| class CleanCheckoutSDKStep(shell_step.ShellStep): |
| """Build step class for setting up a clean SDK build environment.""" |
| |
| def __init__(self, **kwargs): |
| """Creates a CleanSDKStep instance.""" |
| shell_step.ShellStep.__init__( |
| self, |
| name='SDK: reset & clean', |
| halt_on_failure=True, |
| num_retries=0, |
| **kwargs) |
| self._repo_regex = ['-r', kwargs['repo_regex'] |
| ] if 'repo_regex' in kwargs else [] |
| |
| def get_commands(self): |
| return [ |
| self.ShellCommand(_REPO_CMD + [ |
| 'forall', *self._repo_regex, '-p', '--verbose', '--command', |
| 'git reset --hard' |
| ]), |
| self.ShellCommand(_REPO_CMD + [ |
| 'forall', *self._repo_regex, '-p', '--verbose', '--command', |
| 'git clean -fdx' |
| ]), |
| ] |