@@ -17,6 +17,27 @@ log() {
1717 echo " -- $1 " 1>&2
1818}
1919
20+ # $1 = version
21+ is_file_dependency () {
22+ echo " $1 " | grep -Eq ' ^[a-f0-9]{64}$'
23+ }
24+
25+ # $1 = path
26+ checksum () {
27+ if command -v sha256sum > /dev/null
28+ then
29+ sha256sum " $1 " | cut -d ' ' -f 1
30+ elif command -v shasum > /dev/null
31+ then
32+ shasum --algorithm 256 " $1 " | cut -d ' ' -f 1
33+ elif command -v openssl > /dev/null
34+ then
35+ openssl dgst -sha256 " $1 " | awk ' { print $NF }'
36+ else
37+ fail " Cannot find sha256sum, shasum, or openssl to compute checksums"
38+ fi
39+ }
40+
2041# $1 = name
2142# $2 = url
2243# $3 = version
@@ -77,6 +98,32 @@ vendor() {
7798 mv " $4 /$1 " " $OUTPUT "
7899}
79100
101+ # $1 = name
102+ # $2 = url
103+ # $3 = checksum
104+ # $4 = tmp
105+ vendor_file () {
106+ # Downloading
107+ log " Downloading $2 into $4 /$1 "
108+ mkdir -p " $( dirname " $4 /$1 " ) "
109+ curl --fail --silent --show-error --location --output " $4 /$1 " " $2 "
110+
111+ # Verification
112+ ACTUAL_CHECKSUM=" $( checksum " $4 /$1 " ) "
113+ if [ " $ACTUAL_CHECKSUM " != " $3 " ]
114+ then
115+ fail " Checksum mismatch for $1 : expected $3 but got $ACTUAL_CHECKSUM "
116+ fi
117+
118+ OUTPUT=" $VENDOR /$1 "
119+
120+ # Swap
121+ log " Moving $4 /$1 to $OUTPUT "
122+ rm -rf " $OUTPUT "
123+ mkdir -p " $( dirname " $OUTPUT " ) "
124+ mv " $4 /$1 " " $OUTPUT "
125+ }
126+
80127if [ ! -f " $DEPENDENCIES " ]
81128then
82129 fail " File not found: $DEPENDENCIES "
@@ -106,14 +153,19 @@ then
106153 fail " Invalid dependency definition: $DEPENDENCY "
107154 fi
108155
109- TMP=" $( mktemp -d -t vendorpull-clone-XXXXX ) "
156+ TMP=" $( mktemp -d -t vendorpull-clone-XXXXXX ) "
110157 log " Setting up temporary directory at $TMP ..."
111158 clean () { rm -rf " $TMP " ; }
112159 trap clean EXIT
113160
114- vendor " $NAME " " $URL " " $VERSION " " $TMP "
161+ if is_file_dependency " $VERSION "
162+ then
163+ vendor_file " $NAME " " $URL " " $VERSION " " $TMP "
164+ else
165+ vendor " $NAME " " $URL " " $VERSION " " $TMP "
166+ fi
115167else
116- TMP=" $( mktemp -d -t vendorpull-clone-XXXXX ) "
168+ TMP=" $( mktemp -d -t vendorpull-clone-XXXXXX ) "
117169 log " Setting up temporary directory at $TMP ..."
118170 clean () { rm -rf " $TMP " ; }
119171 trap clean EXIT
@@ -128,6 +180,11 @@ else
128180 fail " Invalid dependency definition"
129181 fi
130182
131- vendor " $NAME " " $URL " " $VERSION " " $TMP "
183+ if is_file_dependency " $VERSION "
184+ then
185+ vendor_file " $NAME " " $URL " " $VERSION " " $TMP "
186+ else
187+ vendor " $NAME " " $URL " " $VERSION " " $TMP "
188+ fi
132189 done < " $DEPENDENCIES "
133190fi
0 commit comments