summaryrefslogtreecommitdiff
path: root/patch/patch-create-skip-unchanged/create
diff options
context:
space:
mode:
Diffstat (limited to 'patch/patch-create-skip-unchanged/create')
-rw-r--r--patch/patch-create-skip-unchanged/create91
1 files changed, 91 insertions, 0 deletions
diff --git a/patch/patch-create-skip-unchanged/create b/patch/patch-create-skip-unchanged/create
new file mode 100644
index 0000000..dd078f1
--- /dev/null
+++ b/patch/patch-create-skip-unchanged/create
@@ -0,0 +1,91 @@
+#!/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}
+ }
+ if(test -f /n/sources/plan9/$i){
+ if(cmp -s /n/sources/plan9/$i $i){
+ echo warning: skipping new file $i that does not differ from sources >[1=2]
+ }
+ if not{
+ cp /n/sources/plan9/$i $d/$uniq.orig
+ cp $i $d/$uniq
+ echo $i $uniq >>$d/files
+ }
+ }
+ if not{
+ echo warning: new file $i not on sources >[1=2]
+ cp $i $d/$uniq
+ 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