blob: 8070671fc9da50ffa386bb818e5ca43f3cf41474 [file] [log] [blame]
#!/bin/bash
# Copyright 2016 The Fuchsia Authors
#
# 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
#
# http://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.
# Mirror one git repo to another.
# Exit this script if one command fails.
set -e
# Print all commands for debug.
set -x
if [[ $# -ne 3 ]]; then
echo "Usage: $0 [source git host] [destination git host] [repo name]"
echo "Example: $0 https://fuchsia.googlesource.com https://github.com/fuchsia-mirror magenta"
exit 1
fi
SRC_HOST="$1"; DST_HOST="$2"; REPO_NAME="$3"
TEMP_DIR="$(mktemp -d fuchsia-gitsync.XXX)"
# Make sure we clean up our temp directory no matter what.
TEMP_DIR_ABS="$(cd $TEMP_DIR && pwd)"
trap "rm -rf \"${TEMP_DIR_ABS}\"" INT TERM EXIT
# Replace slashes in $REPO_NAME with dashes since GitHub won't allow slashes in repo names.
DST_REPO_NAME="${REPO_NAME//\//-}"
# Pull down the source host.
cd "${TEMP_DIR}"
git clone --mirror "${SRC_HOST}/${REPO_NAME}" "${DST_REPO_NAME}"
REMOTE_URL="${DST_HOST}/${DST_REPO_NAME}"
# Add a git remote to the destination host.
cd "${DST_REPO_NAME}"
cat >>config <<EOF
[remote "gitsync"]
url = ${REMOTE_URL}
EOF
# Check that the gitsync remote exists. If not attempt to create it.
curl -s -f >/dev/null $REMOTE_URL
if [ $? -ne 0 ] ; then
curl -f -i -n -X POST --data '{"name":"'$REPO_NAME'","has_issues":false,"team_id": 2058456}' https://api.github.com/orgs/fuchsia-mirror/repos
fi
# Push to the destination.
git push --mirror gitsync