summaryrefslogtreecommitdiff
path: root/git-applymbox.sh
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-09-08 00:26:23 (GMT)
committerJunio C Hamano <junkio@cox.net>2005-09-08 00:45:20 (GMT)
commit215a7ad1ef790467a4cd3f0dcffbd6e5f04c38f7 (patch)
tree6bc7aa4f652d0ef49108d9e30a7ea7fbf8e44639 /git-applymbox.sh
parent99977bd5fdeabbd0608a70e9411c243007ec4ea2 (diff)
downloadgit-215a7ad1ef790467a4cd3f0dcffbd6e5f04c38f7.zip
git-215a7ad1ef790467a4cd3f0dcffbd6e5f04c38f7.tar.gz
git-215a7ad1ef790467a4cd3f0dcffbd6e5f04c38f7.tar.bz2
Big tool rename.
As promised, this is the "big tool rename" patch. The primary differences since 0.99.6 are: (1) git-*-script are no more. The commands installed do not have any such suffix so users do not have to remember if something is implemented as a shell script or not. (2) Many command names with 'cache' in them are renamed with 'index' if that is what they mean. There are backward compatibility symblic links so that you and Porcelains can keep using the old names, but the backward compatibility support is expected to be removed in the near future. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-applymbox.sh')
-rwxr-xr-xgit-applymbox.sh109
1 files changed, 109 insertions, 0 deletions
diff --git a/git-applymbox.sh b/git-applymbox.sh
new file mode 100755
index 0000000..e2bfd02
--- /dev/null
+++ b/git-applymbox.sh
@@ -0,0 +1,109 @@
+#!/bin/sh
+##
+## "dotest" is my stupid name for my patch-application script, which
+## I never got around to renaming after I tested it. We're now on the
+## second generation of scripts, still called "dotest".
+##
+## Update: Ryan Anderson finally shamed me into naming this "applymbox".
+##
+## You give it a mbox-format collection of emails, and it will try to
+## apply them to the kernel using "applypatch"
+##
+## applymbox [-u] [-k] [-q] (-c .dotest/msg-number | mail_archive) [Signoff_file]"
+##
+## The patch application may fail in the middle. In which case:
+## (1) look at .dotest/patch and fix it up to apply
+## (2) re-run applymbox with -c .dotest/msg-number for the current one.
+## Pay a special attention to the commit log message if you do this and
+## use a Signoff_file, because applypatch wants to append the sign-off
+## message to msg-clean every time it is run.
+
+. git-sh-setup || die "Not a git archive"
+
+usage () {
+ echo >&2 "applymbox [-u] [-k] [-q] (-c .dotest/<num> | mbox) [signoff]"
+ exit 1
+}
+
+keep_subject= query_apply= continue= utf8= resume=t
+while case "$#" in 0) break ;; esac
+do
+ case "$1" in
+ -u) utf8=-u ;;
+ -k) keep_subject=-k ;;
+ -q) query_apply=t ;;
+ -c) continue="$2"; resume=f; shift ;;
+ -*) usage ;;
+ *) break ;;
+ esac
+ shift
+done
+
+case "$continue" in
+'')
+ rm -rf .dotest
+ mkdir .dotest
+ git-mailsplit "$1" .dotest || exit 1
+ shift
+esac
+
+files=$(git-diff-index --cached --name-only HEAD) || exit
+if [ "$files" ]; then
+ echo "Dirty index: cannot apply patches (dirty: $files)" >&2
+ exit 1
+fi
+
+case "$query_apply" in
+t) touch .dotest/.query_apply
+esac
+case "$keep_subject" in
+-k) : >.dotest/.keep_subject
+esac
+
+signoff="$1"
+set x .dotest/0*
+shift
+while case "$#" in 0) break;; esac
+do
+ i="$1"
+ case "$resume,$continue" in
+ f,$i) resume=t;;
+ f,*) shift
+ continue;;
+ *)
+ git-mailinfo $keep_subject $utf8 \
+ .dotest/msg .dotest/patch <$i >.dotest/info || exit 1
+ git-stripspace < .dotest/msg > .dotest/msg-clean
+ ;;
+ esac
+ while :; # for fixing up and retry
+ do
+ git-applypatch .dotest/msg-clean .dotest/patch .dotest/info "$signoff"
+ case "$?" in
+ 0 | 2 )
+ # 2 is a special exit code from applypatch to indicate that
+ # the patch wasn't applied, but continue anyway
+ ;;
+ *)
+ ret=$?
+ if test -f .dotest/.query_apply
+ then
+ echo >&2 "* Patch failed."
+ echo >&2 "* You could fix it up in your editor and"
+ echo >&2 " retry. If you want to do so, say yes here"
+ echo >&2 " AFTER fixing .dotest/patch up."
+ echo >&2 -n "Retry [y/N]? "
+ read yesno
+ case "$yesno" in
+ [Yy]*)
+ continue ;;
+ esac
+ fi
+ exit $ret
+ esac
+ break
+ done
+ shift
+done
+# return to pristine
+rm -fr .dotest