1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #! /bin/bash
- # This clones a project from github into a named subdirectory
- # If the project has a branch with the same name as this branch
- # then it will checkout that branch after cloning.
- # Otherwise it will checkout "origin/develop."
- # The first argument is the name of the directory to checkout
- # the branch into.
- # The second argument is the URL of the remote repository to checkout.
- # Usually something like https://github.com/matrix-org/sytest.git
- set -eux
- NAME=$1
- PROJECT=$2
- BASE=".$NAME-base"
- # Update our mirror.
- if [ ! -d ".$NAME-base" ]; then
- # Create a local mirror of the source repository.
- # This saves us from having to download the entire repository
- # when this script is next run.
- git clone "$PROJECT" "$BASE" --mirror
- else
- # Fetch any updates from the source repository.
- (cd "$BASE"; git fetch -p)
- fi
- # Remove the existing repository so that we have a clean copy
- rm -rf "$NAME"
- # Cloning with --shared means that we will share portions of the
- # .git directory with our local mirror.
- git clone "$BASE" "$NAME" --shared
- # Jenkins may have supplied us with the name of the branch in the
- # environment. Otherwise we will have to guess based on the current
- # commit.
- : ${GIT_BRANCH:="origin/$(git rev-parse --abbrev-ref HEAD)"}
- cd "$NAME"
- # check out the relevant branch
- git checkout "${GIT_BRANCH}" || (
- echo >&2 "No ref ${GIT_BRANCH} found, falling back to develop"
- git checkout "origin/develop"
- )
|