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.