85 lines · 1.5 KB · Text
RawDownload
#!/bin/rcrfork e fn xchmod { 	chmod $* >[2]/dev/null} if(~ $#* 0 1 2){	echo 'usage: patch/create name email file... [< description]' >[1=2]	exit usage} if(! echo $1 | grep -s '^[a-z_0-9.\-]+$'){	echo 'bad name: [a-z0-9._\-]+ only' >[1=2]	exit usage}if(! echo $2 | grep -s '^(-|[A-Za-z0-9.\-+]+@[A-Za-z0-9.\-+]+)$'){	echo 'bad email: [a-z0-9.-+] only; use ''-'' to not leave an email address.' >[1=2]	exit usage} if(! test -d /n/sources/patch){	rfork n	9fs sources} patch=$1email=$2shiftshiftd=/n/sources/patch/$patchif(! mkdir $d){	echo mkdir $d failed >[1=2]	exit mkdir}if(! ~ $email -){	echo $email >$d/email} xchmod o-w $d>$d/readme>$d/files>$d/notesfor(i in $*){	i=`{cleanname -d `{pwd} $i}	if(! test -f $i){		echo error: cannot find $i >[1=2]		rm -rf $d		exit oops	}	short=`{basename $i}	uniq=$short	n=0	while(test -f $d/$uniq){		uniq=$short.$n		n=`{echo 1+$n | hoc}	}	cp $i $d/$uniq	if(test -f /n/sources/plan9/$i){		if(cmp -s /n/sources/plan9/$i $i)			echo warning: new file $i does not differ from sources >[1=2]		cp /n/sources/plan9/$i $d/$uniq.orig	}	if not		echo warning: new file $i not on sources >[1=2]	echo $i $uniq >>$d/files}@{builtin cd $d && xchmod ug+rw * && xchmod a+r *} if(~ `{cat /proc/$pid/fd | awk 'NR==2{print $NF}'} */dev/cons && test -w /dev/consctl){	>/dev/consctl {		echo holdon		cat >$d/readme	}}if not	cat >$d/readme if(! test -s $d/readme){	echo 'no description given; aborting' >[1=2]	rm -rf $d	exit oops} echo $d