#! /bin/sh
#
# Shell script to sync up wiki.commonjs.org and keep it as a browseable mirror.
# Wes Garland, wes@page.ca, July 2010
#
# Hereby placed in the public domain.
#

cd /var/www/docs/mirrors/wiki.commonjs.org
exprfile="/tmp/ucjsw.$$"

/usr/local/bin/rsync -r wiki.commonjs.org::commonjs/htmldump/ .

qdiff()
{
  diff $* 2>"$exprfile.qdiff"
  ret="$?"
  grep -v 'missing newline' < "$exprfile.qdiff" | sed 's/^/ * Error: /' >&2
  rm "$exprfile.qdiff"
  return $ret
}

fixexpr()
{
  [ -f "$exprfile" ] && rm "$exprfile"  
  while [ "$2" ]
  do
    start="$1"
    end="$2"
    echo "s;\\(${start}http://wiki.commonjs.org/\\)\\([^$end]*$end\\);${start}http://wiki.commonjs.org.mirrors.page.ca/\\2;g" >> "$exprfile"
    shift 2
  done
}

fix()
{
  file="$1"

  sed -f "$exprfile" < "$file" > "$file.tmp" 2>&1 | grep -v 'missing newline' | sed 's/^/ * Error: /' >&2
  if qdiff "$file" "$file.tmp" >/dev/null; then
    echo " * No fix-ups required for $file"
    rm "$file.tmp"
  else
    echo " * Fixing $file"
    if [ !  -s "$file" ]; then
      echo " * Error: output file was zero bytes long. Are we out of disk space?" >&2
      echo " ! Fatal error encountered processing $file. Stop."
      rm "$exprfile"
      exit 1
    fi
    touch -r "$file" "$file.tmp"
    mv "$file.tmp" "$file"
  fi
}

fixexpr 'src="' '"' "src='" "'" 'href="' '"' "href='" "'" 
echo "s/This page was last modified /This page was mirrored on `date` and last modfied /" >> $exprfile
find . -type f -name \*.html | while read file
do
  fix "$file" 
done

fixexpr 'url(' ')' "url('" "')" 'url("' '")'
find . -type f -name \*.css | while read file
do
  fix $file
done

rm "$exprfile"

if grep -v mirror-175png skins/offline/main.css >/dev/null; then
cat  >> skins/offline/main.css <<DONE_CSS
#column-content {
  background-image: url(/mirror-175px.png);
  background-repeat: no-repeat;
  background-attachment: fixed;
}
DONE_CSS
cat 'raw/MediaWiki~Common.css' >> skins/offline/main.css 
fi

/usr/local/bin/rsync -r www.commonjs.org::commonjs/dumps/full.xml .

