12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #!/bin/rc
- rfork 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=$1
- email=$2
- shift
- shift
- d=/n/sources/patch/$patch
- if(! 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/notes
- for(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
|