]> git.lizzy.rs Git - rust.git/blob - src/ci/scripts/checkout-submodules.sh
Rollup merge of #106714 - Ezrashaw:remove-e0490, r=davidtwco
[rust.git] / src / ci / scripts / checkout-submodules.sh
1 #!/bin/bash
2 # Check out all our submodules, but more quickly than using git by using one of
3 # our custom scripts
4
5 set -o errexit
6 set -o pipefail
7 set -o nounset
8
9 if [ ! -d ".git" ]; then
10     echo "Error: This must run in the root of the repository"
11     exit 1
12 fi
13
14 ci_dir=$(cd $(dirname $0) && pwd)/..
15 . "$ci_dir/shared.sh"
16
17 # On the beta channel we'll be automatically calculating the prerelease version
18 # via the git history, so unshallow our shallow clone from CI.
19 if [ "$(releaseChannel)" = "beta" ]; then
20   git fetch origin --unshallow beta master
21 fi
22
23 function fetch_github_commit_archive {
24     local module=$1
25     local cached="download-${module//\//-}.tar.gz"
26     retry sh -c "rm -f $cached && \
27         curl -f -sSL -o $cached $2"
28     mkdir $module
29     touch "$module/.git"
30     # On Windows, the default behavior is to emulate symlinks by copying
31     # files. However, that ends up being order-dependent while extracting,
32     # which can cause a failure if the symlink comes first. This env var
33     # causes tar to use real symlinks instead, which are allowed to dangle.
34     export MSYS=winsymlinks:nativestrict
35     tar -C $module --strip-components=1 -xf $cached
36     rm $cached
37 }
38
39 #included="src/llvm-project src/doc/book src/doc/rust-by-example"
40 included=""
41 modules="$(git config --file .gitmodules --get-regexp '\.path$' | cut -d' ' -f2)"
42 modules=($modules)
43 use_git=""
44 urls="$(git config --file .gitmodules --get-regexp '\.url$' | cut -d' ' -f2)"
45 urls=($urls)
46 # shellcheck disable=SC2068
47 for i in ${!modules[@]}; do
48     module=${modules[$i]}
49     if [[ " $included " = *" $module "* ]]; then
50         commit="$(git ls-tree HEAD $module | awk '{print $3}')"
51         git rm $module
52         url=${urls[$i]}
53         url=${url/\.git/}
54         fetch_github_commit_archive $module "$url/archive/$commit.tar.gz" &
55         bg_pids[${i}]=$!
56         continue
57     else
58         use_git="$use_git $module"
59     fi
60 done
61 retry sh -c "git submodule deinit -f $use_git && \
62     git submodule sync && \
63     git submodule update -j 16 --init --recursive --depth 1 $use_git"
64 #STATUS=0
65 #for pid in ${bg_pids[*]}
66 #do
67 #    wait $pid || STATUS=1
68 #done
69 #exit ${STATUS}