#!/bin/sh # # Copyright 2020 the V8 project authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. source_dir=$(cd "$(dirname "$0")"; pwd -P) copybara_exe=copybara copybara_file="$source_dir/copy.bara.sky" init_history='' for arg in "$@"; do case $arg in --copybara-exe=*) copybara_exe="${arg#*=}" shift ;; --copybara-file=*) copybara_file="${arg#*=}" shift ;; --init-history) init_history='--init-history --force' shift ;; *) echo -e "Usage:$arg" echo -e " export_to_github.sh [--copybara-exe=]\n" \ " [--copybara-file=]" exit 1 esac done v8_origin="https://chromium.googlesource.com/v8/v8.git" v8_ref="master" NOCOLOR="\033[0m" RED="\033[0;31m" GREEN="\033[0;32m" BLUE="\033[0;34m" function fail { echo -e "${RED}${1}${NOCOLOR}" > /dev/stderr exit 1 } function success { echo -e "${BLUE}${1}${NOCOLOR}" > /dev/stderr exit 0 } function message { echo -e "${GREEN}${1}${NOCOLOR}" > /dev/stderr } function cleanup { if [ -d "$git_temp_dir" ]; then rm -rf $git_temp_dir fi } trap "exit 1" HUP INT PIPE QUIT TERM trap cleanup EXIT [ ! -x $copybara_exe ] && fail "$copybara_exe doesn't exist or was not found in PATH!" [ ! -f $copybara_file ] && fail "Input $copybara_file doesn't exist!" git_temp_dir=$(mktemp -d) if [[ ! "$git_temp_dir" || ! -d "$git_temp_dir" ]]; then fail "Failed to create temporary dir" fi if [[ $init_history ]]; then read -p "--init-history is only supposed to be used on the first export of \ cppgc. Is this what is really intended? (y/N)" answer if [ "$answer" != "y" ]; then exit 0 fi fi message "Running copybara..." $copybara_exe $init_history $copybara_file --dry-run --git-destination-path $git_temp_dir result=$? if [ "$result" -eq 4 ]; then success "Nothing needs to be done, exiting..." elif [ "$result" -ne 0 ]; then fail "Failed to run copybara" fi cd $git_temp_dir main_gn="BUILD.gn" test_gn="test/unittests/BUILD.gn" gen_cmake="tools/cppgc/gen_cmake.py" message "Checking out BUILD.gn files..." git remote add v8_origin "$v8_origin" git fetch --depth=1 v8_origin $v8_ref git checkout v8_origin/master -- "$main_gn" "$test_gn" "$gen_cmake" \ || fail "Failed to checkout BUILD.gn from V8 origin" message "Generating CMakeLists.txt..." cmakelists="$git_temp_dir/CMakeLists.txt" $gen_cmake --out=$cmakelists --main-gn=$main_gn --test-gn=$test_gn \ || fail "CMakeLists.txt generation has failed!" git rm -f $main_gn $test_gn $gen_cmake > /dev/null if git status -s | grep -q $(basename $cmakelists); then message "CMakeLists.txt needs to be changed" git add $cmakelists git commit --amend --no-edit > /dev/null else message "No changes in CMakeLists.txt need to be done" fi message "Pushing changes to GitHub..." git push copybara_remote master success "CppGC GitHub mirror was successfully updated"