patchprep

I posted before about how I get a patch ready for code review. Since I now also work on the Dogtag PKI project, I’ve extend the script to included configuration information from the projects .git/config.

Here is the updated script

#!/bin/bash -x
. $HOME/bin/patchprep.conf
NUMPATCHES=$(( $1 ))

#initialize
[ -f $NUMFILE ] || echo 0 > $NUMFILE

#evaluate as a number
NEXTNUM=$(( `cat $NUMFILE` ))

mkdir -p $SHIPDIR
mkdir -p $PREPDIR

pushd $PROJ_DIR
git format-patch  -M -C --patience --full-index  --start-number $NEXTNUM  -o $PREPDIR  -$NUMPATCHES
pushd $PREPDIR
for PATCH in *patch
do
        mv $PATCH $PROJECT-$USERNAME-$PATCH
done

popd
mv $PREPDIR/*patch $SHIPDIR
echo $SHIPDIR/$PROJECT-$USERNAME-$PATCH

NEXTNUM=$(( $NUMPATCHES + $NEXTNUM ))

echo $NEXTNUM >  $PREPDIR/nextnumber

popd

with patchprep.conf being common code used for this script and the patchupdate script:

PROJECT=`git config --get-all patching.project`
USERNAME=`git config --get-all patching.username`
PREPDIR=$HOME/Documents/$PROJECT/prep
SHIPDIR=$HOME/Documents/$PROJECT/patches/$USERNAME
NUMFILE=$PREPDIR/nextnumber
PROJ_DIR=`git config --get-all patching.dir`

This is configuration information held in .git/config for Dogtag pki

[patching]
        username = admiyo
        project = pki
        dir = /home/ayoung/devel/workspace/pki

To run it

patchprep 1

If you need to update an existing patch:

patchupdate 1

Which is:

#!/bin/bash -x
. $HOME/bin/patchprep.conf

NUMPATCHES=$(( $1 ))

pushd $PROJ_DIR
git format-patch  -M -C --patience --full-index   -o $PREPDIR  -$NUMPATCHES
pushd $PREPDIR
for PATCH in *patch
do
        PATCH_DESCRIPTION=${PATCH:5}
        NEXT=1
        for PREV_PATCH in `find  $SHIPDIR -name \*$PATCH_DESCRIPTION `
        do
                NUMBER=${PREV_PATCH%%-$PATCH_DESCRIPTION}
                NUMBER=${NUMBER##$SHIPDIR/$PROJECT-$USERNAME-}
                if [ ${#NUMBER} -gt 4 ]
                then
                        SEQ=${NUMBER:5}
                        NUMBER=${NUMBER:0:4}
                        [ $SEQ -ge $NEXT ] && NEXT=$(( SEQ + 1))
                fi
        done

        mv $PATCH $PROJECT-$USERNAME-$NUMBER-$NEXT-$PATCH_DESCRIPTION
done

popd
mv $PREPDIR/*patch $SHIPDIR

Here’s a typical session.

[ayoung@ayoung pki]$ patchprep 1
~/devel/workspace/pki ~/devel/workspace/pki
/home/ayoung/Documents/pki/prep/0008-Remove-unused-variable-and-import.patch
~/Documents/pki/prep ~/devel/workspace/pki ~/devel/workspace/pki
~/devel/workspace/pki ~/devel/workspace/pki
/home/ayoung/Documents/pki/patches/admiyo/pki-admiyo-0008-Remove-unused-variable-and-import.patch
~/devel/workspace/pki

I like printing out the path to the final patch file, as I often need it for emailing out to the list.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.