#!/bin/rc

rfork ne
path=/bin

fn fatal {
	echo $*
	exit $"*
}

flags=()
while(! ~ $#* 1 && ~ $1 -*){
	if(~ $1 -c -s){
		flags=($flags $1)
		shift
	}
	flags=($flags $1)
	shift
}

if (! ~ $#* 1)
	fatal 'usage: contrib/pull [-c file] [-s file] name' >[1=2]

#remove "user" from "user/replica"
name=`{basename $1}
repl=/dist/replica/$name
if (! test -x $repl)
	fatal no such replica: $name

. $repl

if (~ $#serverchg 0) {
	serverchg=$s/$name/chg
	clientchg=$c/client/$name.chg
}

# check changes
servermount || fatal mount server failed
if ( test -e $serverchg) {
	n=`{ls -l $clientchg >[2]/dev/null |awk '{print $6}'}
	s=`{ls -l $serverchg >[2]/dev/null |awk '{print $6}'}
	if (~ $n 0 || ~ $#n 0 || test $s -lt $n) {
		fcp $serverchg $clientchg
		cat $clientchg
	}
	if not {
		m=`{echo $n-1024 | hoc}
		if(~ $m -*)
			m=0
		cmp -s $serverchg $clientchg $m $m
		x=$status
		switch($x){
		case *': EOF'
			tail +^$n^c $serverchg >>$clientchg
			tail +^$n^c $clientchg
		case *': differ'
			fcp $serverchg $clientchg
			cat $clientchg
		}
	}
}

exec replica/pull -v $flags $repl
