diff options
Diffstat (limited to '')
-rwxr-xr-x | bin/reprepro_fix-changes.sh | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/bin/reprepro_fix-changes.sh b/bin/reprepro_fix-changes.sh new file mode 100755 index 0000000..ae35550 --- /dev/null +++ b/bin/reprepro_fix-changes.sh @@ -0,0 +1,139 @@ +#!/bin/sh + +set -e + +CHANGELOGS="${@:-*/packages/*/*/*.changes}" + +echo -n "Fixing " + +Fix_size () +{ + CHANGES="${1}" + BUILDINFO="${2}" + + OLD_SIZE="$(grep " [0-9]* $(basename ${BUILDINFO})$" ${CHANGES} | head -n1 | awk '{ print $2 }')" + NEW_SIZE="$(ls -l ${BUILDINFO} | awk '{ print $5 }')" + + if [ -n "${OLD_SIZE}" ] && [ -n "${NEW_SIZE}" ] && grep -qs " ${OLD_SIZE} " "${CHANGES}" + then + sed -i -e "s| ${OLD_SIZE} | ${NEW_SIZE} |g" "${CHANGES}" + + cd "$(dirname ${CHANGES})" + echo "Signing ${CHANGES}" + + if grep -qs progress-linux.org ${CHANGES} + then + psign.sh > /dev/null 2>&1 + elif grep -qs bfh.ch ${CHANGES} + then + bsign.sh > /dev/null 2>&1 + fi + cd "${OLDPWD}" + fi +} + +Fix_hashsums () +{ + CHANGES="${1}" + BUILDINFO="${2}" + SIZE="${3}" + + for HASHSUM in $(grep " ${SIZE} " "${CHANGES}") + do + OLD_HASH="$(echo ${HASHSUM} | awk '{ print $1 }')" + NEW_HASH="" + + case $(echo ${OLD_HASH} | wc -c) in + 41) + NEW_HASH="$(sha1sum ${BUILDINFO} | awk '{ print $1 }')" + ;; + + 65) + NEW_HASH="$(sha256sum ${BUILDINFO} | awk '{ print $1 }')" + ;; + + 33) + NEW_HASH="$(md5sum ${BUILDINFO} | awk '{ print $1 }')" + ;; + esac + + if [ -n "${NEW_HASH}" ] && ! grep -qs "^ ${NEW_HASH} ${SIZE} " "${CHANGES}" + then + sed -i -e "s|^ ${OLD_HASH} ${SIZE}| ${NEW_HASH} ${SIZE}|" "${CHANGES}" + + cd "$(dirname ${CHANGES})" + echo "Signing ${CHANGES}" + psign.sh > /dev/null 2>&1 + cd "${OLDPWD}" + fi + done +} + +for CHANGES in ${CHANGELOGS} +do + BUILDINFO="$(echo ${CHANGES} | sed -e 's|.changes$|.buildinfo|')" + + if grep -qs usr-local-has-programs "${BUILDINFO}" && grep -qs merged-usr-via-symlinks "${BUILDINFO}" + then + grep -v usr-local-has-programs "${BUILDINFO}" > "${BUILDINFO}".tmp + rm -f "${BUILDINFO}" + mv "${BUILDINFO}".tmp "${BUILDINFO}" + else + if grep -qs usr-local-has-programs "${BUILDINFO}" && ! grep -qs merged-usr-via-symlinks "${BUILDINFO}" + then + sed -i -e 's|usr-local-has-programs|merged-usr-via-symlinks|' "${BUILDINFO}" + fi + fi + + if grep -qs DEB_BUILD_OPTIONS= "${BUILDINFO}" + then + grep -v DEB_BUILD_OPTIONS= "${BUILDINFO}" > "${BUILDINFO}".tmp + rm -f "${BUILDINFO}" + mv "${BUILDINFO}".tmp "${BUILDINFO}" + fi + + if [ ! -e "${BUILDINFO}" ] + then + continue + fi + + SIZE="$(ls -l ${BUILDINFO} | awk '{ print $5 }')" + + if [ $(grep -c ".* ${SIZE} .*$(basename ${BUILDINFO})" ${CHANGES}) -ne 3 ] + then + echo + echo "${CHANGES}: fix buildinfo size" + Fix_size ${CHANGES} ${BUILDINFO} + fi + + SHA1SUM="$(sha1sum ${BUILDINFO} | awk '{ print $1 }')" + + if ! grep -qs "^ ${SHA1SUM} ${SIZE} $(basename ${BUILDINFO})$" "${CHANGES}" + then + echo + echo "${CHANGES}: fix buildinfo sha1" + Fix_hashsums ${CHANGES} ${BUILDINFO} ${SIZE} + fi + + SHA256SUM="$(sha256sum ${BUILDINFO} | awk '{ print $1 }')" + + if ! grep -qs "^ ${SHA256SUM} ${SIZE} $(basename ${BUILDINFO})$" "${CHANGES}" + then + echo + echo "${CHANGES}: fix buildinfo sha256" + Fix_hashsums ${CHANGES} ${BUILDINFO} ${SIZE} + fi + + MD5SUM="$(md5sum ${BUILDINFO} | awk '{ print $1 }')" + + if ! grep -qs "^ ${MD5SUM} ${SIZE} .*$(basename ${BUILDINFO})$" "${CHANGES}" + then + echo + echo "${CHANGES}: fix buildinfo md5" + Fix_hashsums ${CHANGES} ${BUILDINFO} ${SIZE} + fi + + echo -n "." +done + +echo " done." |