1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
|
#!/bin/bash
####################################################################
# Targets for downloading binary files (the BitKeeper tree does
# not contain MacOS binaries etc.)
####################################################################
RSYNC_MODULE=rsync.penguinppc.org::libmol
#ALT_RSYNC_MODULE=zorn.theophys.kth.se::libmol
ALT_RSYNC_MODULE=master.penguinppc.org::libmol
RSYNC_MODULE_R=master.penguinppc.org::libmol
RSYNC_MODULE_RW=samuel@master.penguinppc.org::libmol-rw
EXTRA_BIN_FILES="drivers/*.nw drivers/*.ow drivers/*.x drivers/bootx \
drivers/of drivers/*.mkext graphics/*.raw graphics/*.png \
nvram/nvram.dist startboing images/*.dmg VERSION"
###################################
# copybinfiles srcdir destdir
###################################
function copybinfiles()
{
echo "=========================================================="
echo " Copying binary files from $1 to $2"
echo "=========================================================="
set -f
for x in $EXTRA_BIN_FILES ; do
V1=`find $1 -path $1/$x`
for X in $V1 ; do
Y=`echo $X | sed -e s/$1/$2/`
echo " $X -> $Y"
ln -f $X $Y || exit 1
done
done
set +f
}
function do_populate()
{
[ ! -f libimport/drivers/video.nw ] && {
echo "====== This tree does not contain any binary files! ===="
exit 1
}
for x in graphics drivers images nvram ; do
test -d mollib/$x || mkdir mollib/$x
done
copybinfiles libimport mollib
echo "======================== DONE ============================"
}
function do_import()
{
echo "=========================================================="
echo " Downloading binaries from $RSYNC_MODULE"
echo "=========================================================="
rsync -avz --delete $RSYNC_MODULE/ libimport/ || {
echo "An error occurred, retrying..."
rsync -avz --delete $RSYNC_MODULE/ libimport/ || {
echo "An error ocurred, trying secondary rsync server ($ALT_RSYNC_MODULE)."
rsync -avz --delete $ALT_RSYNC_MODULE/ libimport/ || exit 1;
}
}
[ ! -f libimport/drivers/video.nw ] && {
echo "====== This tree does not contain any binary files! ===="
exit 1
}
}
function do_export()
{
[ ! -f mollib/drivers/video.nw ] && {
echo "===== This tree does not contain any binary files! ===="
exit 1;
}
rm -rf libimport.BAK libimport
rsync -avz --delete $RSYNC_MODULE_R/ libimport.BAK/ || exit 1;
mkdir libimport libimport/drivers libimport/nvram libimport/images libimport/graphics
copybinfiles mollib libimport
echo
echo "======================= CHANGES =========================="
set -f
ORG=`find libimport.BAK -type f`
for x in $ORG ; do
y=`echo $x | sed -e s/libimport.BAK/libimport/`
[ ! -f $y ] && {
echo
echo " WARNING: File '$x' will be removed"
echo " `ls -l $x`"
echo
}
[ -f $y ] && {
cmp $x $y >& /dev/null && {
echo " Unmodified: `echo $y | sed -e s/libimport//`"
} || {
echo
echo " MODIFIED FILE: '$x'"
echo " Old: `ls -l $x`"
q=`echo $x | sed -e s/.BAK//`
echo " New: `ls -l $q`"
}
}
done
NEW=`find libimport -type f`
for x in $NEW ; do
y=`echo $x | sed -e s/libimport/libimport.BAK/`
[ ! -f $y ] && {
echo
echo " NEW file: '$x'"
echo " `ls -l $x`"
}
done
set +f
echo
echo "=========================================================="
echo "Next step is upload to $RSYNC_MODULE_RW"
read -n 1 -p "Proceed [y/N]? " flag
echo
[ "$flag" == "y" -o "$flag" == "Y" ] && {
rsync -avz --delete --delete-excluded libimport/ $RSYNC_MODULE_RW
} || {
echo --- Aborted ---
}
}
function do_delete()
{
set -f
echo "=========================================================="
echo " Deleting binaries files"
echo "=========================================================="
for X in $EXTRA_BIN_FILES ; do
find mollib -path mollib/$X -print -exec rm -f {} ';'
done
echo "==================== DONE ================================"
exit 0
}
###################################
# Main
###################################
[ $# == 0 ] && {
echo "Usage: libimport import|export|delete"
exit 1
}
case $1 in
delete) do_delete ;;
export) do_export ;;
import) do_import ; do_populate ;;
populate) do_populate ;;
import_dist)
RSYNC_MODULE=$RSYNC_MODULE_R
do_import ;;
*) echo "bad command $1" ; exit 1 ;;
esac
exit 0
|