#!/bin/bash LANG=C CHANGELOG="ChangeLog.txt" PATH_DISTRO=${PATH_DISTRO:-"/mnt/shares/linux/slarm64/slarm64-15.0"} PREFFIX_DISTRO=${PREFFIX_DISTRO:-"slarm64"} WORK_DIR=$(mktemp -d) FILTER=".*\.\(tgz\|txz\)" DELIMITER="+--------------------------+" get_last_timestamp() { TIMESTAMP=$(grep 'UTC' ${PATH_DISTRO}/${CHANGELOG} 2>/dev/null | head -n 1) [[ -z $TIMESTAMP ]] && TIMESTAMP=$(date -u -d '1 hour ago') TIMESTAMP=$(date -u --date="$TIMESTAMP" +'%F %X') echo $TIMESTAMP } mark_new_update() { if [[ -f ${WORK_DIR}/new ]]; then for pkg in $(cat ${WORK_DIR}/new); do __pkg=$(echo ${pkg} | rev | cut -d '-' -f2- | rev) _pkg=$(echo ${pkg} | rev | cut -d '-' -f4- | rev) if [[ $(grep -e ${__pkg} ${PATH_DISTRO}/${CHANGELOG} 2>/dev/null) && ! $(grep -e ${pkg} ${PATH_DISTRO}/${CHANGELOG} 2>/dev/null) ]]; then sed -i "s:$pkg:$pkg\: Rebuilt\.:" ${WORK_DIR}/new elif [[ $(grep -e ${_pkg} ${PATH_DISTRO}/${CHANGELOG} 2>/dev/null) && ! $(grep -e ${pkg} ${PATH_DISTRO}/${CHANGELOG} 2>/dev/null) ]]; then sed -i "s:$pkg:$pkg\: Upgraded\.:" ${WORK_DIR}/new elif [[ ! $(grep -e ${_pkg} ${PATH_DISTRO}/${CHANGELOG} 2>/dev/null) ]]; then sed -i "s:$pkg:$pkg\: Added\.:" ${WORK_DIR}/new else sed -i -e "s:${pkg}::g" -e "/^$/d" ${WORK_DIR}/new fi done fi } mark_remove() { find $PATH_DISTRO -regex $FILTER -print | rev | cut -d '-' -f4- | rev | sed -e "s:${PATH_DISTRO}\/\|${PREFFIX_DISTRO}\/::g" > ${WORK_DIR}/current cat "${PATH_DISTRO}/${CHANGELOG}" ${WORK_DIR}/new 2>/dev/null | grep ${FILTER} | rev | cut -d '-' -f4- | rev | sort | uniq >> ${WORK_DIR}/uniq for f in $(cat "${PATH_DISTRO}/${CHANGELOG}" 2>/dev/null | grep ${FILTER} | grep Removed | rev | cut -d '-' -f4- | rev); do sed -i -e "s:${f}$::g" -e "/^$/d" ${WORK_DIR}/uniq done for pkg in $(cat ${WORK_DIR}/uniq); do _pkg=$(grep -e $pkg ${PATH_DISTRO}/${CHANGELOG} 2>/dev/null | cut -d ':' -f 1) for f in ${_pkg}; do __pkg=$(echo ${f} | rev | cut -d '-' -f4- | rev) if [[ ${pkg} == ${__pkg} ]]; then _pkg=${f} else unset _pkg fi done [[ ! $(grep -x ${pkg} ${WORK_DIR}/current) && ! -z ${_pkg} ]] && echo ${_pkg} | sed 's:$:\: Removed\.:' >> ${WORK_DIR}/remove done } FILES=$(find $PATH_DISTRO -newerct "$(get_last_timestamp)" -regex $FILTER) for pkg in ${FILES}; do echo ${pkg} | sed -e "s:${PATH_DISTRO}\/\|${PREFFIX_DISTRO}\/::g" >> ${WORK_DIR}/new done mark_new_update mark_remove if [[ -s ${WORK_DIR}/remove || -s ${WORK_DIR}/new ]]; then cat ${WORK_DIR}/remove ${WORK_DIR}/new 2>/dev/null | sort > ${WORK_DIR}/packages fi if [[ -f ${WORK_DIR}/packages ]]; then echo "$DELIMITER" >> ${WORK_DIR}/packages date -u > ${WORK_DIR}/headers echo "$(cat ${WORK_DIR}/headers ${WORK_DIR}/packages ${PATH_DISTRO}/${CHANGELOG} 2>/dev/null)" > ${PATH_DISTRO}/${CHANGELOG} fi [[ -d $WORK_DIR ]] && rm -rf $WORK_DIR