xref: /plan9/rc/bin/patch/apply (revision cb8c047aa49e908a428eac8b13623e1b242fa11e)
1ff8c3af2SDavid du Colombier#!/bin/rc
2ff8c3af2SDavid du Colombier
325f7656aSDavid du Colombierrfork e
425f7656aSDavid du Colombier
5ff8c3af2SDavid du Colombierif(! ~ $#* 1){
6ff8c3af2SDavid du Colombier	echo 'usage: patch/apply patch-name' >[1=2]
7ff8c3af2SDavid du Colombier	exit usage
8ff8c3af2SDavid du Colombier}
9ff8c3af2SDavid du Colombier
10ff8c3af2SDavid du Colombierif(! test -d /n/sources/patch){
11ff8c3af2SDavid du Colombier	rfork n
12ff8c3af2SDavid du Colombier	9fs sources
13ff8c3af2SDavid du Colombier}
14ff8c3af2SDavid du Colombier
15ff8c3af2SDavid du Colombierif(! test -d /n/sources/patch/$1){
16ff8c3af2SDavid du Colombier	echo 'no such patch' /n/sources/patch/$1 >[1=2]
17ff8c3af2SDavid du Colombier	exit nopatch
18ff8c3af2SDavid du Colombier}
19ff8c3af2SDavid du Colombier
20d1da931cSDavid du Colombierbuiltin cd /n/sources/patch/$1 || exit nopatch
21ff8c3af2SDavid du Colombierif(! patch/okay .){
22ff8c3af2SDavid du Colombier	echo 'bad patch: '$status >[1=2]
23ff8c3af2SDavid du Colombier	exit badpatch
24ff8c3af2SDavid du Colombier}
25ff8c3af2SDavid du Colombier
26ff8c3af2SDavid du Colombierif(! echo >.tmp || ! rm .tmp){
27ff8c3af2SDavid du Colombier	echo no write permission >[1=2]
28ff8c3af2SDavid du Colombier	exit 'no write permission'
29ff8c3af2SDavid du Colombier}
30ff8c3af2SDavid du Colombier
31ff8c3af2SDavid du Colombierecho -n merge... >[1=2]
32ff8c3af2SDavid du Colombierfn xxx {
33375daca8SDavid du Colombier	if(! test -f $1)
34375daca8SDavid du Colombier		cp $2 $2.new
35375daca8SDavid du Colombier	if not
36ff8c3af2SDavid du Colombier		ape/diff3 -m $1 $2.orig $2 >$2.new
37ff8c3af2SDavid du Colombier	if(grep -s '^<<<<' $2.new){
38*cb8c047aSDavid du Colombier		echo conflicts merging $1';' see `{pwd}^/$2.new >[1=2]
39ff8c3af2SDavid du Colombier
40ff8c3af2SDavid du Colombier		touch failed
41ff8c3af2SDavid du Colombier	}
42ff8c3af2SDavid du Colombier}
43ff8c3af2SDavid du Colombierrm -f failed
44ff8c3af2SDavid du Colombiercat files | sed 's/^/xxx /' | rc
45ff8c3af2SDavid du Colombierif(test -f failed){
46ff8c3af2SDavid du Colombier	echo exiting without changes >[1=2]
47ff8c3af2SDavid du Colombier	exit failed
48ff8c3af2SDavid du Colombier}
49ff8c3af2SDavid du Colombier
50ff8c3af2SDavid du Colombierecho -n backup... >[1=2]
51ff8c3af2SDavid du Colombierfn xxx {
52ff8c3af2SDavid du Colombier	# echo cp $1 $2.backup
53ff8c3af2SDavid du Colombier	cp $1 $2.backup
54ff8c3af2SDavid du Colombier}
55ff8c3af2SDavid du Colombiercat files | sed 's/^/xxx /' |rc
56ff8c3af2SDavid du Colombier
57ff8c3af2SDavid du Colombierecho -n copy... >[1=2]
58ff8c3af2SDavid du Colombierfn xxx {
59ff8c3af2SDavid du Colombier	# echo cp $2.new $1
60ff8c3af2SDavid du Colombier	cp $2.new $1 || touch failed
61ff8c3af2SDavid du Colombier}
62ff8c3af2SDavid du Colombiercat files | sed 's/^/xxx /' | rc
63ff8c3af2SDavid du Colombier
64ff8c3af2SDavid du Colombierfn xxx {
65ff8c3af2SDavid du Colombier	# echo cp $2.backup $1
66ff8c3af2SDavid du Colombier	cp $2.backup $1
67ff8c3af2SDavid du Colombier}
68ff8c3af2SDavid du Colombier
69ff8c3af2SDavid du Colombierif(test -f failed){
70ff8c3af2SDavid du Colombier	echo copying failed, restoring backups >[1=2]
71ff8c3af2SDavid du Colombier	cat files | sed 's/^/xxx /' | rc
72ff8c3af2SDavid du Colombier	exit failed
73ff8c3af2SDavid du Colombier}
74ff8c3af2SDavid du Colombier
75ff8c3af2SDavid du Colombierecho >[1=2]
76ff8c3af2SDavid du Colombier
77ff8c3af2SDavid du Colombierecho to update sources: >[1=2]
78ff8c3af2SDavid du Colombiercat files | awk '{print "	update " $1 }' >[1=2]
79ff8c3af2SDavid du Colombier
80