This is a fast case if the slave has a local checkout available so that
it doesn't have to do a full clone. The check unfortunately didn't take
into account all cases and failed on the new slave.
(cherry picked from commit d867f3d470)
104 lines
2.9 KiB
Bash
Executable File
104 lines
2.9 KiB
Bash
Executable File
#!/bin/bash -x
|
|
|
|
# default repo
|
|
if [[ $# -lt 1 ]]; then
|
|
echo "No Yocto branch specified, defaulting to master"
|
|
echo "To change this pass a Yocto branch name as an argument to this script"
|
|
fi
|
|
branch=${1-master}
|
|
|
|
# the repos we want to check out, must setup variables below
|
|
# NOTE: poky must remain first
|
|
REPOS="poky metaoe"
|
|
|
|
POKY_URI="git://git.yoctoproject.org/poky.git"
|
|
POKY_PATH="poky"
|
|
POKY_REV="${POKY_REV-refs/remotes/origin/${branch}}"
|
|
|
|
METAOE_URI="git://git.openembedded.org/meta-openembedded.git"
|
|
METAOE_PATH="poky/meta-openembedded"
|
|
METAOE_REV="${METAOE_REV-refs/remotes/origin/${branch}}"
|
|
|
|
METARUST_URI="."
|
|
METARUST_PATH="poky/meta-rust"
|
|
|
|
die() {
|
|
echo "$*" >&2
|
|
exit 1
|
|
}
|
|
|
|
update_repo() {
|
|
uri=$1
|
|
path=$2
|
|
rev=$3
|
|
|
|
# check if we already have it checked out, if so we just want to update
|
|
if [[ -d ${path} ]]; then
|
|
pushd ${path} > /dev/null
|
|
echo "Updating '${path}'"
|
|
git remote set-url origin "${uri}"
|
|
git fetch origin || die "unable to fetch ${uri}"
|
|
else
|
|
echo "Cloning '${path}'"
|
|
if [ -d "${GIT_LOCAL_REF_DIR}" ]; then
|
|
git clone --reference ${GIT_LOCAL_REF_DIR}/`basename ${path}` \
|
|
${uri} ${path} || die "unable to clone ${uri}"
|
|
else
|
|
git clone ${uri} ${path} || die "unable to clone ${uri}"
|
|
fi
|
|
pushd ${path} > /dev/null
|
|
fi
|
|
|
|
# The reset steps are taken from Jenkins
|
|
|
|
# Reset
|
|
# * drop -d from clean to not nuke build/tmp
|
|
# * add -e to not clear out bitbake bits
|
|
git reset --hard || die "failed reset"
|
|
git clean -fx -e bitbake -e meta/lib/oe || die "failed clean"
|
|
|
|
# Call the branch what we're basing it on, otherwise use default
|
|
# if the revision was not a branch.
|
|
branch=$(basename ${rev})
|
|
[[ "${branch}" == "${rev}" ]] && branch="default"
|
|
|
|
# Create 'default' branch
|
|
git update-ref refs/heads/${branch} ${rev} || \
|
|
die "unable to get ${rev} of ${uri}"
|
|
git config branch.${branch}.remote origin || die "failed config remote"
|
|
git config branch.${branch}.merge ${rev} || die "failed config merge"
|
|
git symbolic-ref HEAD refs/heads/${branch} || die "failed symbolic-ref"
|
|
git reset --hard || die "failed reset"
|
|
popd > /dev/null
|
|
echo "Updated '${path}' to '${rev}'"
|
|
}
|
|
|
|
# For each repo, do the work
|
|
for repo in ${REPOS}; do
|
|
# upper case the name
|
|
repo=$(echo ${repo} | tr '[:lower:]' '[:upper:]')
|
|
|
|
# expand variables
|
|
expand_uri="${repo}_URI"
|
|
expand_path="${repo}_PATH"
|
|
expand_rev="${repo}_REV"
|
|
repo_uri=${!expand_uri}
|
|
repo_path=${!expand_path}
|
|
repo_rev=${!expand_rev}
|
|
|
|
# check that we've got data
|
|
[[ -z ${repo_uri} ]] && die "No revision defined in ${expand_uri}"
|
|
[[ -z ${repo_path} ]] && die "No revision defined in ${expand_path}"
|
|
[[ -z ${repo_rev} ]] && die "No revision defined in ${expand_rev}"
|
|
|
|
# now fetch/clone/update repo
|
|
update_repo "${repo_uri}" "${repo_path}" "${repo_rev}"
|
|
|
|
done
|
|
|
|
rm -rf "${METARUST_PATH}" || die "unable to clear old ${METARUST_PATH}"
|
|
ln -sf "../${METARUST_URI}" "${METARUST_PATH}" || \
|
|
die "unable to symlink ${METARUST_PATH}"
|
|
|
|
exit 0
|