@@ -58,12 +58,10 @@ update_package() {
5858 local raw_downloads_week=-1
5959 local raw_downloads_day=-1
6060 local size=-1
61- local versions_json=" "
6261 local version_count=-1
6362 local version_with_tag_count=-1
6463 local version_newest_id=-1
6564 local latest_version=-1
66- local latest_tags
6765 local owner_rank
6866 local repo_rank
6967 package_type=$( cut -d' /' -f1 <<< " $1" )
@@ -92,7 +90,7 @@ update_package() {
9290 return
9391 fi
9492 done < <( grep " $owner " " $BKG_OPTOUT " )
95- elif $ fast_out; then
93+ elif [ " ${ fast_out:- false} " = " true " ] ; then
9694 return
9795 fi
9896
@@ -120,35 +118,80 @@ update_package() {
120118 echo " Updating $owner /$package ..."
121119 raw_downloads=$( grep -Pzo ' Total downloads[^"]*"\d*' <<< " $html" | grep -Pzo ' \d*$' | tr -d ' \0' ) # https://stackoverflow.com/a/74214537
122120 sqlite3 " $BKG_INDEX_DB " " select id from '$table_version_name ' where date >= '$BKG_BATCH_FIRST_STARTED ';" | sort -u > " ${table_version_name} " _already_updated
123- local break_now=false
121+ local max_version_pages=3
122+ local tag_cache_pages=3
123+ local page=1
124+ local pages_left=0
125+ local pipeline_status=0
126+ local update_versions_status=0
127+ local version_lines
124128
125- for page in $( seq 0 5) ; do
126- (( page > 0 )) || continue
127- local pages_left=0
129+ version_reset_pipeline " $tag_cache_pages "
130+
131+ page_version " $page "
132+ pages_left=$?
133+ if (( pages_left == 3 )) ; then
134+ parallel_async_wait || :
135+ rm -f " ${table_version_name} " _already_updated
136+ return 3
137+ fi
138+
139+ version_lines=$( jq -r ' .[] | @base64' <<< " $VERSION_PAGE_JSON" )
140+ if [ -n " $version_lines " ]; then
141+ version_hydrate_candidates " $version_lines " 0
142+ pipeline_status=$?
143+
144+ if (( pipeline_status != 3 )) ; then
145+ version_submit_current_page_candidates 5 false
146+ pipeline_status=$?
147+ fi
148+
149+ if (( pipeline_status != 3 )) ; then
150+ version_collect_current_page_provisional 5
151+ version_resolve_provisional_candidates " $tag_cache_pages "
152+ pipeline_status=$?
153+ fi
154+ fi
155+
156+ while (( pipeline_status != 3 )) && (( pages_left != 2 )) && (( page < max_version_pages)) && (( ${# VERSION_PROVISIONAL_IDS[@]} > 0 )) ; do
157+ (( page++ ))
128158 page_version " $page "
129159 pages_left=$?
130- versions_json=$( jq -c -s ' .' " $BKG_INDEX_DIR /$owner /$repo /$package " .* .json 2> /dev/null)
131- rm -f " $BKG_INDEX_DIR /$owner /$repo /$package " .* .json
132- (( pages_left != 3 )) || return 3
133- jq -e . <<< " $versions_json" & > /dev/null || versions_json=" [{\" id\" :\" -1\" ,\" name\" :\" latest\" ,\" tags\" :\"\" }]"
134- ! jq -e ' length > 1' <<< " $versions_json" & > /dev/null || versions_json=$( jq -c ' map(select(.id >= 0))' <<< " $versions_json" )
135- [ -n " $latest_tags " ] || latest_tags=$(
136- jq -r '
137- [ .[]
138- | select(.tags | split(",") | map(gsub("^\\s+|\\s+$";"")) | any(. == "latest"))
139- | .tags
140- ][0] // ""
141- ' <<< " $versions_json"
142- )
143- latest_tags=$( perl -pe ' s/(?<!\\)"/\\"/g' <<< " $latest_tags" )
144- run_parallel update_version " $( jq -r ' .[] | @base64' <<< " $versions_json" ) "
145- (( $? != 3 )) || return 3
146- (( pages_left != 2 )) || break
147- ! $break_now || break
148- [ -z " $latest_tags " ] || break_now=true
160+
161+ if (( pages_left == 3 )) ; then
162+ pipeline_status=3
163+ break
164+ fi
165+
166+ version_lines=$( jq -r ' .[] | @base64' <<< " $VERSION_PAGE_JSON" )
167+ [ -n " $version_lines " ] || continue
168+
169+ version_hydrate_candidates " $version_lines " 0
170+ pipeline_status=$?
171+ (( pipeline_status != 3 )) || break
172+ version_promote_current_page_candidates " $tag_cache_pages "
173+ pipeline_status=$?
149174 done
150175
176+ if (( pipeline_status != 3 )) && (( ${# VERSION_SOURCE_LINES[@]} == 0 )) ; then
177+ version_store_fallback_candidate
178+ version_submit_candidate " -1"
179+ pipeline_status=$?
180+ fi
181+
182+ if (( pipeline_status != 3 )) ; then
183+ for version_id in " ${VERSION_PROVISIONAL_IDS[@]} " ; do
184+ version_submit_candidate " $version_id "
185+ pipeline_status=$?
186+ (( pipeline_status != 3 )) || break
187+ done
188+ fi
189+
190+ parallel_async_wait
191+ update_versions_status=$?
192+
151193 rm -f " ${table_version_name} " _already_updated
194+ (( pipeline_status != 3 && update_versions_status != 3 )) || return 3
152195 fi
153196
154197 # calculate the overall downloads and size
0 commit comments