summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--round-robin.sh128
1 files changed, 89 insertions, 39 deletions
diff --git a/round-robin.sh b/round-robin.sh
index 810714cb..a71bcf0c 100644
--- a/round-robin.sh
+++ b/round-robin.sh
@@ -137,6 +137,69 @@ reset_artifacts ()
cat <<EOF | manifest_out
rr[base-artifacts_rev]=$(git -C base-artifacts rev-parse HEAD)
EOF
+
+ local baseline_dir=${rr[top_artifacts]}/baseline
+ if [ -d base-artifacts/baseline/ ]; then
+ # Copy baseline git_url/git_rev settings into the current build,
+ # which will then be overwritten in due course by clone_repo()
+ # of various components.
+ # Note that we need to copy the whole directory to correctly handle
+ # builds that fail before all their components are checked out.
+ rsync -a base-artifacts/baseline/ $baseline_dir/
+ else
+ # E.g., we are in "init" mode of update_baseline.
+ mkdir $baseline_dir
+
+ # Transitional workaround
+ # Extract baseline from manifest of baseline build
+ (
+ local components c
+ components="${rr[components]}"
+ # Remove our current settings from ${rr[]}.
+ unset rr
+ # For a short time manifests used "debug" array, so we need
+ # to declare it when sourcing these manifests.
+ # shellcheck disable=SC2034
+ declare -A rr debug
+ if [ -f base-artifacts/manifest.sh ]; then
+ source base-artifacts/manifest.sh
+ elif [ -f base-artifacts/jenkins/manifest.sh ]; then
+ source base-artifacts/jenkins/manifest.sh
+ else
+ # We are in "init" baseline build, apparently.
+ # Do nothing and hope get_baseline() is not called.
+ exit 0
+ fi
+
+ for c in $components; do
+ if [ x"${rr[${c}_url]}" != x"" ]; then
+ echo "${rr[${c}_url]}"
+ else
+ print_baseline_repo "$project" true
+ fi > $baseline_dir/${c}_url
+
+ echo "${rr[${c}_rev]}" > $baseline_dir/${c}_rev
+ done
+ )
+ fi
+ )
+}
+
+get_baseline_git ()
+{
+ (
+ set -euf -o pipefail
+ assert_with_msg "ERROR: No $1 in baseline git" \
+ [ -f "base-artifacts/baseline/$1" ]
+ cat "base-artifacts/baseline/$1"
+ )
+}
+
+set_current_git ()
+{
+ (
+ set -euf -o pipefail
+ cat > "${rr[top_artifacts]}/baseline/$1"
)
}
@@ -151,63 +214,50 @@ clone_repo ()
if [ x"${rr[mode]}" = x"bisect" ]; then
# Cleanup current checkout in bisect mode.
git_clean "$project"
- return 0
- fi
-
- local url branch
-
- if [ x"${rr[${project}_git]}" != x"baseline" ]; then
- # Fetch and checkout from the specified repo.
- url="${rr[${project}_git]%#*}"
- branch="${rr[${project}_git]#*#}"
else
- # TODO: Remove transitional compatability code
- local base_manifest
- if [ -e base-artifacts/manifest.sh ]; then
- base_manifest=base-artifacts/manifest.sh
+ local url branch
+
+ if [ x"${rr[${project}_git]}" != x"baseline" ]; then
+ # Fetch and checkout from the specified repo.
+ url="${rr[${project}_git]%#*}"
+ branch="${rr[${project}_git]#*#}"
else
- base_manifest=base-artifacts/jenkins/manifest.sh
+ url=$(get_baseline_git ${project}_url)
+ branch=$(get_baseline_git ${project}_rev)
fi
- # For a short time manifests used "debug" array, so we need
- # to declare it when sourcing these manifests.
- # shellcheck disable=SC2034
- declare -A debug
- url=$(source $base_manifest; echo "${rr[${project}_url]-}")
- branch=$(source $base_manifest; echo "${rr[${project}_rev]-}")
+ # Allow manifest override for $url
+ url="${rr[${project}_url]-$url}"
+ clone_or_update_repo_no_checkout "$project" "$url" auto "" origin \
+ > /dev/null
- if [ x"$url" = x"" ]; then
- url=$(print_baseline_repo "$project" false)
- fi
+ # Store git url in the manifest.
+ cat <<EOF | manifest_out
+rr[${project}_url]=$url
+EOF
+ # Store baseline git_url data. This is then used by
+ # subsequent builds to fetch baseline commits.
+ echo "$url" | set_current_git ${project}_url
- assert_with_msg "ERROR: No rr[${project}_url] in baseline manifest" \
- [ x"$url" != x"" ]
- assert_with_msg "ERROR: No rr[${project}_rev] in baseline manifest" \
- [ x"$branch" != x"" ]
+ # Allow manifest override for $branch
+ branch="${rr[${project}_rev]-$branch}"
+ git_checkout "$project" "$branch" origin
fi
- # Allow manifest override for $url
- url="${rr[${project}_url-$url]-$url}"
- clone_or_update_repo_no_checkout "$project" "$url" auto "" origin \
- > /dev/null
-
- # Allow manifest override for $branch
- branch="${rr[${project}_rev]-$branch}"
- git_checkout "$project" "$branch" origin
-
local cur_rev
cur_rev=$(git -C $project rev-parse HEAD)
local debug_project_date
debug_project_date=$(git -C $project show --no-patch --pretty="%ct # %cr" HEAD)
- # Store git url and rev info in the manifest. This is then used by
- # subsequent builds to fetch baseline commits.
+ # Store git rev info in the manifest.
cat <<EOF | manifest_out
-rr[${project}_url]=$url
rr[${project}_rev]=$cur_rev
rr[debug_${project}_date]=$debug_project_date
EOF
+ # Store baseline git_rev data. This is then used by
+ # subsequent builds to fetch baseline commits.
+ echo "$cur_rev" | set_current_git ${project}_rev
)
}