2010-08-10 19:01:37 +00:00
|
|
|
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.
|
|
|
|
|
2012-01-05 06:30:50 +00:00
|
|
|
Upstream-Status: Inappropriate [oe-specific]
|
|
|
|
|
2010-08-10 19:01:37 +00:00
|
|
|
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
|