From: Uwe Kleine-König Date: Fri, 20 Mar 2009 19:18:03 GMT Subject: [PATCH] quiltimport: use quilt to do patch/series parsing and application Message-ID: <1237576683-5516-1-git-send-email-u.kleine-koenig@pengutronix.de> In-Reply-To: <20090320190617.GA28784@pengutronix.de> quilt supports packed patches that are not recognized by quiltimport. Instead of adding this feature explicitly, use quilt to do the dirty work. Signed-off-by: Uwe Kleine-König Cc: Dan Nicholson Cc: Eric W. Biederman Cc: Gerrit Pape Cc: Johannes Schindelin Cc: Junio C Hamano Cc: Pierre Habouzit --- Hello, note I didn't test it deeply, but I succeeded to import the preempt-rt patch. Things that might be worth testing are: missing patches referenced in series patch conflicts Best regards Uwe git-quiltimport.sh | 51 ++++++++++++++++++++++++--------------------------- 1 files changed, 24 insertions(+), 27 deletions(-) diff --git a/git-quiltimport.sh b/git-quiltimport.sh index 9a6ba2b..8b76682 100755 --- a/git-quiltimport.sh +++ b/git-quiltimport.sh @@ -51,6 +51,7 @@ if ! [ -d "$QUILT_PATCHES" ] ; then echo "The \"$QUILT_PATCHES\" directory does not exist." exit 1 fi +export QUILT_PATCHES # Temporary directories tmp_dir="$GIT_DIR"/rebase-apply @@ -62,31 +63,23 @@ tmp_info="$tmp_dir/info" # Find the intial commit commit=$(git rev-parse HEAD) +# TODO: assert wc == index == HEAD +# TODO: assert .pc doesn't exist + +# detach HEAD +git checkout -q "$commit" + mkdir $tmp_dir || exit 2 -while read patch_name level garbage <&3 +while quilt unapplied > /dev/null do - case "$patch_name" in ''|'#'*) continue;; esac - case "$level" in - -p*) ;; - ''|'#'*) - level=;; - *) - echo "unable to parse patch level, ignoring it." - level=;; - esac - case "$garbage" in - ''|'#'*);; - *) - echo "trailing garbage found in series file: $garbage" - exit 1;; - esac - if ! [ -f "$QUILT_PATCHES/$patch_name" ] ; then - echo "$patch_name doesn't exist. Skipping." - continue - fi + # apply patch + quilt push || exit 3 + + patch_name="$(quilt top)"; + echo $patch_name - git mailinfo "$tmp_msg" "$tmp_patch" \ - <"$QUILT_PATCHES/$patch_name" >"$tmp_info" || exit 3 + (quilt header; echo "---") | git mailinfo "$tmp_msg" "$tmp_patch" \ + >"$tmp_info" || exit 3 test -s "$tmp_patch" || { echo "Patch is empty. Was it split wrong?" exit 1 @@ -129,10 +122,14 @@ do fi if [ -z "$dry_run" ] ; then - git apply --index -C1 ${level:+"$level"} "$tmp_patch" && - tree=$(git write-tree) && - commit=$( (echo "$SUBJECT"; echo; cat "$tmp_msg") | git commit-tree $tree -p $commit) && - git update-ref -m "quiltimport: $patch_name" HEAD $commit || exit 4 + quilt files | git update-index --add --remove --stdin && + (echo "$SUBJECT"; echo; cat "$tmp_msg") | git commit -F - || + exit 4 fi -done 3<"$QUILT_PATCHES/series" +done + +if [ -n "$dry_run" ] ; then + quilt pop -a; +fi + rm -rf $tmp_dir || exit 5 -- 1.6.2