[utils] Use git to checkout code instead of svn in building docker image

Reviewed By: sammccall

Differential Revision: https://reviews.llvm.org/D123795
This commit is contained in:
Xiaodong Liu 2022-04-15 01:34:16 +00:00 committed by Ben Shi
parent ffdba713f5
commit 2d9b7fdaa3
4 changed files with 36 additions and 96 deletions

View File

@ -27,19 +27,16 @@ Available options:
-d|--docker-repository docker repository for the image
-t|--docker-tag docker tag for the image
Checkout arguments:
-b|--branch svn branch to checkout, i.e. 'trunk',
'branches/release_40'
(default: 'trunk')
-r|--revision svn revision to checkout
-b|--branch git branch to checkout, i.e. 'main',
'release/10.x'
(default: 'main')
-r|--revision git revision to checkout
-c|--cherrypick revision to cherry-pick. Can be specified multiple times.
Cherry-picks are performed in the sorted order using the
following command:
'svn patch <(svn diff -c \$rev)'.
-p|--llvm-project name of an svn project to checkout. Will also add the
project to a list LLVM_ENABLE_PROJECTS, passed to CMake.
For clang, please use 'clang', not 'cfe'.
Project 'llvm' is always included and ignored, if
specified.
'git cherry-pick \$rev'.
-p|--llvm-project Add the project to a list LLVM_ENABLE_PROJECTS, passed to
CMake.
Can be specified multiple times.
-c|--checksums name of a file, containing checksums of llvm checkout.
Script will fail if checksums of the checkout do not
@ -110,15 +107,7 @@ while [[ $# -gt 0 ]]; do
;;
-p|--llvm-project)
PROJ="$2"
if [ "$PROJ" == "cfe" ]; then
PROJ="clang"
fi
CHECKOUT_ARGS="$CHECKOUT_ARGS $1 $PROJ"
if [ "$PROJ" != "clang-tools-extra" ]; then
CMAKE_ENABLED_PROJECTS="$CMAKE_ENABLED_PROJECTS;$PROJ"
fi
CMAKE_ENABLED_PROJECTS="$CMAKE_ENABLED_PROJECTS;$PROJ"
shift 2
;;
-c|--checksums)

View File

