mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-06 10:53:50 +08:00
Export and clean up net downloading script
Fixes https://github.com/official-stockfish/Stockfish/issues/5564 This patch extracts the net downloading script in Makefile into an external script file. Also the script is moderately rewritten for improved readability and speed. * Use wget preferentially over curl, as curl is known to have slight overhead. * Use command instead of hash to check if command exists. Reportedly, hash always returns zero in some POSIX shells even when the command fails. * Command existence checks (wget/curl, sha256sum) are performed only once at the beginning. * Each of common patterns is encapsulated in a function (get_nnue_filename, validate_network). * Print out error/warning messages to stderr. closes https://github.com/official-stockfish/Stockfish/pull/5563 No functional change Co-authored-by: Disservin <disservin.social@gmail.com>
This commit is contained in:
75
scripts/net.sh
Executable file
75
scripts/net.sh
Executable file
@@ -0,0 +1,75 @@
|
||||
#!/bin/sh
|
||||
|
||||
wget_or_curl=$( (command -v wget > /dev/null 2>&1 && echo "wget -q") || \
|
||||
(command -v curl > /dev/null 2>&1 && echo "curl -L -s -k"))
|
||||
|
||||
if [ -z "$wget_or_curl" ]; then
|
||||
>&2 printf "%s\n" "Neither wget or curl is installed." \
|
||||
"Install one of these tools to download NNUE files automatically."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sha256sum=$( (command -v shasum > /dev/null 2>&1 && echo "shasum -a 256") || \
|
||||
(command -v sha256sum > /dev/null 2>&1 && echo "sha256sum"))
|
||||
|
||||
if [ -z "$sha256sum" ]; then
|
||||
>&2 echo "sha256sum not found, NNUE files will be assumed valid."
|
||||
fi
|
||||
|
||||
get_nnue_filename() {
|
||||
grep "$1" evaluate.h | grep "#define" | sed "s/.*\(nn-[a-z0-9]\{12\}.nnue\).*/\1/"
|
||||
}
|
||||
|
||||
validate_network() {
|
||||
# If no sha256sum command is available, assume the file is always valid.
|
||||
if [ -n "$sha256sum" ] && [ -f "$1" ]; then
|
||||
if [ "$1" != "nn-$($sha256sum "$1" | cut -c 1-12).nnue" ]; then
|
||||
rm -f "$1"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
fetch_network() {
|
||||
_filename="$(get_nnue_filename "$1")"
|
||||
|
||||
if [ -z "$_filename" ]; then
|
||||
>&2 echo "NNUE file name not found for: $1"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -f "$_filename" ]; then
|
||||
if validate_network "$_filename"; then
|
||||
echo "Existing $_filename validated, skipping download"
|
||||
return
|
||||
else
|
||||
echo "Removing invalid NNUE file: $_filename"
|
||||
fi
|
||||
fi
|
||||
|
||||
for url in \
|
||||
"https://tests.stockfishchess.org/api/nn/$_filename" \
|
||||
"https://github.com/official-stockfish/networks/raw/master/$_filename"; do
|
||||
echo "Downloading from $url ..."
|
||||
if $wget_or_curl "$url"; then
|
||||
if validate_network "$_filename"; then
|
||||
echo "Successfully validated $_filename"
|
||||
else
|
||||
echo "Downloaded $_filename is invalid"
|
||||
continue
|
||||
fi
|
||||
else
|
||||
echo "Failed to download from $url"
|
||||
fi
|
||||
if [ -f "$_filename" ]; then
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
||||
# Download was not successful in the loop, return false.
|
||||
>&2 echo "Failed to download $_filename"
|
||||
return 1
|
||||
}
|
||||
|
||||
fetch_network EvalFileDefaultNameBig && \
|
||||
fetch_network EvalFileDefaultNameSmall
|
||||
Reference in New Issue
Block a user