1ff8c3af2SDavid du Colombier#!/bin/rc 2603dff34SDavid du Colombierrfork e 3ff1040beSDavid du Colombier 4ff1040beSDavid du Colombierfn xchmod { 5ff1040beSDavid du Colombier chmod $* >[2]/dev/null 6ff1040beSDavid du Colombier} 7ff1040beSDavid du Colombier 8ff1040beSDavid du Colombierif(~ $#* 0 1 2){ 9ff1040beSDavid du Colombier echo 'usage: patch/create name email file... [< description]' >[1=2] 10ff8c3af2SDavid du Colombier exit usage 11ff8c3af2SDavid du Colombier} 12ff8c3af2SDavid du Colombier 13ff8c3af2SDavid du Colombierif(! echo $1 | grep -s '^[a-z_0-9.\-]+$'){ 14e059317eSDavid du Colombier echo 'bad name: [a-z0-9._\-]+ only' >[1=2] 15ff8c3af2SDavid du Colombier exit usage 16ff8c3af2SDavid du Colombier} 17ff1040beSDavid du Colombierif(! echo $2 | grep -s '^(-|[A-Za-z0-9.\-+]+@[A-Za-z0-9.\-+]+)$'){ 18ff1040beSDavid du Colombier echo 'bad email: [a-z0-9.-+] only; use ''-'' to not leave an email address.' >[1=2] 19ff1040beSDavid du Colombier exit usage 20ff1040beSDavid du Colombier} 21ff8c3af2SDavid du Colombier 22ff8c3af2SDavid du Colombierif(! test -d /n/sources/patch){ 23ff8c3af2SDavid du Colombier rfork n 24ff8c3af2SDavid du Colombier 9fs sources 25ff8c3af2SDavid du Colombier} 26ff8c3af2SDavid du Colombier 27603dff34SDavid du Colombierpatch=$1 28ff1040beSDavid du Colombieremail=$2 29ff1040beSDavid du Colombiershift 30ff1040beSDavid du Colombiershift 31603dff34SDavid du Colombierd=/n/sources/patch/$patch 32ff8c3af2SDavid du Colombierif(! mkdir $d){ 33fcdc259eSDavid du Colombier echo mkdir $d failed >[1=2] 34ff8c3af2SDavid du Colombier exit mkdir 35ff8c3af2SDavid du Colombier} 36ff1040beSDavid du Colombierif(! ~ $email -){ 37ff1040beSDavid du Colombier echo $email >$d/email 38ff1040beSDavid du Colombier} 39ff8c3af2SDavid du Colombier 40ff1040beSDavid du Colombierxchmod o-w $d 41ff8c3af2SDavid du Colombier>$d/readme 42ff8c3af2SDavid du Colombier>$d/files 43ff8c3af2SDavid du Colombier>$d/notes 44ff8c3af2SDavid du Colombierfor(i in $*){ 45ff8c3af2SDavid du Colombier i=`{cleanname -d `{pwd} $i} 46ff8c3af2SDavid du Colombier if(! test -f $i){ 47ff8c3af2SDavid du Colombier echo error: cannot find $i >[1=2] 48ff8c3af2SDavid du Colombier rm -rf $d 49ff8c3af2SDavid du Colombier exit oops 50ff8c3af2SDavid du Colombier } 51ff8c3af2SDavid du Colombier short=`{basename $i} 52ff8c3af2SDavid du Colombier uniq=$short 53ff8c3af2SDavid du Colombier n=0 54ff8c3af2SDavid du Colombier while(test -f $d/$uniq){ 55ff8c3af2SDavid du Colombier uniq=$short.$n 56ff8c3af2SDavid du Colombier n=`{echo 1+$n | hoc} 57ff8c3af2SDavid du Colombier } 58ff8c3af2SDavid du Colombier cp $i $d/$uniq 59ff8c3af2SDavid du Colombier if(test -f /n/sources/plan9/$i){ 60ff8c3af2SDavid du Colombier if(cmp -s /n/sources/plan9/$i $i) 61ff8c3af2SDavid du Colombier echo warning: new file $i does not differ from sources >[1=2] 62ff8c3af2SDavid du Colombier cp /n/sources/plan9/$i $d/$uniq.orig 63ff8c3af2SDavid du Colombier } 64ff8c3af2SDavid du Colombier if not 65ff8c3af2SDavid du Colombier echo warning: new file $i not on sources >[1=2] 66ff8c3af2SDavid du Colombier echo $i $uniq >>$d/files 67ff8c3af2SDavid du Colombier} 68*d1da931cSDavid du Colombier@{builtin cd $d && xchmod ug+rw * && xchmod a+r *} 69ff8c3af2SDavid du Colombier 704d44ba9bSDavid du Colombierif(~ `{cat /proc/$pid/fd | awk 'NR==2{print $NF}'} */dev/cons && test -w /dev/consctl){ 71ff8c3af2SDavid du Colombier >/dev/consctl { 72ff8c3af2SDavid du Colombier echo holdon 73ff8c3af2SDavid du Colombier cat >$d/readme 74ff8c3af2SDavid du Colombier } 75ff8c3af2SDavid du Colombier} 76ff8c3af2SDavid du Colombierif not 77ff8c3af2SDavid du Colombier cat >$d/readme 78ff8c3af2SDavid du Colombier 79ff8c3af2SDavid du Colombierif(! test -s $d/readme){ 80ff8c3af2SDavid du Colombier echo 'no description given; aborting' >[1=2] 81ff8c3af2SDavid du Colombier rm -rf $d 82ff8c3af2SDavid du Colombier exit oops 83ff8c3af2SDavid du Colombier} 84ff8c3af2SDavid du Colombier 85ff8c3af2SDavid du Colombierecho $d 86