diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 17:14:36 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 17:14:36 +0300 |
commit | 2959e1ede0ebc6fdffd7b8660f43c2ce14c9696f (patch) | |
tree | f6343b1ce11a8c87251dd27cf3d3e26b50693fa7 /rc/bin/replica | |
parent | e463eb40363ff4c68b1d903f4e0cdd0ac1c5977f (diff) |
Import sources from 2011-03-30 iso image - rc
Diffstat (limited to 'rc/bin/replica')
-rwxr-xr-x | rc/bin/replica/changes | 15 | ||||
-rwxr-xr-x | rc/bin/replica/defs | 55 | ||||
-rwxr-xr-x | rc/bin/replica/pull | 58 | ||||
-rwxr-xr-x | rc/bin/replica/push | 18 | ||||
-rwxr-xr-x | rc/bin/replica/scan | 18 | ||||
-rwxr-xr-x | rc/bin/replica/setupdirs | 34 |
6 files changed, 198 insertions, 0 deletions
diff --git a/rc/bin/replica/changes b/rc/bin/replica/changes new file mode 100755 index 000000000..469fce866 --- /dev/null +++ b/rc/bin/replica/changes @@ -0,0 +1,15 @@ +#!/bin/rc + +rfork en + +fn usage { + echo 'usage: replica/changes replica-name [paths]' >[1=2] + exit usage +} + +. /rc/bin/replica/defs $* + +need clientdb clientroot clientproto + +must clientmount +exec replica/updatedb -p $clientproto -l -r $clientroot $clientexclude $clientdb $paths diff --git a/rc/bin/replica/defs b/rc/bin/replica/defs new file mode 100755 index 000000000..45b36419f --- /dev/null +++ b/rc/bin/replica/defs @@ -0,0 +1,55 @@ +tmp=() + +fn fatal { + if(! ~ $#tmp 0) + rm -f $tmp + echo $* >[1=2] + exit $"* +} + +fn must { + $* || fatal $"*^': '^$status +} + +fn need { + for(i) + if(~ $$i UNCONFIGURED) + fatal $name^' does not set $'^$i +} + +opt=() +while(! ~ $#* 0 && ~ $1 -*){ + if(~ $1 -s -c){ # take one argument + opt=($opt $1) + shift + } + opt=($opt $1) + shift +} +if(~ $1 --) + shift +if(~ $#* 0) + usage +name=$1 +shift +paths=($*) + +if(! ~ $name /* ./* ../*) + name=$home/lib/replica/$name + +if(! test -x $name) + fatal no such replica $name + +cfgopt=() +applyopt=() +fn servermount { status='' } +fn clientmount { status='' } +fn serverupdate { status='' } +for (i in clientroot clientproto clientdb clientexclude serverroot serverlog serverproto) + $i=UNCONFIGURED +. $name + +if(! ~ $#serverexclude 0) + serverexclude=-x^$serverexclude +if(! ~ $#clientexclude 0) + clientexclude=-x^$clientexclude diff --git a/rc/bin/replica/pull b/rc/bin/replica/pull new file mode 100755 index 000000000..5b1fcc1e2 --- /dev/null +++ b/rc/bin/replica/pull @@ -0,0 +1,58 @@ +#!/bin/rc + +rfork en + +fn usage { + echo 'usage: replica/pull [-nv] [-c name] [-s name] replica-name [paths]' >[1=2] + exit usage +} + +. /rc/bin/replica/defs $* + +need clientlog serverlog clientdb clientroot serverroot + +# mount the server file system, update the log +must servermount +must serverupdate +must clientmount + +# download the log +n=`{ls -l $clientlog >[2]/dev/null |awk '{print $6}'} +s=`{ls -l $serverlog >[2]/dev/null |awk '{print $6}'} +if(~ $n 0 || ~ $#n 0 || test $s -lt $n){ + if(test -e $clientlog) must rm $clientlog + must fcp $serverlog $clientlog +} +if not{ + m=`{echo $n-1024 | hoc} + if(~ $m -*) + m=0 + cmp -s $serverlog $clientlog $m $m + x=$status + switch($x){ + case *': EOF' + must tail +^$n^c $serverlog >>$clientlog + case *': differ' + must rm $clientlog + must fcp $serverlog $clientlog + case '' + ; + case * + fatal cmp: $x + } +} + +# normally we'd do this after applylog, but we want +# applylog to be the last thing in this script, so we'll +# do it here instead, compacting changes from the +# _last_ applylog. + +ndb=`{echo $clientdb | sed 's;(.*)/(.*);\1/_\2;'} +must replica/compactdb $clientdb >$ndb +mv $ndb $clientdb + +# mount the client file system, apply the log +# this is the last thing in the script and is execed so that +# if replica/pull is overwritten nothing bad will happen. +# applylog takes care of itself as far as protection against being overwritten. +exec replica/applylog $opt $applyopt $clientdb $clientroot $serverroot $paths <$clientlog diff --git a/rc/bin/replica/push b/rc/bin/replica/push new file mode 100755 index 000000000..635bc6b2c --- /dev/null +++ b/rc/bin/replica/push @@ -0,0 +1,18 @@ +#!/bin/rc + +rfork en + +fn usage { + echo 'usage: replica/push [-nv] replica-name [paths]' >[1=2] + exit usage +} + +. /rc/bin/replica/defs $* + +need clientproto clientexclude cfgopt clientdb clientroot serverroot paths + +must servermount +must clientmount +exec replica/applychanges -p $clientproto $clientexclude $opt $cfgopt \ + $clientdb $clientroot $serverroot $paths + diff --git a/rc/bin/replica/scan b/rc/bin/replica/scan new file mode 100755 index 000000000..c827eca92 --- /dev/null +++ b/rc/bin/replica/scan @@ -0,0 +1,18 @@ +#!/bin/rc + +rfork en + +fn usage { + echo 'usage: replica/scan replica-name [paths]' >[1=2] + exit usage +} + +. /rc/bin/replica/defs $* + +need serverroot serverexclude serverproto serverdb serverlog + +must servermount +replica/updatedb -r^$serverroot $serverexclude -p^$serverproto $serverdb >>$serverlog +ndb=`{echo $serverdb | sed 's;(.*)/(.*);\1/n\2;'} +odb=`{echo $serverdb | sed 's;(.*)/(.*);\1/_\2;'} +replica/compactdb $serverdb >$ndb && mv $serverdb $odb && mv $ndb $serverdb diff --git a/rc/bin/replica/setupdirs b/rc/bin/replica/setupdirs new file mode 100755 index 000000000..75d47da47 --- /dev/null +++ b/rc/bin/replica/setupdirs @@ -0,0 +1,34 @@ +#!/bin/rc + +rfork en + +if(! ~ $#libreplica 1) + libreplica=$home/lib/replica + +fn usage { + echo 'usage: replica/setupdirs' >[1=2] + exit usage +} + +fn fatal { + echo $* >[1=2] + exit $"* +} + +fn must { + $* || fatal $"*^': '^$status +} + +if(! ~ $#* 0) + usage + +for (i in \ + $libreplica\ + $libreplica/db\ + $libreplica/db/client\ + $libreplica/db/server\ + $libreplica/log\ + $libreplica/cfg) + if(! test -d $i) + must mkdir -p $i + |