guilt: import commits via git format-patch

Rather than attempting to process commits directly, it
is preferable to try dumping the change via git format-patch
to take advantage of the proper header/subject/from lines that
are generated.

If patches cannot be exported, fall back to importing 
commits via a more custom method.

Upstream-Status: Inappropriate [oe-specific]

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>

---
 guilt-import-commit |   40 +++++++++++++++++++++++++++++-----------
 1 file changed, 29 insertions(+), 11 deletions(-)

--- a/guilt-import-commit
+++ b/guilt-import-commit
@@ -20,46 +20,64 @@ fi
 disp "About to begin conversion..." >&2
 disp "Current head: `cat $GIT_DIR/refs/heads/$branch`" >&2
 
+# try git-format-patch first, if it fails fall back to internal 
+# methods.
+patches=`git-format-patch -o $GUILT_DIR/$branch $rhash`
+if [ -z "$patches" ]; then
+    need_custom_patches="1"
+fi
+
 for rev in `git rev-list $rhash`; do
+    if [ ! -z "$need_custom_patches" ]; then
 	s=`git log --pretty=oneline -1 $rev | cut -c 42-`
 
 	fname=`echo $s | sed -e "s/&/and/g" -e "s/[ :]/_/g" -e "s,[/\\],-,g" \
-			-e "s/['\\[{}]//g" -e 's/]//g' -e 's/\*/-/g' \
+			-e "s/['\\()<>[{}]//g" -e 's/]//g' -e 's/\*/-/g' \
 			-e 's/\?/-/g' | tr A-Z a-z`
 
-	disp "Converting `echo $rev | cut -c 1-8` as $fname"
+	disp "Converting `echo $rev | cut -c 1-8` as $fname.patch"
 
 	mangle_prefix=1
 	fname_base=$fname
-	while [ -f "$GUILT_DIR/$branch/$fname" ]; do
+	while [ -f "$GUILT_DIR/$branch/$fname.patch" ]; do
 		fname="$fname_base-$mangle_prefix"
 	        mangle_prefix=`expr $mangle_prefix + 1`
-		disp "Patch under that name exists...trying '$fname'"
+		disp "Patch under that name exists...trying '$fname.patch'"
 	done
 
 	(
 		do_make_header $rev
 		echo ""
 		git diff --binary $rev^..$rev
-	) > $GUILT_DIR/$branch/$fname
+	) > $GUILT_DIR/$branch/$fname.patch
 
 	# FIXME: grab the GIT_AUTHOR_DATE from the commit object and set the
 	# timestamp on the patch
 
-	# insert the patch name into the series file
-	series_insert_patch $fname
+	patches="$patches $fname.patch"
+    fi
 
-	# Only reset if the commit was on this branch
-	if head_check $rev 2> /dev/null; then
+    # Only reset if the commit was on this branch
+    if head_check $rev 2> /dev/null; then
 		# BEWARE: "git reset" ahead! Is there a way to verify that
 		# we really created a patch? - We don't want to lose any
 		# history.
 		git reset --hard $rev^ > /dev/null
-	elif [ -z "$warned" ]; then
+    elif [ -z "$warned" ]; then
 		disp "Warning: commit $rev is not the HEAD...preserving commit" >&2
 		disp "Warning: (this message is displayed only once)" >&2
 		warned=t
-	fi
+    fi
+done
+
+rpatches=`echo "$patches" | sed 's% %\n%g' | tac`
+for patch in $rpatches; do
+
+    iname=`echo $patch | sed s%$GUILT_DIR/$branch/%%`
+    echo "Inserting $iname"	
+	
+    # insert the patch name into the series file
+    series_insert_patch $iname
 done
 
 disp "Done." >&2
