xref: /plan9-contrib/rc/bin/yesterday (revision 41fe996ad1ef7168ab61531223f4e75c6cf225c2)
13e12c5d1SDavid du Colombier#!/bin/rc
27dd7cddfSDavid du Colombier
37dd7cddfSDavid du Colombierrfork e
4f8e525acSDavid du Colombier
57dd7cddfSDavid du Colombier
67dd7cddfSDavid du Colombiersmon='s/Jan/01/
77dd7cddfSDavid du Colombier	s/Feb/02/
87dd7cddfSDavid du Colombier	s/Mar/03/
97dd7cddfSDavid du Colombier	s/Apr/04/
107dd7cddfSDavid du Colombier	s/May/05/
117dd7cddfSDavid du Colombier	s/Jun/06/
127dd7cddfSDavid du Colombier	s/Jul/07/
137dd7cddfSDavid du Colombier	s/Aug/08/
147dd7cddfSDavid du Colombier	s/Sep/09/
157dd7cddfSDavid du Colombier	s/Oct/10/
167dd7cddfSDavid du Colombier	s/Nov/11/
177dd7cddfSDavid du Colombier	s/Dec/12/'
183e12c5d1SDavid du Colombier
193e12c5d1SDavid du Colombierfn usage {
202eaa3c3aSDavid du Colombier	echo 'usage: yesterday [-abcCdDs] [-[[[yy]yy]mm]dd] [-n daysago] file ...' >[1=2]
213e12c5d1SDavid du Colombier	exit 'usage'
223e12c5d1SDavid du Colombier}
233e12c5d1SDavid du Colombier
247dd7cddfSDavid du Colombierfn Xcp {
257dd7cddfSDavid du Colombier	echo cp $1 $2
267dd7cddfSDavid du Colombier	cp $1 $2
273e12c5d1SDavid du Colombier}
287dd7cddfSDavid du Colombier
297dd7cddfSDavid du Colombierfn Xdiff {
30*41fe996aSDavid du Colombier	echo diff $1 $2
31*41fe996aSDavid du Colombier	diff $1 $2
327dd7cddfSDavid du Colombier}
337dd7cddfSDavid du Colombierfn Xdiffn {
347dd7cddfSDavid du Colombier	echo diff -n $1 $2
357dd7cddfSDavid du Colombier	diff -n $1 $2
367dd7cddfSDavid du Colombier}
377dd7cddfSDavid du Colombierfn Xadiff {
387dd7cddfSDavid du Colombier	echo /acme/bin/adiff $1 $2
397dd7cddfSDavid du Colombier	/acme/bin/adiff $1 $2
407dd7cddfSDavid du Colombier}
417dd7cddfSDavid du Colombier
427dd7cddfSDavid du Colombierfn Xcarefulcp {
437dd7cddfSDavid du Colombier	if(! cmp -s $1 $2) Xcp $1 $2
447dd7cddfSDavid du Colombier}
457dd7cddfSDavid du Colombier
467dd7cddfSDavid du Colombierfn Xecho {
477dd7cddfSDavid du Colombier	echo $1
487dd7cddfSDavid du Colombier}
497dd7cddfSDavid du Colombier
507dd7cddfSDavid du Colombierfn Xbind {
517dd7cddfSDavid du Colombier	echo bind $1 $2
527dd7cddfSDavid du Colombier	bind $1 $2
537dd7cddfSDavid du Colombier}
547dd7cddfSDavid du Colombier
557dd7cddfSDavid du Colombieryear=`{date|sed 's/.* //'}
567dd7cddfSDavid du Colombiercopy=Xecho
577dd7cddfSDavid du Colombierlast=()
5840ef9009SDavid du Colombierdefdump=dump
597dd7cddfSDavid du Colombierwhile(! ~ $#* 0 && ~ $1 -* && ! ~ $1 --){
603e12c5d1SDavid du Colombier	switch($1){
617dd7cddfSDavid du Colombier	case -a
627dd7cddfSDavid du Colombier		copy=Xadiff
637dd7cddfSDavid du Colombier		shift
647dd7cddfSDavid du Colombier	case -b
657dd7cddfSDavid du Colombier		copy=Xbind
667dd7cddfSDavid du Colombier		shift
677dd7cddfSDavid du Colombier	case -c
687dd7cddfSDavid du Colombier		copy=Xcp
697dd7cddfSDavid du Colombier		shift
707dd7cddfSDavid du Colombier	case -d
717dd7cddfSDavid du Colombier		copy=Xdiff
727dd7cddfSDavid du Colombier		shift
737dd7cddfSDavid du Colombier	case -D
747dd7cddfSDavid du Colombier		copy=Xdiffn
757dd7cddfSDavid du Colombier		shift
767dd7cddfSDavid du Colombier	case -C
777dd7cddfSDavid du Colombier		copy=Xcarefulcp
787dd7cddfSDavid du Colombier		shift
7940ef9009SDavid du Colombier	case -s
8040ef9009SDavid du Colombier		defdump=snap
8140ef9009SDavid du Colombier		shift
827dd7cddfSDavid du Colombier	case -n*
837dd7cddfSDavid du Colombier		if(~ $1 -n){
847dd7cddfSDavid du Colombier			if(~ $#* 1)
857dd7cddfSDavid du Colombier				usage
867dd7cddfSDavid du Colombier			shift
877dd7cddfSDavid du Colombier			days=$1
887dd7cddfSDavid du Colombier		}
897dd7cddfSDavid du Colombier		if not
907dd7cddfSDavid du Colombier			days=`{echo $1 | sed 's/^-.//'}
917dd7cddfSDavid du Colombier		last=`{date `{hoc -e `{date -n} ^ '-'$days'*60*60*24'} | \
92f8e525acSDavid du Colombier				sed -e 's%... (...) (..) ..:..:.. ... (....)%\3/\1\2%' -e 'y/ /0/' -e $smon}
937dd7cddfSDavid du Colombier		shift
94219b2ee8SDavid du Colombier	case -?
957dd7cddfSDavid du Colombier		mon=`{date|sed -e 's/^....(...).*/\1/' -e $smon}
96f8e525acSDavid du Colombier		last=$year/$mon ^`{echo $1|sed 's/^-/0/'}
97219b2ee8SDavid du Colombier		shift
983e12c5d1SDavid du Colombier	case -??
997dd7cddfSDavid du Colombier		mon=`{date|sed -e 's/^....(...).*/\1/' -e $smon}
100f8e525acSDavid du Colombier		last=$year/$mon ^`{echo $1|sed 's/^-//'}
1013e12c5d1SDavid du Colombier		shift
1023e12c5d1SDavid du Colombier	case -????
103f8e525acSDavid du Colombier		last=$year/ ^ `{echo $1|sed 's/^-//'}
1043e12c5d1SDavid du Colombier		shift
1053e12c5d1SDavid du Colombier	case -??????
106f8e525acSDavid du Colombier		last=`{echo $year|sed 's/..$//'} ^ `{echo $1|sed 's/^-(..)/\1\//'}
1073e12c5d1SDavid du Colombier		shift
1083e12c5d1SDavid du Colombier	case -????????
109f8e525acSDavid du Colombier		last=`{echo $1|sed 's/^-(....)/\1\//'}
1103e12c5d1SDavid du Colombier		shift
1113e12c5d1SDavid du Colombier	case *
1127dd7cddfSDavid du Colombier		usage
1133e12c5d1SDavid du Colombier	}
1147dd7cddfSDavid du Colombier}
1157dd7cddfSDavid du Colombierif(! ~ $#* 0 && ~ $1 --)
1163e12c5d1SDavid du Colombier	shift
1173e12c5d1SDavid du Colombier
1183e12c5d1SDavid du Colombierif(~ $#* 0)
1193e12c5d1SDavid du Colombier	usage
1203e12c5d1SDavid du Colombier
1213e12c5d1SDavid du Colombierdir=`{pwd}
1223e12c5d1SDavid du Colombierif(! ~ $status ''){
123219b2ee8SDavid du Colombier	echo 'yesterday: can''t find directory' >[1=2]
1243e12c5d1SDavid du Colombier	exit 'pwd failed'
1253e12c5d1SDavid du Colombier}
1263e12c5d1SDavid du Colombier
1273e12c5d1SDavid du Colombierfor(i){
128f8e525acSDavid du Colombier	xpath=`{cleanname -d $dir -- $i}
12940ef9009SDavid du Colombier	xdump=$defdump
130f8e525acSDavid du Colombier	dumppath=$xpath
1312eaa3c3aSDavid du Colombier	if(~ $xpath /n/*/*){
13240ef9009SDavid du Colombier		xdump=`{echo $xpath | sed 's:/n/([^/]+)/.*:\1'$defdump':'}
133f8e525acSDavid du Colombier		dumppath=`{echo $xpath | sed 's:/n/[^/]+(/.*):\1:'}
134f8e525acSDavid du Colombier	}
135f8e525acSDavid du Colombier	if(! test -e /n/$xdump/$year)
136f8e525acSDavid du Colombier		9fs $xdump
137f8e525acSDavid du Colombier
13840ef9009SDavid du Colombier	if(~ $#last 0){
13951711cb6SDavid du Colombier		xlast=`{ls /n/$xdump/$year|sed -n '$p'}
14040ef9009SDavid du Colombier		switch($defdump){
14140ef9009SDavid du Colombier		case snap
14251711cb6SDavid du Colombier			xlast=`{ls $xlast|sed -n '$p'}
14340ef9009SDavid du Colombier		}
14440ef9009SDavid du Colombier	}
145f8e525acSDavid du Colombier	if not
146f8e525acSDavid du Colombier		xlast=/n/$xdump/$last
147f8e525acSDavid du Colombier
148f8e525acSDavid du Colombier	if(! test -e $xlast){
149f8e525acSDavid du Colombier		echo 'yesterday:' \
15040ef9009SDavid du Colombier			`{echo $xlast|sed 's/.n.'$defdump'.(....).(..)(..)/\1 \2 \3/'} \
151f8e525acSDavid du Colombier			'is not a backup day for' $xdump >[1=2]
152f8e525acSDavid du Colombier		exit 'bad date'
153f8e525acSDavid du Colombier	}
154f8e525acSDavid du Colombier
155f8e525acSDavid du Colombier	$copy $xlast^$dumppath $xpath
1563e12c5d1SDavid du Colombier}
1573e12c5d1SDavid du Colombierexit ''
158