From 4fe40ec0aded1050ef5411251709900e7afd8467 Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Mon, 18 Jul 2022 11:02:34 +0200 Subject: [PATCH] Enhance newdracut.sh --- newdracut.sh | 77 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 71 insertions(+), 6 deletions(-) mode change 100644 => 100755 newdracut.sh diff --git a/newdracut.sh b/newdracut.sh old mode 100644 new mode 100755 index c53481d..381fba5 --- a/newdracut.sh +++ b/newdracut.sh @@ -1,17 +1,82 @@ -#!/bin/bash +#!/usr/bin/bash -if [[ -f "$HOME/git/dracut/$1" ]]; then +bash -n "$0" || exit 1 +shopt -s extglob + +patchnr() { + local nr + while [[ -n "$1" ]]; do + nr=$(cut -d'.' -f1 <<< "$1") + shift + [[ $((10#$nr)) -gt 0 ]] || echo "Invalid patch number: $nr" >&2 + echo "$nr" + done +} + +if [[ -e "$HOME/git/dracut/$1" ]]; then srcrpm="$HOME/git/dracut/$1" +elif [[ -e "$HOME/dev/upstream/dracut/$1" ]]; then + srcrpm="$HOME/dev/upstream/dracut/$1" else srcrpm="$1" fi -[[ -f $srcrpm ]] || exit 0 +[[ -f $srcrpm ]] || exit 3 + +old_release=$(rpmspec -D "_sourcedir $(pwd)" -q --srpm --qf '%{release}' dracut.spec) +old_release=${old_release%%.*} cp dracut.spec dracut.spec.old -for i in *.patch; do git rm -f $i;done + +rm *.patch; git reset --hard HEAD +last_patch_nr=$(patchnr *.patch | sort -n | tail -n 1) +last_patch_nr=${last_patch_nr:-0000} +#for i in *.patch; do git rm -f $i;done if rpm -ivh --define "_srcrpmdir $PWD" --define "_specdir $PWD" --define "_sourcedir $PWD" "$srcrpm"; then - ls *.patch &>/dev/null && git add *.patch - perl -n -e 'if ($do_print) {print "$_" ;}; if (/^%changelog/) { $do_print=1; }' < dracut.spec.old >> dracut.spec + for nr in $(patchnr *.patch); do + [[ $((10#$nr)) -gt $((10#$last_patch_nr)) ]] && git add "${nr}.patch" + done + + new_version=$(rpmspec -D "_sourcedir $(pwd)" -q --srpm --qf '%{version}' dracut.spec) + new_release=$(rpmspec -D "_sourcedir $(pwd)" -q --srpm --qf '%{release}' dracut.spec) + new_release_full=${new_release%.*} + new_release=${new_release%%.*} + + do_print="" + while IFS=$'\n' read -r line + do + if [ -z "$do_print" ] && [ "$line" = "%changelog" ]; then + do_print="yes" + echo "* $(LANG='C' date '+%a %b %d %Y') $(git config user.name) <$(git config user.email)> - ${new_version}-${new_release_full}" + + for ((i=old_release; i> dracut.spec + + # Patch list: + # ls *.patch | tr -s ' ' '\n' | cut -d'.' -f1 | xargs -i zsh -c "nr=\$((10#{})); echo \"Patch\${nr}: {}.patch\"" + + git add dracut.spec + + msg="Resolves: $( + for ((i=old_release; i