#!/bin/bash # A script to generate woof-CE patches against a running puppy (run without # any arguments) or the puppy.sfs (run with the 'sfs' argument). setglobal Version = '0.7' source /etc/DISTRO_SPECS source /etc/rc.d/PUPSTATE # Check if we are good to run if test $[which git] = "" { Xdialog --title "Error" --msgbox \ "Please install the devx sfs or just git from the repo." 0 0 exit 1 } setglobal WDIR = $[pwd] # Should be just above your freshly cloned woof-CE git if test ! -d $WDIR/woof-CE { # Check if script was started by "dropping" a file on it with ROX setglobal SCRIPT_PATH = $[realpath $0] if test $(SCRIPT_PATH%/woof-CE/ztools/patch-generator.sh) != $SCRIPT_PATH -a $1 != '' { setglobal WDIR = $(SCRIPT_PATH%/woof-CE/ztools/patch-generator.sh) cd $WDIR } else { Xdialog --title "Error" --msgbox \ "This script should be in the same folder as the woof-CE git folder" 0 0 exit 1 } } setglobal GIT_BRANCH = $[cut -f3 -d'/' $WDIR/woof-CE/.git/HEAD] if test ! $GIT_BRANCH { Xdialog --title "Error" --msgbox \ "The woof-CE folder is not a git repo. Please clone the woof-CE git" 0 0 exit 1 } if test $GIT_BRANCH != "testing" -a $GIT_BRANCH != "rationalise" { Xdialog --title "Error" --msgbox \ "Your woof-CE repo is not in the testing or rationalise branch. Please run 'git checkout testing' or 'git checkout rationalise'" 0 0 exit 1 } if test $GIT_BRANCH = "testing" { setglobal GIT_HEAD = $[cut -c 1-6 $WDIR/woof-CE/.git/refs/heads/testing] setglobal REMOTE_HEAD = $[git ls-remote https://github.com/puppylinux-woof-CE/woof-CE.git | grep 'refs/heads/testing' | cut -c 1-6] } elif test $GIT_BRANCH = "rationalise" { setglobal GIT_HEAD = $[cut -c 1-6 $WDIR/woof-CE/.git/refs/heads/rationalise] setglobal REMOTE_HEAD = $[git ls-remote https://github.com/puppylinux-woof-CE/woof-CE.git | grep 'refs/heads/rationalise' | cut -c 1-6] } if test $REMOTE_HEAD != $GIT_HEAD { Xdialog --title "Error" --msgbox \ "Your local repo is not in sysnc with the remote. Please run 'git pull --all'" 0 0 exit 1 } if test $1 = "sfs" -a $PUPMODE = "2" { Xdialog --title "Error" --msgbox \ "There is no pup.sfs in full installs. Please run without the 'sfs' argument" 0 0 exit 1 } # Make the patches test $BUILD_FROM_WOOF && setglobal FROMWOOF = "_$[echo $BUILD_FROM_WOOF | cut -f 2 -d ';' | cut -c 1-6]" match $1 { with sfs setglobal COMP_DIR = '/initrd/pup_ro2' setglobal PATCHES = "woof_"$GIT_BRANCH""$GIT_HEAD"_patches_to_"$DISTRO_FILE_PREFIX"-"$DISTRO_VERSION"_sfs"$FROMWOOF"" with '' setglobal COMP_DIR = '' setglobal PATCHES = "woof_"$GIT_BRANCH""$GIT_HEAD"_patches_to_"$DISTRO_FILE_PREFIX"-"$DISTRO_VERSION""$FROMWOOF"" with * if test ! -f $1 { echo "No such file: $1" Xdialog --title "Error" --msgbox "No such file: $1" 0 0 exit 1 } elif test $[expr $1 : '.*\(woof-out\)] = '' { echo "File must exist in woof-out_*" Xdialog --title "Error" --msgbox "File must exist in woof-out_*" 0 0 exit 1 } mkdir -p $WDIR/patches cd $WDIR/woof-CE/woof-code setglobal WOOFOUT_DIR = $[expr $1 : '.*\(woof-out[^/]*\)] setglobal FILE = $[expr $1 : '.*woof-out[^/]*/\(.*\)] echo "Making patch from $FILE" diff -u -N $FILE ../../$WOOFOUT_DIR/$FILE > $WDIR/patches/$[basename $FILE].patch cd $WDIR Xdialog --title "Finished" --msgbox "Made patch from $FILE \n \ It can be found in \n \ $WDIR/patches/" 0 0 exit } mkdir -p $WDIR/$PATCHES rm -rf $WDIR/$PATCHES/* setglobal DIRS = 'rootfs-skeleton' for i in [$[ls woof-CE/woof-code/rootfs-packages/]] { setglobal DIRS = ""$DIRS rootfs-packages/$i"" } for D in [$DIRS] { setglobal FOLDER = "woof-CE/woof-code/$D" cd $WDIR/$FOLDER for f in [$[find ./ -type f]] { test -f $COMP_DIR/$f && test $[diff -u -N $f $COMP_DIR/$f] != "" \ && diff -u -N $f $COMP_DIR/$f > $WDIR/$PATCHES/$[basename $f].patch } #exit 0 #Uncomment to check if compared correctly cd $WDIR/$PATCHES setglobal DS = $[echo $D | sed 's/\//\\\//] sed -i "s/\-\-\-\ \.\//\-\-\-\ a\/woof\-code\/$DS\//" * if test $1 = "sfs" { sed -i "s/\+\+\+\ \/initrd\/pup_ro2\/\.\//\+\+\+\ b\/woof\-code\/$DS\//" * } else { sed -i "s/\+\+\+\ \/\.\//\+\+\+\ b\/woof\-code\/$DS\//" * } } # check init setglobal INITPATH = $[echo $PUPSFS | cut -f 2 -d '/' | grep -v sfs] mkdir -p /tmp/initfs cd /tmp/initfs gunzip -c /mnt/home/$INITPATH/initrd.gz | cpio -i cd $WDIR/woof-CE diff -u initrd-progs/0initrd/init /tmp/initfs/init > $WDIR/$PATCHES/init.patch sed -i "s/\-\-\-\ /\-\-\-\ a\//" $WDIR/$PATCHES/init.patch sed -i "s/\+\+\+\ \/tmp\/initfs/\+\+\+\ b\/initrd\-progs\/0initrd/" $WDIR/$PATCHES/init.patch rm -rf /tmp/initfs # Move some patches to folders for easy reviewing cd $WDIR/$PATCHES mkdir binary_files SVGs defaults docs running desktop for f in [$[ grep ^Binary * | cut -f 1 -d':]] { mv $f binary_files/ } mv *.svg.patch SVGs/ mv default*.patch defaults/ mv *.rules.patch running/ mv {PUPSTATE,BOOTCONFIG,clock,current_month,issue,hosts,hostname,ld.so.conf,resolv.conf,profile}.patch running/ mv *.{htm,html,css,txt}.patch docs/ mv *.html.*.patch docs/ mv *.desktop.patch desktop/ rm -f messages.patch cd $WDIR exit 0 #Uncomment to review if patches are OK FOR woof-CE rm -f $WDIR/$PATCHES.tar.gz tar cvzf $PATCHES.tar.gz $PATCHES/ exit 0