mirror of
https://github.com/MiSTer-devel/Updater_script_MiSTer.git
synced 2026-05-24 03:04:39 +00:00
Version 3.6 - MRA (MAME Arcade ROMs) support.
Added MAME_ARCADE_ROMS option; when "true" the updater downloads/updates MRA files (MAME Arcade ROMs) for Arcade cores; when using MAME_ARCADE_ROMS="true", please do not add "/cores" to CORE_CATEGORY_PATHS["arcade-cores"]; added MAME_ALT_ROMS option; when "true" the updater downloads/updates alternative MRA files (alternative MAME Arcade ROMs) for Arcade cores.
This commit is contained in:
@@ -13,13 +13,14 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Copyright 2018-2019 Alessandro "Locutus73" Miele
|
||||
# Copyright 2018-2020 Alessandro "Locutus73" Miele
|
||||
|
||||
# You can download the latest version of this script from:
|
||||
# https://github.com/MiSTer-devel/Updater_script_MiSTer
|
||||
|
||||
|
||||
|
||||
# Version 3.6 - 2020-01-06 - Added MAME_ARCADE_ROMS option; when "true" the updater downloads/updates MRA files (MAME Arcade ROMs) for Arcade cores; when using MAME_ARCADE_ROMS="true", please do not add "/cores" to CORE_CATEGORY_PATHS["arcade-cores"]; added MAME_ALT_ROMS option; when "true" the updater downloads/updates alternative MRA files (alternative MAME Arcade ROMs) for Arcade cores.
|
||||
# Version 3.5.3 - 2019-12-29 - Optimisation in GAMES_SUBDIR detection.
|
||||
# Version 3.5.2 - 2019-12-22 - Speed optimisations; optimisations for the new Wiky layout; when GAMES_SUBDIR="" now the updater checks if /media/fat/games subdir exists and actually contains any file.
|
||||
# Version 3.5.1 - 2019-12-21 - Code clean up by frederic-mahe (thank you very much).
|
||||
@@ -132,6 +133,13 @@ GOOD_CORES_URL=""
|
||||
#the first time the core is downloaded.
|
||||
CREATE_CORES_DIRECTORIES="true"
|
||||
|
||||
#Specifies if the updater has to download/update MRA files (MAME Arcade ROMs) for Arcade cores;
|
||||
#when using MAME_ARCADE_ROMS="true", please do not add "/cores" to CORE_CATEGORY_PATHS["arcade-cores"].
|
||||
MAME_ARCADE_ROMS="false"
|
||||
|
||||
#Specifies if the updater has to download/update alternative MRA files (alternative MAME Arcade ROMs) for Arcade cores;
|
||||
MAME_ALT_ROMS="false"
|
||||
|
||||
#Specifies the Games/Programs subdirectory where core specific directories will be placed.
|
||||
#GAMES_SUBDIR="" for letting the script choose between /media/fat and /media/fat/games when it exists,
|
||||
#otherwise the subdir you prefer (i.e. GAMES_SUBDIR="/Programs").
|
||||
@@ -165,6 +173,7 @@ ADDITIONAL_REPOSITORIES=(
|
||||
"https://github.com/MiSTer-devel/Scripts_MiSTer/tree/master/other_authors|sh inc|$BASE_PATH/$SCRIPTS_PATH"
|
||||
)
|
||||
FILTERS_URL="https://github.com/MiSTer-devel/Filters_MiSTer"
|
||||
MRA_ALT_URL="https://github.com/MiSTer-devel/MRA-Alternatives_MiSTer"
|
||||
CHEATS_URL="https://gamehacking.org/mister/"
|
||||
CHEAT_MAPPINGS="fds:NES gb:GameBoy gbc:GameBoy gen:Genesis gg:SMS nes:NES pce:TGFX16 sms:SMS snes:SNES"
|
||||
UNRAR_DEBS_URL="http://http.us.debian.org/debian/pool/non-free/u/unrar-nonfree"
|
||||
@@ -258,7 +267,22 @@ fi
|
||||
|
||||
|
||||
mkdir -p "${CORE_CATEGORY_PATHS[@]}"
|
||||
|
||||
if [ "${MAME_ARCADE_ROMS}" == "true" ]
|
||||
then
|
||||
mkdir -p "${CORE_CATEGORY_PATHS["arcade-cores"]}/cores" "${CORE_CATEGORY_PATHS["arcade-cores"]}/mame" "${CORE_CATEGORY_PATHS["arcade-cores"]}/hbmame"
|
||||
mv "${CORE_CATEGORY_PATHS["arcade-cores"]}/mra_backup/"*.mra "${CORE_CATEGORY_PATHS["arcade-cores"]}/" > /dev/null 2>&1
|
||||
else
|
||||
mv "${CORE_CATEGORY_PATHS["arcade-cores"]}/cores/"*.rbf "${CORE_CATEGORY_PATHS["arcade-cores"]}/" > /dev/null 2>&1
|
||||
mkdir -p "${CORE_CATEGORY_PATHS["arcade-cores"]}/mra_backup"
|
||||
mv "${CORE_CATEGORY_PATHS["arcade-cores"]}/"*.mra "${CORE_CATEGORY_PATHS["arcade-cores"]}/mra_backup/" > /dev/null 2>&1
|
||||
fi
|
||||
if [ "${MAME_ALT_ROMS}" == "true" ]
|
||||
then
|
||||
mv "${CORE_CATEGORY_PATHS["arcade-cores"]}/mra_backup/_alternatives/" "${CORE_CATEGORY_PATHS["arcade-cores"]}/_alternatives/" > /dev/null 2>&1
|
||||
else
|
||||
mkdir -p "${CORE_CATEGORY_PATHS["arcade-cores"]}/mra_backup"
|
||||
mv "${CORE_CATEGORY_PATHS["arcade-cores"]}/_alternatives/" "${CORE_CATEGORY_PATHS["arcade-cores"]}/mra_backup/_alternatives/" > /dev/null 2>&1
|
||||
fi
|
||||
declare -A NEW_CORE_CATEGORY_PATHS
|
||||
if [ "$DOWNLOAD_NEW_CORES" != "true" ] && [ "$DOWNLOAD_NEW_CORES" != "false" ] && [ "$DOWNLOAD_NEW_CORES" != "" ]
|
||||
then
|
||||
@@ -266,6 +290,15 @@ then
|
||||
NEW_CORE_CATEGORY_PATHS[$idx]=$(echo ${CORE_CATEGORY_PATHS[$idx]} | sed "s/$(echo $BASE_PATH | sed 's/\//\\\//g')/$(echo $BASE_PATH | sed 's/\//\\\//g')\/$DOWNLOAD_NEW_CORES/g")
|
||||
done
|
||||
mkdir -p "${NEW_CORE_CATEGORY_PATHS[@]}"
|
||||
if [ "${MAME_ARCADE_ROMS}" == "true" ]
|
||||
then
|
||||
mkdir -p "${NEW_CORE_CATEGORY_PATHS["arcade-cores"]}/cores"
|
||||
mv "${NEW_CORE_CATEGORY_PATHS["arcade-cores"]}/mra_backup/"*.mra "${NEW_CORE_CATEGORY_PATHS["arcade-cores"]}/" > /dev/null 2>&1
|
||||
else
|
||||
mv "${NEW_CORE_CATEGORY_PATHS["arcade-cores"]}/cores/"*.rbf "${NEW_CORE_CATEGORY_PATHS["arcade-cores"]}/" > /dev/null 2>&1
|
||||
mkdir -p "${NEW_CORE_CATEGORY_PATHS["arcade-cores"]}/mra_backup"
|
||||
mv "${NEW_CORE_CATEGORY_PATHS["arcade-cores"]}/"*.mra "${NEW_CORE_CATEGORY_PATHS["arcade-cores"]}/mra_backup/" > /dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
|
||||
[ "${UPDATE_LINUX}" == "true" ] && SD_INSTALLER_URL="https://github.com/MiSTer-devel/SD-Installer-Win64_MiSTer"
|
||||
@@ -310,7 +343,15 @@ function checkCoreURL {
|
||||
RELEASES_URL="${CORE_URL}/file-list/master/releases"
|
||||
;;
|
||||
esac
|
||||
RELEASE_URLS=$(curl $CURL_RETRY $SSL_SECURITY_OPTION -sLf "$RELEASES_URL" | grep -o '/MiSTer-devel/[a-zA-Z0-9./_-]*_[0-9]\{8\}[a-zA-Z]\?\(\.rbf\|\.rar\|\.zip\)\?')
|
||||
RELEASES_HTML=""
|
||||
RELEASES_HTML=$(curl ${CURL_RETRY} ${SSL_SECURITY_OPTION} -sLf "${RELEASES_URL}")
|
||||
RELEASE_URLS=$(echo ${RELEASES_HTML} | grep -oE '/MiSTer-devel/[a-zA-Z0-9./_-]*_[0-9]{8}[a-zA-Z]?(\.rbf|\.rar|\.zip)?')
|
||||
|
||||
CORE_HAS_MRA="false"
|
||||
if [ "${CORE_CATEGORY}" == "arcade-cores" ] && [ "${MAME_ARCADE_ROMS}" == "true" ] && { echo "${RELEASES_HTML}" | grep -qE '/MiSTer-devel/[a-zA-Z0-9./_%&#;!()-]*\.mra'; }
|
||||
then
|
||||
CORE_HAS_MRA="true"
|
||||
fi
|
||||
|
||||
MAX_VERSION=""
|
||||
MAX_RELEASE_URL=""
|
||||
@@ -365,7 +406,8 @@ function checkCoreURL {
|
||||
then
|
||||
CURRENT_DIRS=("$BASE_PATH")
|
||||
fi
|
||||
if [ "$BASE_FILE_NAME" == "MiSTer" ] || [ "$BASE_FILE_NAME" == "menu" ] || { echo "$CORE_URL" | grep -qE "SD-Installer|Filters_MiSTer"; }
|
||||
#if [ "$BASE_FILE_NAME" == "MiSTer" ] || [ "$BASE_FILE_NAME" == "menu" ] || { echo "$CORE_URL" | grep -qE "SD-Installer|Filters_MiSTer"; }
|
||||
if [ "$BASE_FILE_NAME" == "MiSTer" ] || [ "$BASE_FILE_NAME" == "menu" ] || [[ "${CORE_URL}" =~ SD-Installer|Filters_MiSTer|MRA-Alternatives_MiSTer ]]
|
||||
then
|
||||
mkdir -p "$WORK_PATH"
|
||||
CURRENT_DIRS=("$WORK_PATH")
|
||||
@@ -375,6 +417,34 @@ function checkCoreURL {
|
||||
MAX_LOCAL_VERSION=""
|
||||
for CURRENT_DIR in "${CURRENT_DIRS[@]}"
|
||||
do
|
||||
if [ "${CORE_CATEGORY}" == "arcade-cores" ] && [ "${MAME_ARCADE_ROMS}" == "true" ] && [ "${CORE_HAS_MRA}" == "false" ]
|
||||
then
|
||||
case "${BASE_FILE_NAME}" in
|
||||
"CrushRoller")
|
||||
[ -f "${CURRENT_DIR}/Crush Roller.mra" ] && { CORE_HAS_MRA="true"; }
|
||||
;;
|
||||
"MrTNT")
|
||||
[ -f "${CURRENT_DIR}/mr. tnt.mra" ] && { CORE_HAS_MRA="true"; }
|
||||
;;
|
||||
"MsPacman")
|
||||
[ -f "${CURRENT_DIR}/Ms. Pacman.mra" ] && { CORE_HAS_MRA="true"; }
|
||||
;;
|
||||
"PacmanClub")
|
||||
[ -f "${CURRENT_DIR}/Pacman Club.mra" ] && { CORE_HAS_MRA="true"; }
|
||||
;;
|
||||
"PacmanPlus")
|
||||
[ -f "${CURRENT_DIR}/Pacman Plus.mra" ] && { CORE_HAS_MRA="true"; }
|
||||
;;
|
||||
*)
|
||||
[ -f "${CURRENT_DIR}/${BASE_FILE_NAME}.mra" ] && { CORE_HAS_MRA="true"; }
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ "${CORE_HAS_MRA}" == "true" ]
|
||||
then
|
||||
mv "${CURRENT_DIR}/${BASE_FILE_NAME}"_*.rbf "${CURRENT_DIR}/cores/" > /dev/null 2>&1
|
||||
CURRENT_DIR="${CURRENT_DIR}/cores"
|
||||
fi
|
||||
for CURRENT_FILE in "$CURRENT_DIR/$BASE_FILE_NAME"*
|
||||
do
|
||||
if [ -f "$CURRENT_FILE" ]
|
||||
@@ -435,7 +505,8 @@ function checkCoreURL {
|
||||
|
||||
if [[ "$MAX_VERSION" > "$MAX_LOCAL_VERSION" ]]
|
||||
then
|
||||
if [ "$DOWNLOAD_NEW_CORES" != "false" ] || [ "$MAX_LOCAL_VERSION" != "" ] || [ "$BASE_FILE_NAME" == "MiSTer" ] || [ "$BASE_FILE_NAME" == "menu" ] || { echo "$CORE_URL" | grep -qE "SD-Installer|Filters_MiSTer"; }
|
||||
#if [ "$DOWNLOAD_NEW_CORES" != "false" ] || [ "$MAX_LOCAL_VERSION" != "" ] || [ "$BASE_FILE_NAME" == "MiSTer" ] || [ "$BASE_FILE_NAME" == "menu" ] || { echo "$CORE_URL" | grep -qE "SD-Installer|Filters_MiSTer"; }
|
||||
if [ "$DOWNLOAD_NEW_CORES" != "false" ] || [ "$MAX_LOCAL_VERSION" != "" ] || [ "$BASE_FILE_NAME" == "MiSTer" ] || [ "$BASE_FILE_NAME" == "menu" ] || [[ "${CORE_URL}" =~ SD-Installer|Filters_MiSTer|MRA-Alternatives_MiSTer ]]
|
||||
then
|
||||
echo "Downloading $FILE_NAME"
|
||||
[ "${SSH_CLIENT}" != "" ] && echo "URL: https://github.com$MAX_RELEASE_URL?raw=true"
|
||||
@@ -455,14 +526,21 @@ function checkCoreURL {
|
||||
echo "$(md5sum "/media/fat/${DESTINATION_FILE}" | grep -o "^[^ ]*")" > "${CURRENT_DIR}/${FILE_NAME}"
|
||||
REBOOT_NEEDED="true"
|
||||
fi
|
||||
if echo "$CORE_URL" | grep -q "SD-Installer"
|
||||
#if echo "$CORE_URL" | grep -q "SD-Installer"
|
||||
if [[ "${CORE_URL}" =~ SD-Installer ]]
|
||||
then
|
||||
SD_INSTALLER_PATH="$CURRENT_DIR/$FILE_NAME"
|
||||
fi
|
||||
if echo "$CORE_URL" | grep -q "Filters_MiSTer"
|
||||
#if echo "$CORE_URL" | grep -q "Filters_MiSTer"
|
||||
if [[ "${CORE_URL}" =~ Filters_MiSTer|MRA-Alternatives_MiSTer ]]
|
||||
then
|
||||
echo "Extracting ${FILE_NAME}"
|
||||
unzip -o "${WORK_PATH}/${FILE_NAME}" -d "${BASE_PATH}" 1>&2
|
||||
if [[ "${CORE_URL}" =~ MRA-Alternatives_MiSTer ]]
|
||||
then
|
||||
unzip -o "${WORK_PATH}/${FILE_NAME}" -d "${CORE_CATEGORY_PATHS["arcade-cores"]}" 1>&2
|
||||
else
|
||||
unzip -o "${WORK_PATH}/${FILE_NAME}" -d "${BASE_PATH}" 1>&2
|
||||
fi
|
||||
rm "${WORK_PATH}/${FILE_NAME}" > /dev/null 2>&1
|
||||
touch "${WORK_PATH}/${FILE_NAME}" > /dev/null 2>&1
|
||||
fi
|
||||
@@ -541,6 +619,86 @@ function checkCoreURL {
|
||||
echo "Nothing to update"
|
||||
fi
|
||||
|
||||
if [ "${CORE_HAS_MRA}" == "true" ] && [ "${RELEASES_HTML}" != "" ]
|
||||
then
|
||||
ADDITIONAL_REPOSITORY="MRA files|mra|${CURRENT_DIR%%\/cores}"
|
||||
checkAdditionalRepository
|
||||
ADDITIONAL_REPOSITORY=""
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
RELEASES_HTML=""
|
||||
}
|
||||
|
||||
function checkAdditionalRepository {
|
||||
OLD_IFS="$IFS"
|
||||
IFS="|"
|
||||
PARAMS=($ADDITIONAL_REPOSITORY)
|
||||
ADDITIONAL_FILES_URL="${PARAMS[0]}"
|
||||
ADDITIONAL_FILES_EXTENSIONS="\($(echo ${PARAMS[1]} | sed 's/ \{1,\}/\\|/g')\)"
|
||||
CURRENT_DIR="${PARAMS[2]}"
|
||||
IFS="$OLD_IFS"
|
||||
if [ ! -d "$CURRENT_DIR" ]
|
||||
then
|
||||
mkdir -p "$CURRENT_DIR"
|
||||
fi
|
||||
echo "Checking $(echo $ADDITIONAL_FILES_URL | sed 's/.*\///g' | awk '{ print toupper( substr( $0, 1, 1 ) ) substr( $0, 2 ); }')"
|
||||
[ "${SSH_CLIENT}" != "" ] && [[ $ADDITIONAL_FILES_URL == http* ]] && echo "URL: $ADDITIONAL_FILES_URL"
|
||||
if echo "$ADDITIONAL_FILES_URL" | grep -q "\/tree\/master\/"
|
||||
then
|
||||
ADDITIONAL_FILES_URL=$(echo "$ADDITIONAL_FILES_URL" | sed 's/\/tree\/master\//\/file-list\/master\//g')
|
||||
else
|
||||
ADDITIONAL_FILES_URL="$ADDITIONAL_FILES_URL/file-list/master"
|
||||
fi
|
||||
if [ "${RELEASES_HTML}" == "" ]
|
||||
then
|
||||
CONTENT_TDS=$(curl $CURL_RETRY $SSL_SECURITY_OPTION -sLf "$ADDITIONAL_FILES_URL")
|
||||
else
|
||||
CONTENT_TDS="${RELEASES_HTML}"
|
||||
fi
|
||||
ADDITIONAL_FILE_DATETIMES=$(echo "$CONTENT_TDS" | awk '/class="age">/,/<\/td>/' | tr -d '\n' | sed 's/ \{1,\}/+/g' | sed 's/<\/td>/\n/g')
|
||||
ADDITIONAL_FILE_DATETIMES=( $ADDITIONAL_FILE_DATETIMES )
|
||||
for DATETIME_INDEX in "${!ADDITIONAL_FILE_DATETIMES[@]}"; do
|
||||
ADDITIONAL_FILE_DATETIMES[$DATETIME_INDEX]=$(echo "${ADDITIONAL_FILE_DATETIMES[$DATETIME_INDEX]}" | grep -o "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}Z" )
|
||||
if [ "${ADDITIONAL_FILE_DATETIMES[$DATETIME_INDEX]}" == "" ]
|
||||
then
|
||||
ADDITIONAL_FILE_DATETIMES[$DATETIME_INDEX]="${ADDITIONAL_FILE_DATETIMES[$((DATETIME_INDEX-1))]}"
|
||||
fi
|
||||
done
|
||||
CONTENT_TDS=$(echo "$CONTENT_TDS" | awk '/class="content">/,/<\/td>/' | tr -d '\n' | sed 's/ \{1,\}/+/g' | sed 's/<\/td>/\n/g')
|
||||
CONTENT_TD_INDEX=0
|
||||
for CONTENT_TD in $CONTENT_TDS; do
|
||||
ADDITIONAL_FILE_URL=$(echo "$CONTENT_TD" | grep -o "href=\(\"\|\'\)[a-zA-Z0-9%&#;!()./_-]*\.$ADDITIONAL_FILES_EXTENSIONS\(\"\|\'\)" | sed "s/href=//g" | sed "s/\(\"\|\'\)//g")
|
||||
if [ "$ADDITIONAL_FILE_URL" != "" ]
|
||||
then
|
||||
ADDITIONAL_FILE_NAME=$(echo "$ADDITIONAL_FILE_URL" | sed 's/.*\///g' | sed 's/%20/ /g; s/'/'\''/g')
|
||||
ADDITIONAL_ONLINE_FILE_DATETIME=${ADDITIONAL_FILE_DATETIMES[$CONTENT_TD_INDEX]}
|
||||
if [ -f "$CURRENT_DIR/$ADDITIONAL_FILE_NAME" ]
|
||||
then
|
||||
ADDITIONAL_LOCAL_FILE_DATETIME=$(date -d "$(stat -c %y "$CURRENT_DIR/$ADDITIONAL_FILE_NAME" 2>/dev/null)" -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
else
|
||||
ADDITIONAL_LOCAL_FILE_DATETIME=""
|
||||
fi
|
||||
if [ "$ADDITIONAL_LOCAL_FILE_DATETIME" == "" ] || [[ "$ADDITIONAL_ONLINE_FILE_DATETIME" > "$ADDITIONAL_LOCAL_FILE_DATETIME" ]]
|
||||
then
|
||||
echo "Downloading $ADDITIONAL_FILE_NAME"
|
||||
[ "${SSH_CLIENT}" != "" ] && echo "URL: https://github.com$ADDITIONAL_FILE_URL?raw=true"
|
||||
mv "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}" "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}.${TO_BE_DELETED_EXTENSION}" > /dev/null 2>&1
|
||||
if curl $CURL_RETRY $SSL_SECURITY_OPTION -L "https://github.com$ADDITIONAL_FILE_URL?raw=true" -o "$CURRENT_DIR/$ADDITIONAL_FILE_NAME"
|
||||
then
|
||||
rm "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}.${TO_BE_DELETED_EXTENSION}" > /dev/null 2>&1
|
||||
else
|
||||
echo "${ADDITIONAL_FILE_NAME} download failed"
|
||||
echo "Restoring old ${ADDITIONAL_FILE_NAME} file"
|
||||
rm "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}" > /dev/null 2>&1
|
||||
mv "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}.${TO_BE_DELETED_EXTENSION}" "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}" > /dev/null 2>&1
|
||||
fi
|
||||
sync
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
CONTENT_TD_INDEX=$((CONTENT_TD_INDEX+1))
|
||||
done
|
||||
echo ""
|
||||
}
|
||||
|
||||
@@ -574,6 +732,13 @@ for CORE_URL in $CORE_URLS; do
|
||||
done
|
||||
wait
|
||||
|
||||
if [ "${MAME_ALT_ROMS}" == "true" ]
|
||||
then
|
||||
CORE_CATEGORY="-"
|
||||
CORE_URL="${MRA_ALT_URL}"
|
||||
checkCoreURL
|
||||
fi
|
||||
|
||||
if [ "$FILTERS_URL" != "" ]
|
||||
then
|
||||
if [ -d "$BASE_PATH/Filters" ] && dir $BASE_PATH/Filters/* > /dev/null 2>&1 && ! dir $BASE_PATH/Filters/*/ > /dev/null 2>&1 && [ ! -d "$BASE_PATH/Filters_backup" ]
|
||||
@@ -588,73 +753,6 @@ then
|
||||
checkCoreURL
|
||||
fi
|
||||
|
||||
function checkAdditionalRepository {
|
||||
OLD_IFS="$IFS"
|
||||
IFS="|"
|
||||
PARAMS=($ADDITIONAL_REPOSITORY)
|
||||
ADDITIONAL_FILES_URL="${PARAMS[0]}"
|
||||
ADDITIONAL_FILES_EXTENSIONS="\($(echo ${PARAMS[1]} | sed 's/ \{1,\}/\\|/g')\)"
|
||||
CURRENT_DIR="${PARAMS[2]}"
|
||||
IFS="$OLD_IFS"
|
||||
if [ ! -d "$CURRENT_DIR" ]
|
||||
then
|
||||
mkdir -p "$CURRENT_DIR"
|
||||
fi
|
||||
echo "Checking $(echo $ADDITIONAL_FILES_URL | sed 's/.*\///g' | awk '{ print toupper( substr( $0, 1, 1 ) ) substr( $0, 2 ); }')"
|
||||
[ "${SSH_CLIENT}" != "" ] && echo "URL: $ADDITIONAL_FILES_URL"
|
||||
if echo "$ADDITIONAL_FILES_URL" | grep -q "\/tree\/master\/"
|
||||
then
|
||||
ADDITIONAL_FILES_URL=$(echo "$ADDITIONAL_FILES_URL" | sed 's/\/tree\/master\//\/file-list\/master\//g')
|
||||
else
|
||||
ADDITIONAL_FILES_URL="$ADDITIONAL_FILES_URL/file-list/master"
|
||||
fi
|
||||
CONTENT_TDS=$(curl $CURL_RETRY $SSL_SECURITY_OPTION -sLf "$ADDITIONAL_FILES_URL")
|
||||
ADDITIONAL_FILE_DATETIMES=$(echo "$CONTENT_TDS" | awk '/class="age">/,/<\/td>/' | tr -d '\n' | sed 's/ \{1,\}/+/g' | sed 's/<\/td>/\n/g')
|
||||
ADDITIONAL_FILE_DATETIMES=( $ADDITIONAL_FILE_DATETIMES )
|
||||
for DATETIME_INDEX in "${!ADDITIONAL_FILE_DATETIMES[@]}"; do
|
||||
ADDITIONAL_FILE_DATETIMES[$DATETIME_INDEX]=$(echo "${ADDITIONAL_FILE_DATETIMES[$DATETIME_INDEX]}" | grep -o "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}Z" )
|
||||
if [ "${ADDITIONAL_FILE_DATETIMES[$DATETIME_INDEX]}" == "" ]
|
||||
then
|
||||
ADDITIONAL_FILE_DATETIMES[$DATETIME_INDEX]="${ADDITIONAL_FILE_DATETIMES[$((DATETIME_INDEX-1))]}"
|
||||
fi
|
||||
done
|
||||
CONTENT_TDS=$(echo "$CONTENT_TDS" | awk '/class="content">/,/<\/td>/' | tr -d '\n' | sed 's/ \{1,\}/+/g' | sed 's/<\/td>/\n/g')
|
||||
CONTENT_TD_INDEX=0
|
||||
for CONTENT_TD in $CONTENT_TDS; do
|
||||
ADDITIONAL_FILE_URL=$(echo "$CONTENT_TD" | grep -o "href=\(\"\|\'\)[a-zA-Z0-9%()./_-]*\.$ADDITIONAL_FILES_EXTENSIONS\(\"\|\'\)" | sed "s/href=//g" | sed "s/\(\"\|\'\)//g")
|
||||
if [ "$ADDITIONAL_FILE_URL" != "" ]
|
||||
then
|
||||
ADDITIONAL_FILE_NAME=$(echo "$ADDITIONAL_FILE_URL" | sed 's/.*\///g' | sed 's/%20/ /g')
|
||||
ADDITIONAL_ONLINE_FILE_DATETIME=${ADDITIONAL_FILE_DATETIMES[$CONTENT_TD_INDEX]}
|
||||
if [ -f "$CURRENT_DIR/$ADDITIONAL_FILE_NAME" ]
|
||||
then
|
||||
ADDITIONAL_LOCAL_FILE_DATETIME=$(date -d "$(stat -c %y "$CURRENT_DIR/$ADDITIONAL_FILE_NAME" 2>/dev/null)" -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
else
|
||||
ADDITIONAL_LOCAL_FILE_DATETIME=""
|
||||
fi
|
||||
if [ "$ADDITIONAL_LOCAL_FILE_DATETIME" == "" ] || [[ "$ADDITIONAL_ONLINE_FILE_DATETIME" > "$ADDITIONAL_LOCAL_FILE_DATETIME" ]]
|
||||
then
|
||||
echo "Downloading $ADDITIONAL_FILE_NAME"
|
||||
[ "${SSH_CLIENT}" != "" ] && echo "URL: https://github.com$ADDITIONAL_FILE_URL?raw=true"
|
||||
mv "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}" "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}.${TO_BE_DELETED_EXTENSION}" > /dev/null 2>&1
|
||||
if curl $CURL_RETRY $SSL_SECURITY_OPTION -L "https://github.com$ADDITIONAL_FILE_URL?raw=true" -o "$CURRENT_DIR/$ADDITIONAL_FILE_NAME"
|
||||
then
|
||||
rm "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}.${TO_BE_DELETED_EXTENSION}" > /dev/null 2>&1
|
||||
else
|
||||
echo "${ADDITIONAL_FILE_NAME} download failed"
|
||||
echo "Restoring old ${ADDITIONAL_FILE_NAME} file"
|
||||
rm "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}" > /dev/null 2>&1
|
||||
mv "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}.${TO_BE_DELETED_EXTENSION}" "${CURRENT_DIR}/${ADDITIONAL_FILE_NAME}" > /dev/null 2>&1
|
||||
fi
|
||||
sync
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
CONTENT_TD_INDEX=$((CONTENT_TD_INDEX+1))
|
||||
done
|
||||
echo ""
|
||||
}
|
||||
|
||||
for ADDITIONAL_REPOSITORY in "${ADDITIONAL_REPOSITORIES[@]}"; do
|
||||
[ "$PARALLEL_UPDATE" == "true" ] && { echo "$(checkAdditionalRepository)"$'\n' & } || checkAdditionalRepository
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user