From: Junio C Hamano Date: Fri, 22 Jul 2005 23:04:19 +0000 (-0700) Subject: [PATCH] tools/applymbox: allow manual fixing and continuing after a failure. X-Git-Tag: v0.99.2~41 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=3727531899aecac02c50c6580e84c627c25fcaa6;p=git.git [PATCH] tools/applymbox: allow manual fixing and continuing after a failure. With "-c .dotest/0002" flag, the applymbox command can be told to use existing .dotest/patch file after hand-fixing the patch conflicts for the second patch in the mailbox, and continue on from that message, skipping the already applied first patch in .dotest/0001. Signed-off-by: Junio C Hamano Signed-off-by: Linus Torvalds --- diff --git a/tools/applymbox b/tools/applymbox index 5ac8d2b4..bc2dbf26 100755 --- a/tools/applymbox +++ b/tools/applymbox @@ -9,20 +9,48 @@ ## You give it a mbox-format collection of emails, and it will try to ## apply them to the kernel using "applypatch" ## -## dotest [ -q ] mail_archive [Signoff_file] +## applymbox [ -c .dotest/msg-number ] [ -q ] mail_archive [Signoff_file]" ## -rm -rf .dotest -mkdir .dotest -case $1 in +## 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. - -q) touch .dotest/.query_apply - shift;; +query_apply= continue= resume=t +while case "$#" in 0) break ;; esac +do + case "$1" in + -q) query_apply=t ;; + -c) continue="$2"; resume=f; shift ;; + -*) usage ;; + *) break ;; + esac + shift +done + +case "$continue" in +'') + rm -rf .dotest + mkdir .dotest + mailsplit "$1" .dotest || exit 1 esac -mailsplit $1 .dotest || exit 1 -for i in .dotest/* + +case "$query_apply" in +t) touch .dotest/.query_apply +esac + +for i in .dotest/0* do - mailinfo .dotest/msg .dotest/patch < $i > .dotest/info || exit 1 - git-stripspace < .dotest/msg > .dotest/msg-clean + case "$resume,$continue" in + f,$i) resume=t;; + f,*) continue;; + *) + mailinfo .dotest/msg .dotest/patch <$i >.dotest/info || exit 1 + git-stripspace < .dotest/msg > .dotest/msg-clean + ;; + esac applypatch .dotest/msg-clean .dotest/patch .dotest/info "$2" ret=$? if [ $ret -ne 0 ]; then