| #!/bin/sh | 
 | OPTIONS_KEEPDASHDASH= | 
 | OPTIONS_STUCKLONG= | 
 | 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 | 
 | keep-non-patch Pass -b to git mailinfo | 
 | " | 
 | SUBDIRECTORY_ON=Yes | 
 | . git-sh-setup | 
 |  | 
 | dry_run="" | 
 | quilt_author="" | 
 | while test $# != 0 | 
 | do | 
 | 	case "$1" in | 
 | 	--author) | 
 | 		shift | 
 | 		quilt_author="$1" | 
 | 		;; | 
 | 	-n|--dry-run) | 
 | 		dry_run=1 | 
 | 		;; | 
 | 	--patches) | 
 | 		shift | 
 | 		QUILT_PATCHES="$1" | 
 | 		;; | 
 | 	--series) | 
 | 		shift | 
 | 		QUILT_SERIES="$1" | 
 | 		;; | 
 | 	--keep-non-patch) | 
 | 		MAILINFO_OPT="-b" | 
 | 		;; | 
 | 	--) | 
 | 		shift | 
 | 		break;; | 
 | 	*) | 
 | 		usage | 
 | 		;; | 
 | 	esac | 
 | 	shift | 
 | done | 
 |  | 
 | # Quilt Author | 
 | if [ -n "$quilt_author" ] ; then | 
 | 	quilt_author_name=$(expr "z$quilt_author" : 'z\(.*[^ ]\) *<.*') && | 
 | 	quilt_author_email=$(expr "z$quilt_author" : '.*<\([^>]*\)') && | 
 | 	test '' != "$quilt_author_name" && | 
 | 	test '' != "$quilt_author_email" || | 
 | 	die "malformed --author parameter" | 
 | fi | 
 |  | 
 | # Quilt patch directory | 
 | : ${QUILT_PATCHES:=patches} | 
 | if ! [ -d "$QUILT_PATCHES" ] ; then | 
 | 	echo "The \"$QUILT_PATCHES\" directory does not exist." | 
 | 	exit 1 | 
 | fi | 
 |  | 
 | # Quilt series file | 
 | : ${QUILT_SERIES:=$QUILT_PATCHES/series} | 
 | if ! [ -e "$QUILT_SERIES" ] ; then | 
 | 	echo "The \"$QUILT_SERIES\" file does not exist." | 
 | 	exit 1 | 
 | fi | 
 |  | 
 | # Temporary directories | 
 | tmp_dir="$GIT_DIR"/rebase-apply | 
 | tmp_msg="$tmp_dir/msg" | 
 | tmp_patch="$tmp_dir/patch" | 
 | tmp_info="$tmp_dir/info" | 
 |  | 
 |  | 
 | # Find the initial commit | 
 | commit=$(git rev-parse HEAD) | 
 |  | 
 | mkdir $tmp_dir || exit 2 | 
 | while read patch_name level garbage <&3 | 
 | 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 | 
 | 	echo $patch_name | 
 | 	git mailinfo $MAILINFO_OPT "$tmp_msg" "$tmp_patch" \ | 
 | 		<"$QUILT_PATCHES/$patch_name" >"$tmp_info" || exit 3 | 
 | 	test -s "$tmp_patch" || { | 
 | 		echo "Patch is empty.  Was it split wrong?" | 
 | 		exit 1 | 
 | 	} | 
 |  | 
 | 	# Parse the author information | 
 | 	GIT_AUTHOR_NAME=$(sed -ne 's/Author: //p' "$tmp_info") | 
 | 	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" ; do | 
 | 		if [ -n "$quilt_author" ] ; then | 
 | 			GIT_AUTHOR_NAME="$quilt_author_name"; | 
 | 			GIT_AUTHOR_EMAIL="$quilt_author_email"; | 
 | 		elif [ -n "$dry_run" ]; then | 
 | 			echo "No author found in $patch_name" >&2; | 
 | 			GIT_AUTHOR_NAME="dry-run-not-found"; | 
 | 			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" | 
 |  | 
 | 			patch_author_name=$(expr "z$patch_author" : 'z\(.*[^ ]\) *<.*') && | 
 | 			patch_author_email=$(expr "z$patch_author" : '.*<\([^>]*\)') && | 
 | 			test '' != "$patch_author_name" && | 
 | 			test '' != "$patch_author_email" && | 
 | 			GIT_AUTHOR_NAME="$patch_author_name" && | 
 | 			GIT_AUTHOR_EMAIL="$patch_author_email" | 
 | 		fi | 
 | 	done | 
 | 	GIT_AUTHOR_DATE=$(sed -ne 's/Date: //p' "$tmp_info") | 
 | 	SUBJECT=$(sed -ne 's/Subject: //p' "$tmp_info") | 
 | 	export GIT_AUTHOR_DATE SUBJECT | 
 | 	if [ -z "$SUBJECT" ] ; then | 
 | 		SUBJECT=$(echo $patch_name | sed -e 's/.patch$//') | 
 | 	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 | 
 | 	fi | 
 | done 3<"$QUILT_SERIES" | 
 | rm -rf $tmp_dir || exit 5 |