90 lines · 1.6 KB · Text
RawDownload
#!/bin/rcrfork ne. /sys/lib/git/common.rc patchname=/tmp/git.patchname.$pidpatchfile=/tmp/git.patchfile.$pidfn sigexit{	rm -f $patchname $patchfile} gitup flagfmt='o:patchdir patchdir'; args='[query]'eval `''{aux/getflags $*} || exec aux/usage if(~ $#patchdir 1 && ! test -d $patchdir)	mkdir -p $patchdir q=$*if(~ $#q 0)	q=HEADcommits=`{git/query $q || die $status}n=1m=$#commits  # sleazy hack: we want to run# under rfork m for the web ui,# so don't error if we can't mountmntgen /mnt/scratch >[2]/dev/null || status=''for(c in $commits){	cp=`{git/query -p $c}	pp=`{git/query -p $c'~'}	fc=`$nl{git/query -c $c~ $c | sed 's/^..//'} 	@{		rfork n		cd /mnt/scratch		if(test -d $pp/tree)			bind $pp/tree a		if(test -d $cp/tree)			bind $cp/tree b				echo From: `{cat $cp/author}		echo Date: `{date -uf'WW, DD MMM YYYY hh:mm:ss Z' `{walk -em $cp/author}}		<$cp/msg awk '		NR == 1 {			n = ENVIRON["n"]			m = ENVIRON["m"]			msg=$0			if(m > 1)				patch = sprintf("[PATCH %d/%d]", n, m)			else				patch = "[PATCH]"			printf "Subject: %s %s\n\n", patch, msg						gsub("^[ 	]|[ 	]$", "", msg)			gsub("[^a-zA-Z0-9_]+", "-", msg)			printf "%.4d-%s.patch", n, msg >ENVIRON["patchname"]			next		}		{			print		}'		echo '---'		echo diff `{basename $pp} `{basename $cp}		for(f in $fc){			a=a/$f			if(! test -f $a)				a=/dev/null			b=b/$f			if(! test -f $b)				b=/dev/null			diff -ur $a $b		}		echo '-- '		echo '⑨'	} >$patchfile	if(~ $#patchdir 0){		cat $patchfile		! ~ $n $m && echo	}	if not{		f=$patchdir/`{cat $patchname}		mv $patchfile $f		echo $f	}	n=`{echo $n + 1 | bc}}exit ''