From 582dfd16fbf04ecb487914fddef5e8ccdf4be26c Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Fri, 6 Feb 2009 11:36:11 +0100 Subject: [STLinux] import patches from stlinux kernel SRPMS updates --- STLinux/stlinux_import_patches.sh | 126 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100755 STLinux/stlinux_import_patches.sh diff --git a/STLinux/stlinux_import_patches.sh b/STLinux/stlinux_import_patches.sh new file mode 100755 index 0000000..1f12198 --- /dev/null +++ b/STLinux/stlinux_import_patches.sh @@ -0,0 +1,126 @@ +#!/bin/zsh + +usage() +{ + cat << EOF +usage: $0:t [Patch # start] [Patch # end] +EOF +} + +if [ -d .git ] +then + echo "This is not a GIT repository !" + usage + exit 27 # I like 27. +fi +if [ $# -lt 2 ] +then + usage + exit 42 # 42 ? Because ! +fi + +STLINUX_FOLDER=$1 +TAG_PREFIX=$2 +START_FROM=${3:-0} +END_TO=${4:-} + +PATCHES_LIST=$STLINUX_FOLDER/.patches + +grep -if =(grep "^%patch" $STLINUX_FOLDER/*.spec | sed 's/%\(patch.*\) .*/^\1:/') $STLINUX_FOLDER/*.spec | awk '{ print $2 }' > $PATCHES_LIST + +#cat $PATCHES_LIST + +export RELEASE="" +for file in $(cat $PATCHES_LIST ) +do + + i=$(grep "^Patch.*:[[:blank:]]\+$file$" $STLINUX_FOLDER/*.spec | sed 's/^Patch\(.*\): .*$/\1/') + + if [ $i -ge $START_FROM -a \( -z "$END_TO" -o $i -le "$END_TO" \) ] + then + + if [ ! -e $STLINUX_FOLDER/$file -a -e $STLINUX_FOLDER/$file:r ] + then + file=$file:r + fi + + ext=$file:e + + #( preprint $file $color[white] ; echo ; ) >&2 + + ( + # + # On extrait le numéro de release ST dans le nom du fichier .patch + # + _RELEASE="$(echo $file | sed 's/linux-.*[-_]stm\(.\)\(.\)[-_]\([0-9]*\)[_-\.].*/\3/')" + + # Ça a marché ? Alors on vérifie qu'on n'est pas passé à la release suivante... + if [ "$_RELEASE" != "$file" ] + then + # On épure le numéro de révision + _RELEASE=$(( $_RELEASE )) + if [ "$(( $_RELEASE ))" -gt "$(( $RELEASE ))" ] + then + # Ha ! On est passé à une release "supérieure", alors on pose le tag + git-tag "$TAG_PREFIX${_RELEASE}" + # Et on stocke le résultat pour le récupérer dans le bloc parent + echo $_RELEASE > .git/release + fi + + # On crée le tag pour le message de commit + RELEASE="[$_RELEASE] " + else + RELEASE="" + fi + + # Voici la première ligne du message de commit + echo "[Patch #$i] ${RELEASE}Applied $file" + + # + # On récupère le commentaire dans le patch en guise de message de commit + # avec gestion des .patch ou des .patch.bz2 + # + case $ext in + "patch") + awk '{ RS="--- "; } { if ( NR <= 2 ) { print $0 } }' < $STLINUX_FOLDER/$file | \ + grep -v -e "^diff \-" -e "^Index: " -e "^=*$" -e "^Signed-off-by: " -e "^index "; + ;; + "bz2") + bunzip2 -c $STLINUX_FOLDER/$file | awk '{ RS="--- "; } { if ( NR <= 2 ) { print $0 } }' | \ + grep -v -e "^diff \-" -e "^Index: " -e "^=*$" -e "^Signed-off-by: " -e "^index "; + ;; + esac + + ) | sed 's/ //' > .git/message ; + + # On récupère la release trouvée dans le bloc précédent + RELEASE=$([ -s .git/release ] && ( cat .git/release ; rm -f .git/release) ) + # + # On affiche le résultat de l'application du patch dans le message de commit + # + echo "---" >> .git/message + case $ext in + "bz2") + bunzip2 $STLINUX_FOLDER/$file | patch -Np1 >> .git/message + ;; + "patch") + patch -Np1 < $STLINUX_FOLDER/$file >> .git/message + ;; + *) + echo "$ext NOT SUPPORTED !!" + exit + ;; + esac + # Suppression des fichiers supprimés par le patch + git-rm $(git-ls-files --deleted) 2>/dev/null + # Ajout de tout le reste :-) + git-add . + # Et on committe !! + git-commit -F .git/message + else + + echo >&2 "Skipping patch #$i : $file" + + fi +done +git-tag "$TAG_PREFIX$((RELEASE + 1))" -- cgit v1.2.3