summaryrefslogtreecommitdiff
path: root/patch/patch-create-skip-unchanged
diff options
context:
space:
mode:
Diffstat (limited to 'patch/patch-create-skip-unchanged')
-rw-r--r--patch/patch-create-skip-unchanged/create91
-rwxr-xr-xpatch/patch-create-skip-unchanged/create.orig85
-rw-r--r--patch/patch-create-skip-unchanged/email1
-rw-r--r--patch/patch-create-skip-unchanged/files1
-rw-r--r--patch/patch-create-skip-unchanged/notes0
-rw-r--r--patch/patch-create-skip-unchanged/readme3
6 files changed, 181 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
diff --git a/patch/patch-create-skip-unchanged/create.orig b/patch/patch-create-skip-unchanged/create.orig
new file mode 100755
index 0000000..55e659a
--- /dev/null
+++ b/patch/patch-create-skip-unchanged/create.orig
@@ -0,0 +1,85 @@
+#!/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
diff --git a/patch/patch-create-skip-unchanged/email b/patch/patch-create-skip-unchanged/email
new file mode 100644
index 0000000..191feb6
--- /dev/null
+++ b/patch/patch-create-skip-unchanged/email
@@ -0,0 +1 @@
+john@ankarstrom.se
diff --git a/patch/patch-create-skip-unchanged/files b/patch/patch-create-skip-unchanged/files
new file mode 100644
index 0000000..5d6e99c
--- /dev/null
+++ b/patch/patch-create-skip-unchanged/files
@@ -0,0 +1 @@
+/rc/bin/patch/create create
diff --git a/patch/patch-create-skip-unchanged/notes b/patch/patch-create-skip-unchanged/notes
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/patch/patch-create-skip-unchanged/notes
diff --git a/patch/patch-create-skip-unchanged/readme b/patch/patch-create-skip-unchanged/readme
new file mode 100644
index 0000000..a3e5990
--- /dev/null
+++ b/patch/patch-create-skip-unchanged/readme
@@ -0,0 +1,3 @@
+Skip unchanged files when creating patch
+
+I don't see any point in including unchanged files.