@ -15,7 +15,7 @@ RUN grep deb /etc/apt/sources.list | \
# Install compiler, python and subversion.
RUN apt-get update && \
apt-get install -y --no-install-recommends ca-certificates gnupg \
build-essential cmake make python3 zlib1g wget subversion unzip && \
build-essential cmake make python3 zlib1g wget subversion unzip git && \
rm -rf /var/lib/apt/lists/*
# Install a newer ninja release. It seems the older version in the debian repos
# randomly crashes when compiling llvm.

View File

@ -11,7 +11,7 @@ LABEL maintainer "LLVM Developers"
# Install llvm build dependencies.
RUN apt-get update && \
apt-get install -y --no-install-recommends ca-certificates cmake python \
subversion ninja-build && \
subversion ninja-build git && \
rm -rf /var/lib/apt/lists/*
ADD checksums /tmp/checksums

View File

@ -13,48 +13,30 @@ function show_usage() {
cat << EOF
Usage: checkout.sh [options]
Checkout svn sources into /tmp/clang-build/src. Used inside a docker container.
Checkout git sources into /tmp/clang-build/src. Used inside a docker container.
Available options:
-h|--help show this help message
-b|--branch svn branch to checkout, i.e. 'trunk',
'branches/release_40'
(default: 'trunk')
-r|--revision svn revision to checkout
-b|--branch git branch to checkout, i.e. 'main',
'release/10.x'
(default: 'main')
-r|--revision git revision to checkout
-c|--cherrypick revision to cherry-pick. Can be specified multiple times.
Cherry-picks are performed in the sorted order using the
following command:
'svn patch <(svn diff -c \$rev)'.
-p|--llvm-project name of an svn project to checkout.
For clang, please use 'clang', not 'cfe'.
Project 'llvm' is always included and ignored, if
specified.
Can be specified multiple times.
'git cherry-pick \$rev)'.
EOF
}
LLVM_SVN_REV=""
LLVM_GIT_REV=""
CHERRYPICKS=""
LLVM_BRANCH=""
# We always checkout llvm
LLVM_PROJECTS="llvm"
function contains_project() {
local TARGET_PROJ="$1"
local PROJ
for PROJ in $LLVM_PROJECTS; do
if [ "$PROJ" == "$TARGET_PROJ" ]; then
return 0
fi
done
return 1
}
while [[ $# -gt 0 ]]; do
case "$1" in
-r|--revision)
shift
LLVM_SVN_REV="$1"
LLVM_GIT_REV="$1"
shift
;;
-c|--cherrypick)
@ -67,25 +49,6 @@ while [[ $# -gt 0 ]]; do
LLVM_BRANCH="$1"
shift
;;
-p|--llvm-project)
shift
PROJ="$1"
shift
if [ "$PROJ" == "cfe" ]; then
PROJ="clang"
fi
if ! contains_project "$PROJ" ; then
if [ "$PROJ" == "clang-tools-extra" ] && [ ! contains_project "clang" ]; then
echo "Project 'clang-tools-extra' specified before 'clang'. Adding 'clang' to a list of projects first."
LLVM_PROJECTS="$LLVM_PROJECTS clang"
fi
LLVM_PROJECTS="$LLVM_PROJECTS $PROJ"
else
echo "Project '$PROJ' is already enabled, ignoring extra occurrences."
fi
;;
-h|--help)
show_usage
exit 0
@ -97,15 +60,15 @@ while [[ $# -gt 0 ]]; do
done
if [ "$LLVM_BRANCH" == "" ]; then
LLVM_BRANCH="trunk"
LLVM_BRANCH="main"
fi
if [ "$LLVM_SVN_REV" != "" ]; then
SVN_REV_ARG="-r$LLVM_SVN_REV"
echo "Checking out svn revision r$LLVM_SVN_REV."
if [ "$LLVM_GIT_REV" != "" ]; then
GIT_REV_ARG="$LLVM_GIT_REV"
echo "Checking out git revision $LLVM_GIT_REV."
else
SVN_REV_ARG=""
echo "Checking out latest svn revision."
GIT_REV_ARG=""
echo "Checking out latest git revision."
fi
# Sort cherrypicks and remove duplicates.
@ -119,12 +82,8 @@ function apply_cherrypicks() {
# This function is always called on a sorted list of cherrypicks.
for CHERRY_REV in $CHERRYPICKS; do
echo "Cherry-picking r$CHERRY_REV into $CHECKOUT_DIR"
local PATCH_FILE="$(mktemp)"
svn diff -c $CHERRY_REV > "$PATCH_FILE"
svn patch "$PATCH_FILE"
rm "$PATCH_FILE"
echo "Cherry-picking $CHERRY_REV into $CHECKOUT_DIR"
git cherry-pick $CHERRY_REV
done
popd
@ -132,32 +91,24 @@ function apply_cherrypicks() {
CLANG_BUILD_DIR=/tmp/clang-build
# Get the sources from svn.
echo "Checking out sources from svn"
# Get the sources from git.
echo "Checking out sources from git"
mkdir -p "$CLANG_BUILD_DIR/src"
for LLVM_PROJECT in $LLVM_PROJECTS; do
if [ "$LLVM_PROJECT" == "clang" ]; then
SVN_PROJECT="cfe"
else
SVN_PROJECT="$LLVM_PROJECT"
fi
CHECKOUT_DIR="$CLANG_BUILD_DIR/src"
if [ "$SVN_PROJECT" != "clang-tools-extra" ]; then
CHECKOUT_DIR="$CLANG_BUILD_DIR/src/$LLVM_PROJECT"
else
CHECKOUT_DIR="$CLANG_BUILD_DIR/src/clang/tools/extra"
fi
echo "Checking out https://github.com/llvm/llvm-project.git to $CHECKOUT_DIR"
git clone -b $LLVM_BRANCH --single-branch \
"https://github.com/llvm/llvm-project.git" \
"$CHECKOUT_DIR"
echo "Checking out https://llvm.org/svn/llvm-project/$SVN_PROJECT to $CHECKOUT_DIR"
svn co -q $SVN_REV_ARG \
"https://llvm.org/svn/llvm-project/$SVN_PROJECT/$LLVM_BRANCH" \
"$CHECKOUT_DIR"
pushd $CHECKOUT_DIR
git checkout -q $GIT_REV_ARG
popd
# We apply cherrypicks to all repositories regardless of whether the revision
# changes this repository or not. For repositories not affected by the
# cherrypick, applying the cherrypick is a no-op.
apply_cherrypicks "$CHECKOUT_DIR"
done
CHECKSUMS_FILE="/tmp/checksums/checksums.txt"