diff options
author | John Ankarström <john@ankarstrom.se> | 2021-01-28 21:33:30 +0000 |
---|---|---|
committer | John Ankarström <john@ankarstrom.se> | 2021-01-28 21:33:30 +0000 |
commit | 51b5b02f52cc6f314029f3f2fe97afdc26ba0f25 (patch) | |
tree | 711d1efadeb78ad9b2d9f7b629350358838bc626 /patch/patch-create-skip-unchanged/create | |
parent | f3fd330cddade1c66d0f101d5cc6f657c4cd1bb6 (diff) | |
download | plan9-51b5b02f52cc6f314029f3f2fe97afdc26ba0f25.tar.gz |
Add various patches
Diffstat (limited to 'patch/patch-create-skip-unchanged/create')
-rw-r--r-- | patch/patch-create-skip-unchanged/create | 91 |
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 |