@@ -17,6 +17,7 @@ ci_dir=$(cd $(dirname $0) && pwd)
17
17
. " $ci_dir /shared.sh"
18
18
19
19
travis_fold start init_repo
20
+ travis_time_start
20
21
21
22
REPO_DIR=" $1 "
22
23
CACHE_DIR=" $2 "
@@ -42,54 +43,39 @@ if grep -q RUST_RELEASE_CHANNEL=beta src/ci/run.sh; then
42
43
git fetch origin --unshallow beta master
43
44
fi
44
45
45
- travis_fold start update_cache
46
- travis_time_start
47
-
48
- # Update the cache (a pristine copy of the rust source master)
49
- retry sh -c " rm -rf $cache_src_dir && mkdir -p $cache_src_dir && \
50
- git clone --depth 1 https://github.com/rust-lang/rust.git $cache_src_dir "
51
- if [ -d $cache_src_dir /src/llvm ]; then
52
- (cd $cache_src_dir && git rm src/llvm)
53
- fi
54
- if [ -d $cache_src_dir /src/llvm-emscripten ]; then
55
- (cd $cache_src_dir && git rm src/llvm-emscripten)
56
- fi
57
- retry sh -c " cd $cache_src_dir && \
58
- git submodule deinit -f . && git submodule sync && git submodule update --init"
59
-
60
- travis_fold end update_cache
61
- travis_time_finish
46
+ function fetch_submodule {
47
+ local module=$1
48
+ local cached=" download-${module// \/ / -} .tar.gz"
49
+ retry sh -c " rm -f $cached && \
50
+ curl -sSL -o $cached $2 "
51
+ mkdir $module
52
+ touch " $module /.git"
53
+ tar -C $module --strip-components=1 -xf $cached
54
+ rm $cached
55
+ }
62
56
63
- travis_fold start update_submodules
64
- travis_time_start
65
-
66
- # Update the submodules of the repo we're in, using the pristine repo as
67
- # a cache for any object files
68
- # No, `git submodule foreach` won't work:
69
- # http://stackoverflow.com/questions/12641469/list-submodules-in-a-git-repository
57
+ included=" src/llvm src/llvm-emscripten src/doc/book src/doc/rust-by-example"
70
58
modules=" $( git config --file .gitmodules --get-regexp ' \.path$' | cut -d' ' -f2) "
71
- for module in $modules ; do
72
- if [ " $module " = src/llvm ] || [ " $module " = src/llvm-emscripten ]; then
59
+ modules=($modules )
60
+ use_git=" "
61
+ urls=" $( git config --file .gitmodules --get-regexp ' \.url$' | cut -d' ' -f2) "
62
+ urls=($urls )
63
+ for i in ${! modules[@]} ; do
64
+ module=${modules[$i]}
65
+ if [[ " $included " = * " $module " * ]]; then
73
66
commit=" $( git ls-tree HEAD $module | awk ' {print $3}' ) "
74
67
git rm $module
75
- retry sh -c " rm -f $commit .tar.gz && \
76
- curl -sSL -O https://github.com/rust-lang/llvm/archive/$commit .tar.gz"
77
- tar -C src/ -xf " $commit .tar.gz"
78
- rm " $commit .tar.gz"
79
- mv " src/llvm-$commit " $module
80
- continue
81
- fi
82
- if [ ! -e " $cache_src_dir /$module /.git" ]; then
83
- echo " WARNING: $module not found in pristine repo"
84
- retry sh -c " git submodule deinit -f $module && \
85
- git submodule update --init --recursive $module "
68
+ url=${urls[$i]}
69
+ url=${url/ \. git/ }
70
+ fetch_submodule $module " $url /archive/$commit .tar.gz" &
86
71
continue
72
+ else
73
+ use_git=" $use_git $module "
87
74
fi
88
- retry sh -c " git submodule deinit -f $module && \
89
- git submodule update --init --recursive --reference $cache_src_dir /$module $module "
90
75
done
91
-
92
- travis_fold end update_submodules
93
- travis_time_finish
94
-
76
+ retry sh -c " git submodule deinit -f $use_git && \
77
+ git submodule sync && \
78
+ git submodule update -j 16 --init --recursive $use_git "
79
+ wait
95
80
travis_fold end init_repo
81
+ travis_time_finish
0 commit comments