summary refs log tree commit diff
path: root/jenkins/clone.sh
blob: ab30ac778237cef7f33c206fed2d94974f292e14 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#! /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"
)