From 04de7706694388e2d43b0d628c3e6d728978082a Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Mar 03 2022 08:53:43 +0000 Subject: Adjust get_sources.sh to allow empty `sources` file There are situations in which one will want to use a `sources` file to indicate that they wish to use the flat dist-git layout. However, until now we did not allow empty `sources` file in flat dist-git layout. With this change we allow empty `sources` file and we will just echo something in the logs saying that this file is empty and bail. Signed-off-by: Pierre-Yves Chibon --- diff --git a/get_sources.sh b/get_sources.sh old mode 100755 new mode 100644 index 3ed0466..ea1b3bc --- a/get_sources.sh +++ b/get_sources.sh @@ -146,52 +146,56 @@ else done <<< "$(git branch -r --contains HEAD | sed 's#origin/##g')" fi -if [[ -s sources ]]; then - # This section is for the "flat" dist-git layout, where the spec file and - # patches are all present at the top level directory and the sha of the tarball - # present in a 'sources' file. - # This code was re-used from the fedpkg-pkg minimal project which is licensed - # under GPLv3 or any later version. +if [[ -f sources ]]; then + if [[ ! -s sources ]]; then + echo "Empty sources file -- nothing to check" + else + # This section is for the "flat" dist-git layout, where the spec file and + # patches are all present at the top level directory and the sha of the tarball + # present in a 'sources' file. + # This code was re-used from the fedpkg-pkg minimal project which is licensed + # under GPLv3 or any later version. - pkgname=$(basename "$PWD") - # Read first word of first line. For old MD5 format it's the 32 character - # hash. Otherwise let's assume the sources have the BSD format where lines - # start with hash type. - hashtype="$(head -n1 sources | cut -d' ' -f1 | tr '[:upper:]' '[:lower:]')" - # The format is - # SHA512 (filename) = ABCDEF - # We don't care about the equals sign. We also assume all hashes are - # the same type, so we don't need to read it again for each line. - while read -r _ filename _ hash || [[ -n "$filename" && -n "$hash" ]]; do - if [ -z "$filename" ] || [ -z "$hash" ]; then - continue - fi - # Remove parenthesis around tarball name - filename=${filename#(} - tarball=${filename%)} - if [ ! -e "$tarball" ]; then - for br in "${branches[@]}" - do - br=$(echo ${br}| sed -e s'|remotes/origin/||') - # Try the branch-specific lookaside structure - url="${SURL}/$pkgname/${br}/$hash" - echo "Retrieving ${url}" - HTTP_CODE=$(curl -L ${QUIET} -H Pragma: -o "./$tarball" -R -S --fail --retry 5 "${url}" --write-out "%{http_code}" || true) - echo "Returned ${HTTP_CODE}" - if [[ ${HTTP_CODE} -gt 199 && ${HTTP_CODE} -lt 300 ]] ; then - echo "bailing" - break - fi - # Try the hash-specific lookaside structure - url="${SURL}/$pkgname/$tarball/$hashtype/$hash/$tarball" - echo "Retrieving ${url}" - curl -L ${QUIET} -H Pragma: -o "./$tarball" -R -S --fail --retry 5 "${url}" && break - done - else - echo "$filename exists. skipping" - fi - done < sources - "${hashtype}sum" -c sources + pkgname=$(basename "$PWD") + # Read first word of first line. For old MD5 format it's the 32 character + # hash. Otherwise let's assume the sources have the BSD format where lines + # start with hash type. + hashtype="$(head -n1 sources | cut -d' ' -f1 | tr '[:upper:]' '[:lower:]')" + # The format is + # SHA512 (filename) = ABCDEF + # We don't care about the equals sign. We also assume all hashes are + # the same type, so we don't need to read it again for each line. + while read -r _ filename _ hash || [[ -n "$filename" && -n "$hash" ]]; do + if [ -z "$filename" ] || [ -z "$hash" ]; then + continue + fi + # Remove parenthesis around tarball name + filename=${filename#(} + tarball=${filename%)} + if [ ! -e "$tarball" ]; then + for br in "${branches[@]}" + do + br=$(echo ${br}| sed -e s'|remotes/origin/||') + # Try the branch-specific lookaside structure + url="${SURL}/$pkgname/${br}/$hash" + echo "Retrieving ${url}" + HTTP_CODE=$(curl -L ${QUIET} -H Pragma: -o "./$tarball" -R -S --fail --retry 5 "${url}" --write-out "%{http_code}" || true) + echo "Returned ${HTTP_CODE}" + if [[ ${HTTP_CODE} -gt 199 && ${HTTP_CODE} -lt 300 ]] ; then + echo "bailing" + break + fi + # Try the hash-specific lookaside structure + url="${SURL}/$pkgname/$tarball/$hashtype/$hash/$tarball" + echo "Retrieving ${url}" + curl -L ${QUIET} -H Pragma: -o "./$tarball" -R -S --fail --retry 5 "${url}" && break + done + else + echo "$filename exists. skipping" + fi + done < sources + "${hashtype}sum" -c sources + fi else # This section is for the "non-flat" dist-git layout, where the spec file # is stored in a SPECS folder, the patches in a SOURCES folder and the sha