diff --git a/packaging/generate-packages-index.sh b/packaging/generate-packages-index.sh index 33d93deba8a..3496f4aa1e9 100755 --- a/packaging/generate-packages-index.sh +++ b/packaging/generate-packages-index.sh @@ -106,7 +106,7 @@ fi BASE_PATH="$(cd "$BASE_PATH" && pwd)" WORK_DIR="$(mktemp -d)" OBJECT_LIST="$WORK_DIR/objects.txt" -TREE_LIST="$WORK_DIR/tree.txt" +TREE_PATHS="$WORK_DIR/catalog-paths.txt" VERSION_ROWS="$WORK_DIR/version-rows.tsv" trap cleanup EXIT @@ -190,6 +190,101 @@ build_object_list() sort -u -o "$OBJECT_LIST" "$OBJECT_LIST" } +filter_package_paths() +{ + local candidates="$WORK_DIR/package-candidates.txt" + local rc=0 + + grep -Ev 'source-|pool|dists' "$OBJECT_LIST" > "$candidates" + rc=$? + if [[ "$rc" -ne 0 && "$rc" -ne 1 ]]; then + echo "ERROR: failed filtering package paths from object list" >&2 + exit 1 + fi + if [[ "$rc" -eq 1 ]]; then + : > "$candidates" + fi + + grep -E '\.(rpm|deb|key|repo|exe|msi|zip|pkg)$' "$candidates" > "$TREE_PATHS" + rc=$? + if [[ "$rc" -ne 0 && "$rc" -ne 1 ]]; then + echo "ERROR: failed selecting package file paths" >&2 + exit 1 + fi + if [[ "$rc" -eq 1 ]]; then + : > "$TREE_PATHS" + fi +} + +absolutize_tree_hrefs() +{ + awk -v base="$BASE_URL" ' + function absolutize(url) { + if (url ~ /^https?:\/\//) { + return url + } + if (url == "/") { + return base "/" + } + if (substr(url, 1, 1) == "/") { + return base url + } + return base "/" url + } + { + line = $0 + out = "" + while (match(line, /href="[^"]+"/)) { + out = out substr(line, 1, RSTART - 1) + href = substr(line, RSTART, RLENGTH) + url = substr(href, 7, length(href) - 7) + out = out "href=\"" absolutize(url) "\"" + line = substr(line, RSTART + RLENGTH) + } + print out line + }' +} + +build_tree_html() +{ + local -a tree_pipe_status=() + + BASE_URL="${BASE_URL%/}" + ( + cd "$WORK_DIR" + tree --noreport --charset utf-8 --fromfile catalog-paths.txt -H "${BASE_URL}/" + ) | sed -e "s|${BASE_URL}/catalog-paths.txt/|${BASE_URL}/|g" \ + -e "s|${BASE_URL}/catalog-paths.txt|${BASE_URL}/|g" \ + -e "s|${BASE_URL}catalog-paths.txt/|${BASE_URL}/|g" \ + -e "s|${BASE_URL}catalog-paths.txt|${BASE_URL}/|g" \ + -e 's|>catalog-paths.txt|>/|g' \ + -e 's|\(https://[^/]*\)//|\1/|g' \ + | absolutize_tree_hrefs \ + | awk '/