#!/bin/sh setglobal OPTIONS_KEEPDASHDASH = '' setglobal OPTIONS_STUCKLONG = '' setglobal OPTIONS_SPEC = '"\ git quiltimport [options] -- n,dry-run dry run author= author name and email address for patches without any patches= path to the quilt patches series= path to the quilt series file '" setglobal SUBDIRECTORY_ON = 'Yes' source git-sh-setup setglobal dry_run = ''"" setglobal quilt_author = ''"" while test $# != 0 { match $1 { with --author shift setglobal quilt_author = $1 with -n|--dry-run setglobal dry_run = '1' with --patches shift setglobal QUILT_PATCHES = $1 with --series shift setglobal QUILT_SERIES = $1 with -- shift break with * usage } shift } # Quilt Author if test -n $quilt_author { setglobal quilt_author_name = $[expr "z$quilt_author" : 'z\(.*[^ ]\) *<.*] && setglobal quilt_author_email = $[expr "z$quilt_author" : '.*<\([^>]*\)] && test '' != $quilt_author_name && test '' != $quilt_author_email || die "malformed --author parameter" } # Quilt patch directory : $(QUILT_PATCHES:=patches) if ! test -d $QUILT_PATCHES { echo "The \"$QUILT_PATCHES\" directory does not exist." exit 1 } # Quilt series file : $(QUILT_SERIES:=$QUILT_PATCHES/series) if ! test -e $QUILT_SERIES { echo "The \"$QUILT_SERIES\" file does not exist." exit 1 } # Temporary directories setglobal tmp_dir = ""$GIT_DIR"/rebase-apply" setglobal tmp_msg = ""$tmp_dir/msg"" setglobal tmp_patch = ""$tmp_dir/patch"" setglobal tmp_info = ""$tmp_dir/info"" # Find the initial commit setglobal commit = $[git rev-parse HEAD] mkdir $tmp_dir || exit 2 while read patch_name level garbage <&3 { match $patch_name { with ''|'#'* continue } match $level { with -p* with ''|'#'* setglobal level = '' with * echo "unable to parse patch level, ignoring it." setglobal level = '' } match $garbage { with ''|'#'* with * echo "trailing garbage found in series file: $garbage" exit 1 } if ! test -f "$QUILT_PATCHES/$patch_name" { echo "$patch_name doesn't exist. Skipping." continue } echo $patch_name git mailinfo $tmp_msg $tmp_patch \ <"$QUILT_PATCHES/$patch_name" >$tmp_info || exit 3 test -s $tmp_patch || do { echo "Patch is empty. Was it split wrong?" exit 1 } # Parse the author information setglobal GIT_AUTHOR_NAME = $[sed -ne 's/Author: //p' $tmp_info] setglobal GIT_AUTHOR_EMAIL = $[sed -ne 's/Email: //p' $tmp_info] export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL while test -z $GIT_AUTHOR_EMAIL && test -z $GIT_AUTHOR_NAME { if test -n $quilt_author { setglobal GIT_AUTHOR_NAME = $quilt_author_name; setglobal GIT_AUTHOR_EMAIL = $quilt_author_email; } elif test -n $dry_run { echo "No author found in $patch_name" > !2; setglobal GIT_AUTHOR_NAME = '"dry-run-not-found'"; setglobal GIT_AUTHOR_EMAIL = '"dry-run-not-found'"; } else { echo "No author found in $patch_name" > !2; echo "---" cat $tmp_msg printf "Author: "; read patch_author echo $patch_author setglobal patch_author_name = $[expr "z$patch_author" : 'z\(.*[^ ]\) *<.*] && setglobal patch_author_email = $[expr "z$patch_author" : '.*<\([^>]*\)] && test '' != $patch_author_name && test '' != $patch_author_email && setglobal GIT_AUTHOR_NAME = $patch_author_name && setglobal GIT_AUTHOR_EMAIL = $patch_author_email } } setglobal GIT_AUTHOR_DATE = $[sed -ne 's/Date: //p' $tmp_info] setglobal SUBJECT = $[sed -ne 's/Subject: //p' $tmp_info] export GIT_AUTHOR_DATE SUBJECT if test -z $SUBJECT { setglobal SUBJECT = $[echo $patch_name | sed -e 's/.patch$//] } if test -z $dry_run { git apply --index -C1 $(level:+"$level") $tmp_patch && setglobal tree = $[git write-tree] && setglobal commit = $[ shell {echo $SUBJECT; echo; cat $tmp_msg} | git commit-tree $tree -p $commit] && git update-ref -m "quiltimport: $patch_name" HEAD $commit || exit 4 } } 3<"$QUILT_SERIES" rm -rf $tmp_dir || exit 5