generic-poky/meta/recipes-devtools/guilt/files/guilt-import-commit.patch

95 lines
2.9 KiB
Diff

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