patch(1): remove bell labs patch scripts
bell labs is dead, and nobody is listening; 9front has our own patch submission proces.
This commit is contained in:
parent
8eedca7656
commit
8eb33669cd
14 changed files with 0 additions and 588 deletions
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
|
|
||||||
if(~ $#* 0){
|
|
||||||
echo 'usage: patch/applied patch-name...' >[1=2]
|
|
||||||
exit usage
|
|
||||||
}
|
|
||||||
|
|
||||||
patch/move applied $*
|
|
|
@ -1,79 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
|
|
||||||
rfork e
|
|
||||||
|
|
||||||
if(! ~ $#* 1){
|
|
||||||
echo 'usage: patch/apply patch-name' >[1=2]
|
|
||||||
exit usage
|
|
||||||
}
|
|
||||||
|
|
||||||
if(! test -d /n/sources/patch){
|
|
||||||
rfork n
|
|
||||||
9fs sources
|
|
||||||
}
|
|
||||||
|
|
||||||
if(! test -d /n/sources/patch/$1){
|
|
||||||
echo 'no such patch' /n/sources/patch/$1 >[1=2]
|
|
||||||
exit nopatch
|
|
||||||
}
|
|
||||||
|
|
||||||
builtin cd /n/sources/patch/$1 || exit nopatch
|
|
||||||
if(! patch/okay .){
|
|
||||||
echo 'bad patch: '$status >[1=2]
|
|
||||||
exit badpatch
|
|
||||||
}
|
|
||||||
|
|
||||||
if(! echo >.tmp || ! rm .tmp){
|
|
||||||
echo no write permission >[1=2]
|
|
||||||
exit 'no write permission'
|
|
||||||
}
|
|
||||||
|
|
||||||
echo -n merge... >[1=2]
|
|
||||||
fn xxx {
|
|
||||||
if(! test -f $1)
|
|
||||||
cp $2 $2.new
|
|
||||||
if not
|
|
||||||
ape/diff3 -m $1 $2.orig $2 >$2.new
|
|
||||||
if(grep -s '^<<<<' $2.new){
|
|
||||||
echo conflicts merging $1';' see `{pwd}^/$2.new >[1=2]
|
|
||||||
|
|
||||||
touch failed
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rm -f failed
|
|
||||||
cat files | sed 's/^/xxx /' | rc
|
|
||||||
if(test -f failed){
|
|
||||||
echo exiting without changes >[1=2]
|
|
||||||
exit failed
|
|
||||||
}
|
|
||||||
|
|
||||||
echo -n backup... >[1=2]
|
|
||||||
fn xxx {
|
|
||||||
# echo cp $1 $2.backup
|
|
||||||
cp $1 $2.backup
|
|
||||||
}
|
|
||||||
cat files | sed 's/^/xxx /' |rc
|
|
||||||
|
|
||||||
echo -n copy... >[1=2]
|
|
||||||
fn xxx {
|
|
||||||
# echo cp $2.new $1
|
|
||||||
cp $2.new $1 || touch failed
|
|
||||||
}
|
|
||||||
cat files | sed 's/^/xxx /' | rc
|
|
||||||
|
|
||||||
fn xxx {
|
|
||||||
# echo cp $2.backup $1
|
|
||||||
cp $2.backup $1
|
|
||||||
}
|
|
||||||
|
|
||||||
if(test -f failed){
|
|
||||||
echo copying failed, restoring backups >[1=2]
|
|
||||||
cat files | sed 's/^/xxx /' | rc
|
|
||||||
exit failed
|
|
||||||
}
|
|
||||||
|
|
||||||
echo >[1=2]
|
|
||||||
|
|
||||||
echo to update sources: >[1=2]
|
|
||||||
cat files | awk '{print " update " $1 }' >[1=2]
|
|
||||||
|
|
|
@ -1,85 +0,0 @@
|
||||||
#!/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
|
|
|
@ -1,45 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
# patch/diff [-w] patch-name
|
|
||||||
rfork e
|
|
||||||
fn usage {
|
|
||||||
echo 'usage: patch/diff [-bmnwz] patch-name' >[1=2]
|
|
||||||
exit usage
|
|
||||||
}
|
|
||||||
|
|
||||||
dopts=(-c)
|
|
||||||
while (! ~ $#* 0 && ~ $1 -*) {
|
|
||||||
switch ($1) {
|
|
||||||
case -[bmnw]
|
|
||||||
dopts=($dopts $1)
|
|
||||||
case -z
|
|
||||||
dopts=()
|
|
||||||
case *
|
|
||||||
usage
|
|
||||||
}
|
|
||||||
shift
|
|
||||||
}
|
|
||||||
if(! ~ $#* 1)
|
|
||||||
usage
|
|
||||||
|
|
||||||
if(! test -d /n/sources/patch){
|
|
||||||
rfork n
|
|
||||||
9fs sources
|
|
||||||
}
|
|
||||||
|
|
||||||
if(! test -d /n/sources/patch/$1){
|
|
||||||
echo 'no such patch' /n/sources/patch/$1 >[1=2]
|
|
||||||
exit nopatch
|
|
||||||
}
|
|
||||||
|
|
||||||
builtin cd /n/sources/patch/$1 || exit nopatch
|
|
||||||
if(! patch/okay .){
|
|
||||||
echo 'bad patch: '$status >[1=2]
|
|
||||||
exit badpatch
|
|
||||||
}
|
|
||||||
|
|
||||||
d=/n/sources/patch/$1
|
|
||||||
fn xxx {
|
|
||||||
echo $1
|
|
||||||
diff $dopts $2.orig $d/$2 | sed 's/^/ /'
|
|
||||||
}
|
|
||||||
cat files | sed 's/^/xxx /' | rc
|
|
|
@ -1,54 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
|
|
||||||
rfork e
|
|
||||||
if(! test -d /n/sources/patch){
|
|
||||||
rfork n
|
|
||||||
9fs sources
|
|
||||||
}
|
|
||||||
|
|
||||||
pref=''
|
|
||||||
builtin cd /n/sources/patch || {
|
|
||||||
echo 'can''t cd /n/sources/patch' >[1=2]
|
|
||||||
exit no-sources
|
|
||||||
}
|
|
||||||
|
|
||||||
if(~ $1 applied saved sorry maybe){
|
|
||||||
pref=$1^'/'
|
|
||||||
shift
|
|
||||||
}
|
|
||||||
if(~ $#* 0)
|
|
||||||
*=(`{
|
|
||||||
if(~ $pref *?*)
|
|
||||||
builtin cd $pref
|
|
||||||
ls -t | grep -v '^(applied|saved|sorry|maybe)$'
|
|
||||||
})
|
|
||||||
|
|
||||||
trunc=(sed 5q)
|
|
||||||
if(~ $#* 1)
|
|
||||||
trunc=cat
|
|
||||||
|
|
||||||
{
|
|
||||||
for(i in $*){
|
|
||||||
i=$pref^$i
|
|
||||||
if(test -f $i/origls)
|
|
||||||
cat $i/origls | awk '{$NF="'$i'"; print}'
|
|
||||||
if not
|
|
||||||
ls -ld $i
|
|
||||||
if(patch/okay $i){
|
|
||||||
if(test -r $i/email)
|
|
||||||
echo from `{cat $i/email}
|
|
||||||
cat $i/files | awk '{print " " $1}'
|
|
||||||
cat $i/readme | sed 's/^/ /' | $trunc
|
|
||||||
if(test -f $i/notes){
|
|
||||||
echo
|
|
||||||
cat $i/notes
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if not
|
|
||||||
echo ' 'bad patch: $status >[1=2]
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
} >/tmp/patchtmp.$pid
|
|
||||||
|
|
||||||
cat /tmp/patchtmp.$pid
|
|
||||||
rm -f /tmp/patchtmp.$pid
|
|
|
@ -1,31 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
# patch/move target patch-tree... - move patch tree(s) to target dir
|
|
||||||
rfork e
|
|
||||||
pats=/n/sources/patch
|
|
||||||
if(~ $#* 0 1){
|
|
||||||
echo 'usage: patch/move dst patch-name...' >[1=2]
|
|
||||||
exit usage
|
|
||||||
}
|
|
||||||
|
|
||||||
if(! test -d $pats){
|
|
||||||
rfork n
|
|
||||||
9fs sources
|
|
||||||
}
|
|
||||||
cd $pats
|
|
||||||
|
|
||||||
dst=$1
|
|
||||||
shift
|
|
||||||
for(src){
|
|
||||||
patbase = `{basename $src}
|
|
||||||
patdest = $dst/$patbase
|
|
||||||
if (~ $dst $src $patbase)
|
|
||||||
echo $0: skipping $src >[1=2]
|
|
||||||
if not if(! test -d $src)
|
|
||||||
echo $0: no such patch $pats/$src >[1=2]
|
|
||||||
if not if(test -d $patdest)
|
|
||||||
echo $0: already have $pats/$patdest >[1=2]
|
|
||||||
if not
|
|
||||||
ls -ldp $src >$src/origls &&
|
|
||||||
mkdir $patdest && dircp $src $patdest && rm -rf $src &&
|
|
||||||
test -s $patdest/email && patch/notify $patdest
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
|
|
||||||
rfork e
|
|
||||||
if(! ~ $#* 1){
|
|
||||||
echo 'usage: patch/note patch-name' >[1=2]
|
|
||||||
exit usage
|
|
||||||
}
|
|
||||||
|
|
||||||
if(! test -d /n/sources/patch){
|
|
||||||
rfork n
|
|
||||||
9fs sources
|
|
||||||
}
|
|
||||||
|
|
||||||
if(! test -d /n/sources/patch/$1){
|
|
||||||
echo 'no such patch' /n/sources/patch/$1 >[1=2]
|
|
||||||
exit nopatch
|
|
||||||
}
|
|
||||||
|
|
||||||
builtin cd /n/sources/patch/$1 || exit nopatch
|
|
||||||
if(! patch/okay .){
|
|
||||||
echo 'bad patch: '$status >[1=2]
|
|
||||||
exit badpatch
|
|
||||||
}
|
|
||||||
|
|
||||||
if(~ `{cat /proc/$pid/fd | awk 'NR==2{print $NF}'} */dev/cons && ~ `{ls -l /dev/consctl | awk '{print $1}'} *w*){
|
|
||||||
>/dev/consctl {
|
|
||||||
echo holdon
|
|
||||||
{echo `{date} `{cat /dev/user}
|
|
||||||
cat |sed 's/^/ /'; echo } >>notes
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if not
|
|
||||||
{echo `{date} `{cat /dev/user}
|
|
||||||
cat |sed 's/^/ /'; echo } >>notes
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
# patch/notify
|
|
||||||
rfork e
|
|
||||||
for(i)
|
|
||||||
# don't flood sys when merely shuffling patches around
|
|
||||||
if (~ $i applied/* saved/* sorry/*) {
|
|
||||||
patch/list $i | mail -s 'patch/list '^$i sys \
|
|
||||||
`{cat /n/sources/patch/$i/email}
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
|
|
||||||
rfork e
|
|
||||||
if(! ~ $#* 1){
|
|
||||||
echo usage: patch/okay dir >[1=2]
|
|
||||||
exit usage
|
|
||||||
}
|
|
||||||
|
|
||||||
i=$1
|
|
||||||
if(! test -s $i/files || ! test -s $i/readme)
|
|
||||||
exit 'missing files'
|
|
||||||
if(grep -v '^/[_a-zA-Z0-9.\-+/:]+ [_a-zA-Z0-9.\-+:]+$' $i/files)
|
|
||||||
exit 'bad file list'
|
|
||||||
exit 0
|
|
|
@ -1,19 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
|
|
||||||
rfork e
|
|
||||||
if(~ $#* 0){
|
|
||||||
echo 'usage: patch/remove patch-name...' >[1=2]
|
|
||||||
exit usage
|
|
||||||
}
|
|
||||||
|
|
||||||
if(! test -d /n/sources/patch){
|
|
||||||
rfork n
|
|
||||||
9fs sources
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i){
|
|
||||||
if(! test -d /n/sources/patch/$i)
|
|
||||||
echo 'no such patch' /n/sources/patch/$i >[1=2]
|
|
||||||
if not
|
|
||||||
rm -rf /n/sources/patch/$i
|
|
||||||
}
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
|
|
||||||
if(~ $#* 0){
|
|
||||||
echo 'usage: patch/save patch-name...' >[1=2]
|
|
||||||
exit usage
|
|
||||||
}
|
|
||||||
|
|
||||||
patch/move saved $*
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
|
|
||||||
if(~ $#* 0){
|
|
||||||
echo 'usage: patch/sorry patch-name...' >[1=2]
|
|
||||||
exit usage
|
|
||||||
}
|
|
||||||
|
|
||||||
patch/move sorry $*
|
|
|
@ -1,35 +0,0 @@
|
||||||
#!/bin/rc
|
|
||||||
|
|
||||||
rfork e
|
|
||||||
if(! ~ $#* 1){
|
|
||||||
echo 'usage: patch/undo patch-name' >[1=2]
|
|
||||||
exit usage
|
|
||||||
}
|
|
||||||
|
|
||||||
if(! test -d /n/sources/patch){
|
|
||||||
rfork n
|
|
||||||
9fs sources
|
|
||||||
}
|
|
||||||
|
|
||||||
if(! test -d /n/sources/patch/$1){
|
|
||||||
echo 'no such patch' /n/sources/patch/$1 >[1=2]
|
|
||||||
exit nopatch
|
|
||||||
}
|
|
||||||
|
|
||||||
d=$1
|
|
||||||
builtin cd /n/sources/patch/$1 || exit nopatch
|
|
||||||
if(! patch/okay .){
|
|
||||||
echo 'bad patch: '$status >[1=2]
|
|
||||||
exit badpatch
|
|
||||||
}
|
|
||||||
|
|
||||||
fn xxx {
|
|
||||||
if(cmp $2.new $1){
|
|
||||||
echo cp /n/sources/patch/$d/$2.backup $1
|
|
||||||
cp $2.backup $1
|
|
||||||
}
|
|
||||||
if not
|
|
||||||
echo $1 has changed since patch was applied! >[1=2]
|
|
||||||
}
|
|
||||||
cat files | sed 's/^/xxx /' |rc
|
|
||||||
|
|
158
sys/man/1/patch
158
sys/man/1/patch
|
@ -1,158 +0,0 @@
|
||||||
.TH PATCH 1
|
|
||||||
.SH NAME
|
|
||||||
patch \- simple patch creation and tracking system
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B patch/create
|
|
||||||
.I name
|
|
||||||
.I email
|
|
||||||
.I files ...
|
|
||||||
[
|
|
||||||
.B <
|
|
||||||
.I description
|
|
||||||
]
|
|
||||||
.PP
|
|
||||||
.B patch/list
|
|
||||||
[
|
|
||||||
.I name ...
|
|
||||||
]
|
|
||||||
.PP
|
|
||||||
.B patch/diff
|
|
||||||
.I name
|
|
||||||
.PP
|
|
||||||
.B patch/apply
|
|
||||||
.I name
|
|
||||||
.PP
|
|
||||||
.B patch/undo
|
|
||||||
.I name
|
|
||||||
.PP
|
|
||||||
.B patch/note
|
|
||||||
.I name
|
|
||||||
[
|
|
||||||
.B <
|
|
||||||
.I note
|
|
||||||
]
|
|
||||||
.SH DESCRIPTION
|
|
||||||
These scripts are a simple patch submission and tracking system
|
|
||||||
used to propose additions or changes to Plan 9.
|
|
||||||
There is no guarantee that any patch will be accepted, nor
|
|
||||||
that it will be accepted verbatim.
|
|
||||||
Each patch has a
|
|
||||||
.I name
|
|
||||||
(lowercase letters, numbers, dash, dot, and underscore only)
|
|
||||||
and is stored in
|
|
||||||
.BI /n/sources/patch/ name.
|
|
||||||
.PP
|
|
||||||
.I Patch/create
|
|
||||||
creates a new patch consisting of the changes to
|
|
||||||
the listed files from the distribution, reading
|
|
||||||
a description of the patch from standard input:
|
|
||||||
please provide an explanation of what the change is supposed to do,
|
|
||||||
some context, and a rationale for the change.
|
|
||||||
Test data or pointers to same to verify that the fix works are also welcome.
|
|
||||||
When sending a patch, follow these guidelines:
|
|
||||||
.IP • 3
|
|
||||||
Before preparing the patch, run
|
|
||||||
.I replica/pull
|
|
||||||
and base your patch on current distribution source code.
|
|
||||||
.IP •
|
|
||||||
If this is a bug fix, explain the bug clearly.
|
|
||||||
Don't assume the bug is obvious from the fix.
|
|
||||||
.IP •
|
|
||||||
If this is a new feature, explain it clearly.
|
|
||||||
Don't assume it is obvious from the change.
|
|
||||||
.IP •
|
|
||||||
Make the new code look as much like the old code as possible:
|
|
||||||
don't make gratuitous changes, and do follow the style of the old code.
|
|
||||||
See
|
|
||||||
.IR style (6)
|
|
||||||
for the canonical Plan 9 coding style.
|
|
||||||
.IP •
|
|
||||||
If your patch changes externally-visible behaviour,
|
|
||||||
update the manual page.
|
|
||||||
.PP
|
|
||||||
The
|
|
||||||
.I email
|
|
||||||
address, if not
|
|
||||||
.LR - ,
|
|
||||||
will be sent notification messages when the patch is applied, rejected,
|
|
||||||
or commented on.
|
|
||||||
If rejected, the e-mail will contain a note explaining why and
|
|
||||||
probably listing suggested changes and encouraging you to resubmit.
|
|
||||||
.PP
|
|
||||||
.I Patch/list
|
|
||||||
displays information about the named patches,
|
|
||||||
or all currently pending patches if none are specified.
|
|
||||||
.PP
|
|
||||||
.I Patch/diff
|
|
||||||
shows a patch as diffs between the original
|
|
||||||
source files and the patched source files.
|
|
||||||
.PP
|
|
||||||
.I Patch/apply
|
|
||||||
applies the patch to the current source tree.
|
|
||||||
It is intended to be run by the Plan 9 developers with
|
|
||||||
.B pie
|
|
||||||
as their root file system.
|
|
||||||
If the source has changed since the patch was
|
|
||||||
created,
|
|
||||||
.I apply
|
|
||||||
will report the conflict and not change any files.
|
|
||||||
Before changing any files,
|
|
||||||
.I patch/apply
|
|
||||||
makes backup copies of the current source tree's
|
|
||||||
files. The backups are stored in the patch directory.
|
|
||||||
.PP
|
|
||||||
.I Patch/undo
|
|
||||||
will copy the backups saved by
|
|
||||||
.I patch/apply
|
|
||||||
back into the source tree.
|
|
||||||
It will not restore a backup if the file
|
|
||||||
being replaced is not byte-identical to the one
|
|
||||||
created by
|
|
||||||
.I patch/apply.
|
|
||||||
.SH EXAMPLES
|
|
||||||
Propose a change to
|
|
||||||
.IR pwd ,
|
|
||||||
which you have modified locally:
|
|
||||||
.IP
|
|
||||||
.EX
|
|
||||||
% patch/create pwd-errors user@host.dom /sys/src/cmd/pwd.c
|
|
||||||
Fix pwd to print errors to fd 2 rather than 1.
|
|
||||||
^D
|
|
||||||
%
|
|
||||||
.EE
|
|
||||||
.PP
|
|
||||||
Then the developers at Bell Labs run
|
|
||||||
.IP
|
|
||||||
.EX
|
|
||||||
patch/diff pwd-errors
|
|
||||||
.EE
|
|
||||||
.PP
|
|
||||||
to inspect the change (possibly viewing
|
|
||||||
.B /n/sources/patch/pwd-errors/pwd.c
|
|
||||||
to see the larger context).
|
|
||||||
To make the change, they run
|
|
||||||
.IP
|
|
||||||
.EX
|
|
||||||
patch/apply pwd-errors
|
|
||||||
.EE
|
|
||||||
.LP
|
|
||||||
Otherwise they run
|
|
||||||
.IP
|
|
||||||
.EX
|
|
||||||
% patch/note pwd-errors
|
|
||||||
Pwd should definitely print errors to fd 1 because ...
|
|
||||||
^D
|
|
||||||
%
|
|
||||||
.EE
|
|
||||||
.PP
|
|
||||||
to add a note to the
|
|
||||||
.B /n/sources/pwd-errors/notes
|
|
||||||
file.
|
|
||||||
.SH FILES
|
|
||||||
.B /n/sources/patch
|
|
||||||
.SH SOURCE
|
|
||||||
.B /rc/bin/patch
|
|
||||||
.SH SEE ALSO
|
|
||||||
.IR diff (1)
|
|
||||||
.br
|
|
||||||
.B http://plan9.bell-labs.com/wiki/plan9/How_to_contribute
|
|
Loading…
Reference in a new issue