Skip to content

Commit 43e79f8

Browse files
committed
Allow choosing prior-to-latest releases
Defective DD-WRT releases are usually pulled from the download servers soon after their release. It is recommended to skip the latest release(s) to avoid installing untested firmware images.
1 parent 102bd19 commit 43e79f8

2 files changed

Lines changed: 31 additions & 7 deletions

File tree

ddwrt-autoupdate

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,34 @@ list_files() {
2020
curl -Lfs "$url" | sed -n 's/^<a href="\([^/"]*\)\/">\1\/<\/a>.*$/\1/p'
2121
}
2222

23+
get_latest_releases() {
24+
25+
local year=$( list_files "$server_https" | tail -n1 )
26+
[[ "$year" =~ ^[0-9]{4}$ ]] || error "Unexpected directory: $year"
27+
(( $year >= 2019 )) || error "Unexpected year: $year"
28+
29+
exec 11< <( list_files "$server_https/$(( $year - 1 ))" )
30+
exec 10< <( list_files "$server_https/$(( $year - 0 ))" )
31+
local ym1=$( cat <&11 )
32+
local ym0=$( cat <&10 )
33+
34+
for y in "$ym1" "$ym0"; do
35+
[[ "$y" != "" ]] || error "Unable to list latest releases"
36+
cat <<<"$y"
37+
done
38+
39+
}
40+
2341
echo
24-
echo "Getting latest DD-WRT release info..."
42+
echo "Getting info of latest DD-WRT releases..."
2543

26-
year=$( list_files "$server_https" | tail -n1 )
27-
[[ "$year" =~ ^[0-9]{4}$ ]] || error "Unexpected directory: $year"
28-
(( $year >= 2019 )) || error "Unexpected year: $year"
44+
latest_releases=$( get_latest_releases )
45+
release_tag=$( { echo; echo "$latest_releases"; } | tail -n$(( $prior_to_latest + 1 )) | head -n1 )
46+
[[ "$release_tag" != "" ]] || error "Chosen prior-to-latest release cannot be from before last year"
2947

30-
release_tag=$( list_files "$server_https/$year" | tail -n1 )
31-
[[ "$release_tag" =~ ^((0[1-9]|1[0-2])[-](0[1-9]|[1-2][0-9]|3[0-1])[-]($year))[-]r([0-9]+)$ ]] || error "Unexpected directory: $year/$release_tag"
48+
[[ "$release_tag" =~ ^((0[1-9]|1[0-2])[-](0[1-9]|[1-2][0-9]|3[0-1])[-](2[0-9][0-9][0-9]))[-]r([0-9]+)$ ]] || error "Unexpected release tag: $release_tag"
3249

50+
year="${BASH_REMATCH[4]}"
3351
month="${BASH_REMATCH[2]}"
3452
day="${BASH_REMATCH[3]}"
3553

@@ -41,7 +59,7 @@ release_num="${BASH_REMATCH[5]}"
4159

4260
tag="r$release_num-$date_num"
4361

44-
echo "Latest release is: r$release_num ($date_int)"
62+
echo "Chosen release ($prior_to_latest prior to latest): r$release_num ($date_int)"
4563
echo
4664

4765
set_firmware_files

ddwrt-update.TEMPLATE

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ backup_partition() {
6464

6565
}
6666

67+
# Defective DD-WRT releases are usually pulled from the download servers soon after their release.
68+
# It is recommended to skip the latest release(s) to avoid installing untested firmware images.
69+
70+
# Configure the number of releases prior to the latest release to use (0 means use latest release):
71+
prior_to_latest=1
72+
6773
# Configure whether to wait for and ping the device after firmware updates (either "yes" or "no"):
6874
ping_device="yes"
6975

0 commit comments

Comments
 (0)