# Copyright 2016 Lars Wirzenius # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # =*= License: GPL-3+ =*= import cliapp import icklib class RunShellCommandsOnEachTarget(icklib.BuildStep): def build(self): if self.run_state.build_using_shell: for target in self.targets: self._build_on_target(self.project, target, self.run_state) def _build_on_target(self, project, target, run_state): run_state.progress['target'] = target.name run_state.logger.important( 'Building {project_name} on {target_name}', project_name=project.name, target_name=target.name) with run_state.logger: remote_git_dir = target.mkdtemp() target.sync_to_target( run_state.clones[0].dirname, remote_git_dir, '.') try: for command in project.commands: project.run_argv_on_target( target, ['sh', '-euxc', command], command, remote_git_dir) except cliapp.AppException: target.remove_all([remote_git_dir]) raise target.remove_all([remote_git_dir]) run_state.progress['target'] = '' class RunLocalShellCommands(icklib.BuildStep): def build(self): if self.run_state.build_using_local_shell: self.build_locally(self.project, self.run_state) def build_locally(self, project, run_state): run_state.progress['target'] = 'local' run_state.logger.important( 'Building {project_name} locally', project_name=project.name) git_dir = run_state.clones[0].dirname with run_state.logger: for command in project.local_commands: project.run_locally( ['sh', '-euxc', command], command, git_dir) run_state.progress['target'] = ''