xref: /plan9/rc/bin/replica/pull (revision 3421e8c440c2d7d042d8991af6ba44d81cd752c5)
19a747e4fSDavid du Colombier#!/bin/rc
29a747e4fSDavid du Colombier
39a747e4fSDavid du Colombierrfork en
49a747e4fSDavid du Colombier
59a747e4fSDavid du Colombierfn usage {
6*3421e8c4SDavid du Colombier	echo 'usage: replica/pull [-nv] [-c name] [-s name] replica-name [paths]' >[1=2]
79a747e4fSDavid du Colombier	exit usage
89a747e4fSDavid du Colombier}
99a747e4fSDavid du Colombier
109a747e4fSDavid du Colombier. /rc/bin/replica/defs $*
119a747e4fSDavid du Colombier
129a747e4fSDavid du Colombierneed clientlog serverlog clientdb clientroot serverroot
139a747e4fSDavid du Colombier
149a747e4fSDavid du Colombier# mount the server file system, update the log
159a747e4fSDavid du Colombiermust servermount
169a747e4fSDavid du Colombiermust serverupdate
179a747e4fSDavid du Colombiermust clientmount
189a747e4fSDavid du Colombier
199a747e4fSDavid du Colombier# download the log
209a747e4fSDavid du Colombiern=`{ls -l $clientlog >[2]/dev/null |awk '{print $6}'}
219a747e4fSDavid du Colombiers=`{ls -l $serverlog >[2]/dev/null |awk '{print $6}'}
229a747e4fSDavid du Colombierif(~ $n 0 || ~ $#n 0 || test $s -lt $n){
236b6b9ac8SDavid du Colombier	if(test -e $clientlog) must rm $clientlog
248847fb04SDavid du Colombier	must fcp $serverlog $clientlog
259a747e4fSDavid du Colombier}
269a747e4fSDavid du Colombierif not{
279a747e4fSDavid du Colombier	m=`{echo $n-1024 | hoc}
289a747e4fSDavid du Colombier	if(~ $m -*)
299a747e4fSDavid du Colombier		m=0
309a747e4fSDavid du Colombier	cmp -s $serverlog $clientlog $m $m
319a747e4fSDavid du Colombier	x=$status
329a747e4fSDavid du Colombier	switch($x){
339a747e4fSDavid du Colombier	case *': EOF'
349a747e4fSDavid du Colombier		must tail +^$n^c $serverlog >>$clientlog
359a747e4fSDavid du Colombier	case *': differ'
369a747e4fSDavid du Colombier		must rm $clientlog
378847fb04SDavid du Colombier		must fcp $serverlog $clientlog
389a747e4fSDavid du Colombier	case ''
399a747e4fSDavid du Colombier		;
409a747e4fSDavid du Colombier	case *
419a747e4fSDavid du Colombier		fatal cmp: $x
429a747e4fSDavid du Colombier	}
439a747e4fSDavid du Colombier}
449a747e4fSDavid du Colombier
459a747e4fSDavid du Colombier# normally we'd do this after applylog, but we want
469a747e4fSDavid du Colombier# applylog to be the last thing in this script, so we'll
479a747e4fSDavid du Colombier# do it here instead, compacting changes from the
489a747e4fSDavid du Colombier# _last_ applylog.
499a747e4fSDavid du Colombier
509a747e4fSDavid du Colombierndb=`{echo $clientdb | sed 's;(.*)/(.*);\1/_\2;'}
519a747e4fSDavid du Colombiermust replica/compactdb $clientdb >$ndb
529a747e4fSDavid du Colombiermv $ndb $clientdb
539a747e4fSDavid du Colombier
549a747e4fSDavid du Colombier# mount the client file system, apply the log
559a747e4fSDavid du Colombier# this is the last thing in the script and is execed so that
569a747e4fSDavid du Colombier# if replica/pull is overwritten nothing bad will happen.
579a747e4fSDavid du Colombier# applylog takes care of itself as far as protection against being overwritten.
589a747e4fSDavid du Colombierexec replica/applylog $opt $applyopt $clientdb $clientroot $serverroot $paths <$clientlog
59