#!/usr/bin/env python # # Copyright (c) 2019-2020 Arm Limited. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the License); you may # not use this file except in compliance with the License. # You may obtain a copy of the License at # # www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an AS IS BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import os import subprocess def print_args(args, **kwargs): cwd = kwargs['cwd'] if isinstance(args, list): args = ' '.join(args) print('%s$ %s' % (cwd, args)) def check_call(args, **kwargs): print_args(args, **kwargs) return subprocess.check_call(args, **kwargs) def check_output(args, **kwargs): print_args(args, **kwargs) return subprocess.check_output(args, **kwargs) class Git(object): def __init__(self, path, fetchurl, pushurl=None, revision='origin/master'): self.path = path self.fetchurl = fetchurl self.pushurl = pushurl self.revision = revision def init(self): if not os.path.exists(self.path): os.makedirs(self.path) if not os.path.exists(os.path.join(self.path, '.git')): check_output(['git', 'init'], cwd=self.path) def remote_add(self, name, fetchurl): remotes = check_output(['git', 'remote'], cwd=self.path).decode('utf-8').split('\n') if not name in remotes: check_output(['git', 'remote', 'add', '-m', self.revision, name, self.fetchurl], cwd=self.path) if self.pushurl: check_output(['git', 'remote', 'set-url', '--add', '--push', name, self.pushurl], cwd=self.path) def fetch(self): check_output(['git', 'fetch'], cwd=self.path) def checkout(self, revision): rev = self.__get_rev(revision) check_output(['git', 'checkout', rev], stderr=subprocess.STDOUT, cwd=self.path) def clone(self): if not os.path.exists(os.path.join(self.path, '.git')): self.init() self.remote_add('origin', self.fetchurl) self.fetch() self.checkout(self.revision) def rebase(self): rev = self.__get_rev(self.revision) check_output(['git', 'rebase', rev], cwd=self.path) def __get_rev(self, revision): try: rev = check_output(['git', 'rev-parse', 'origin/' + self.revision], cwd=self.path) except: rev = check_output(['git', 'rev-parse', self.revision], cwd=self.path) return rev.decode('utf-8').strip() basedir = os.path.dirname(os.path.realpath(__file__)) externals = [ Git(os.path.join(basedir, 'core_software'), "https://review.mlplatform.org/ml/ethos-u/ethos-u-core-software", pushurl='ssh://review.mlplatform.org:29418/ml/ethos-u/ethos-u-core-software', revision='master'), Git(os.path.join(basedir, 'core_software/core_driver'), "https://review.mlplatform.org/ml/ethos-u/ethos-u-core-driver", pushurl='ssh://review.mlplatform.org:29418/ml/ethos-u/ethos-u-core-driver', revision='master'), Git(os.path.join(basedir, 'core_software/cmsis'), 'https://github.com/ARM-software/CMSIS_5.git', revision='master'), Git(os.path.join(basedir, 'core_software/tensorflow'), 'https://github.com/tensorflow/tensorflow', revision='master'), Git(os.path.join(basedir, 'vela'), "https://review.mlplatform.org/ml/ethos-u/ethos-u-vela", pushurl='ssh://review.mlplatform.org:29418/ml/ethos-u/ethos-u-vela', revision='master') ] for external in externals: external.clone() external.fetch() external.rebase()