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 --- 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