110 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
BASE=$1; shift
 | 
						|
 | 
						|
usage() {
 | 
						|
	echo "Usage: $0 NNN <file>..."
 | 
						|
	exit 1
 | 
						|
}
 | 
						|
 | 
						|
check_number() {
 | 
						|
	case "$1" in
 | 
						|
		[0-9][0-9][0-9]) return 0;;
 | 
						|
	esac
 | 
						|
	return 1;
 | 
						|
}
 | 
						|
 | 
						|
patch_header()
 | 
						|
{
 | 
						|
	awk '
 | 
						|
	/^(---|\*\*\*|Index:)[ \t][^ \t]|^diff -/ \
 | 
						|
		{ exit }
 | 
						|
		{ print }
 | 
						|
	'
 | 
						|
}
 | 
						|
 | 
						|
strip_diffstat()
 | 
						|
{
 | 
						|
	awk '
 | 
						|
	/#? .* \| / \
 | 
						|
		{ eat = eat $0 "\n"
 | 
						|
		  next }
 | 
						|
	/^#? .* files? changed(, .* insertions?\(\+\))?(, .* deletions?\(-\))?/ \
 | 
						|
		{ eat = ""
 | 
						|
		  next }
 | 
						|
		{ print eat $0
 | 
						|
		  eat = "" }
 | 
						|
	'
 | 
						|
}
 | 
						|
 | 
						|
strip_trailing_whitespace() {
 | 
						|
	sed -e 's:[ '$'\t'']*$::'
 | 
						|
}
 | 
						|
 | 
						|
fixup_header() {
 | 
						|
	awk '
 | 
						|
		/^From / { next }
 | 
						|
		/^Subject: / {
 | 
						|
			sub("Subject: \\[[^\]]*\\]", "Subject: [PATCH]")
 | 
						|
		}
 | 
						|
		{ print }
 | 
						|
	'
 | 
						|
}
 | 
						|
 | 
						|
check_number "$BASE" || usage
 | 
						|
 | 
						|
quilt series > /dev/null || {
 | 
						|
	echo "Not in quilt directory"
 | 
						|
	exit 2
 | 
						|
}
 | 
						|
 | 
						|
get_next() {
 | 
						|
	NEW=$BASE
 | 
						|
	quilt series | while read CUR; do
 | 
						|
		[ -n "$CUR" ] || break
 | 
						|
		CUR=${CUR%%-*}
 | 
						|
		check_number "$CUR" || continue
 | 
						|
		[ "$CUR" -lt "$NEW" ] && continue
 | 
						|
		[ "$CUR" -ge "$(($BASE + 100))" ] && continue
 | 
						|
		NEW="$(($CUR + 1))"
 | 
						|
		echo $NEW
 | 
						|
	done | tail -n1
 | 
						|
}
 | 
						|
 | 
						|
CUR=`get_next`
 | 
						|
CUR="${CUR:-$BASE}"
 | 
						|
 | 
						|
while [ -n "$1" ]; do
 | 
						|
	FILE="$1"; shift
 | 
						|
	NAME="$(basename $FILE)"
 | 
						|
	NAME="${NAME#[0-9]*-}"
 | 
						|
	echo -n "Processing patch $NAME: "
 | 
						|
 | 
						|
	[ -e "$FILE" ] || {
 | 
						|
		echo "file $FILE not found"
 | 
						|
		exit 1
 | 
						|
	}
 | 
						|
 | 
						|
	grep -qE "$NAME$" patches/series && {
 | 
						|
		echo "already applied"
 | 
						|
		continue
 | 
						|
	}
 | 
						|
 | 
						|
	quilt new "$CUR-$NAME" || exit 1
 | 
						|
	patch_header < "$FILE" |
 | 
						|
		strip_diffstat |
 | 
						|
		strip_trailing_whitespace |
 | 
						|
		fixup_header > "patches/$CUR-$NAME"
 | 
						|
 | 
						|
	quilt fold < "$FILE" || {
 | 
						|
		cp "$FILE" ./cur_patch
 | 
						|
		echo "patch $FILE failed to apply, copied to ./cur_patch"
 | 
						|
		exit 1
 | 
						|
	}
 | 
						|
 | 
						|
	quilt refresh -p ab --no-index --no-timestamps
 | 
						|
 | 
						|
	CUR="$(($CUR + 1))"
 | 
						|
done
 | 
						|
 | 
						|
exit 0
 |