xref: /plan9/rc/bin/yesterday (revision 41fe996ad1ef7168ab61531223f4e75c6cf225c2)
1#!/bin/rc
2
3rfork e
4
5
6smon='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
19fn usage {
20	echo 'usage: yesterday [-abcCdDs] [-[[[yy]yy]mm]dd] [-n daysago] file ...' >[1=2]
21	exit 'usage'
22}
23
24fn Xcp {
25	echo cp $1 $2
26	cp $1 $2
27}
28
29fn Xdiff {
30	echo diff $1 $2
31	diff $1 $2
32}
33fn Xdiffn {
34	echo diff -n $1 $2
35	diff -n $1 $2
36}
37fn Xadiff {
38	echo /acme/bin/adiff $1 $2
39	/acme/bin/adiff $1 $2
40}
41
42fn Xcarefulcp {
43	if(! cmp -s $1 $2) Xcp $1 $2
44}
45
46fn Xecho {
47	echo $1
48}
49
50fn Xbind {
51	echo bind $1 $2
52	bind $1 $2
53}
54
55year=`{date|sed 's/.* //'}
56copy=Xecho
57last=()
58defdump=dump
59while(! ~ $#* 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}
115if(! ~ $#* 0 && ~ $1 --)
116	shift
117
118if(~ $#* 0)
119	usage
120
121dir=`{pwd}
122if(! ~ $status ''){
123	echo 'yesterday: can''t find directory' >[1=2]
124	exit 'pwd failed'
125}
126
127for(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}
157exit ''
158