Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#!/bin/rc
2
 
3
rfork e
4
 
5
 
6
smon='s/Jan/01/
7
	s/Feb/02/
8
	s/Mar/03/
9
	s/Apr/04/
10
	s/May/05/
11
	s/Jun/06/
12
	s/Jul/07/
13
	s/Aug/08/
14
	s/Sep/09/
15
	s/Oct/10/
16
	s/Nov/11/
17
	s/Dec/12/'
18
 
19
fn usage {
20
	echo 'usage: yesterday [-abcCdDs] [-[[[yy]yy]mm]dd] [-n daysago] file ...' >[1=2]
21
	exit 'usage'
22
}
23
 
24
fn Xcp {
25
	echo cp $1 $2
26
	cp $1 $2
27
}
28
 
29
fn Xdiff {
30
	echo diff $1 $2
31
	diff $1 $2
32
}
33
fn Xdiffn {
34
	echo diff -n $1 $2
35
	diff -n $1 $2
36
}
37
fn Xadiff {
38
	echo /acme/bin/adiff $1 $2
39
	/acme/bin/adiff $1 $2
40
}
41
 
42
fn Xcarefulcp {
43
	if(! cmp -s $1 $2) Xcp $1 $2
44
}
45
 
46
fn Xecho {
47
	echo $1
48
}
49
 
50
fn Xbind {
51
	echo bind $1 $2
52
	bind $1 $2
53
}
54
 
55
year=`{date|sed 's/.* //'}
56
copy=Xecho
57
last=()
58
defdump=dump
59
while(! ~ $#* 0 && ~ $1 -* && ! ~ $1 --){
60
	switch($1){
61
	case -a
62
		copy=Xadiff
63
		shift
64
	case -b
65
		copy=Xbind
66
		shift
67
	case -c
68
		copy=Xcp
69
		shift
70
	case -d
71
		copy=Xdiff
72
		shift
73
	case -D
74
		copy=Xdiffn
75
		shift
76
	case -C
77
		copy=Xcarefulcp
78
		shift
79
	case -s
80
		defdump=snap
81
		shift
82
	case -n*
83
		if(~ $1 -n){
84
			if(~ $#* 1)
85
				usage
86
			shift
87
			days=$1
88
		}
89
		if not
90
			days=`{echo $1 | sed 's/^-.//'}
91
		last=`{date `{hoc -e `{date -n} ^ '-'$days'*60*60*24'} | \
92
				sed -e 's%... (...) (..) ..:..:.. ... (....)%\3/\1\2%' -e 'y/ /0/' -e $smon}
93
		shift
94
	case -?
95
		mon=`{date|sed -e 's/^....(...).*/\1/' -e $smon}
96
		last=$year/$mon ^`{echo $1|sed 's/^-/0/'}
97
		shift
98
	case -??
99
		mon=`{date|sed -e 's/^....(...).*/\1/' -e $smon}
100
		last=$year/$mon ^`{echo $1|sed 's/^-//'}
101
		shift
102
	case -????
103
		last=$year/ ^ `{echo $1|sed 's/^-//'}
104
		shift
105
	case -??????
106
		last=`{echo $year|sed 's/..$//'} ^ `{echo $1|sed 's/^-(..)/\1\//'}
107
		shift
108
	case -????????
109
		last=`{echo $1|sed 's/^-(....)/\1\//'}
110
		shift
111
	case *
112
		usage
113
	}
114
}
115
if(! ~ $#* 0 && ~ $1 --)
116
	shift
117
 
118
if(~ $#* 0)
119
	usage
120
 
121
dir=`{pwd}
122
if(! ~ $status ''){
123
	echo 'yesterday: can''t find directory' >[1=2]
124
	exit 'pwd failed'
125
}
126
 
127
for(i){
128
	xpath=`{cleanname -d $dir -- $i}
129
	xdump=$defdump
130
	dumppath=$xpath
131
	if(~ $xpath /n/*/*){
132
		xdump=`{echo $xpath | sed 's:/n/([^/]+)/.*:\1'$defdump':'}
133
		dumppath=`{echo $xpath | sed 's:/n/[^/]+(/.*):\1:'}
134
	}
135
	if(! test -e /n/$xdump/$year)
136
		9fs $xdump
137
 
138
	if(~ $#last 0){
139
		xlast=`{ls /n/$xdump/$year|sed -n '$p'}
140
		switch($defdump){
141
		case snap
142
			xlast=`{ls $xlast|sed -n '$p'}
143
		}
144
	}
145
	if not
146
		xlast=/n/$xdump/$last
147
 
148
	if(! test -e $xlast){
149
		echo 'yesterday:' \
150
			`{echo $xlast|sed 's/.n.'$defdump'.(....).(..)(..)/\1 \2 \3/'} \
151
			'is not a backup day for' $xdump >[1=2]
152
		exit 'bad date'
153
	}
154
 
155
	$copy $xlast^$dumppath $xpath
156
}
157
exit ''