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.
