diff options
Diffstat (limited to 'client/make-updates')
-rwxr-xr-x | client/make-updates | 220 |
1 files changed, 59 insertions, 161 deletions
diff --git a/client/make-updates b/client/make-updates index 96925d8..1179a66 100755 --- a/client/make-updates +++ b/client/make-updates @@ -1,163 +1,61 @@ -#!/bin/bash -e -# This is a tool to automatically generate and ship client updates. -# It is entirely self-contained, storing its own state in the git repo. -# It is called by running 'make updates' in server-data. -# It also supports manually calls for maintenance work. -# TODO: make auto-mode work with music too. +#!/usr/bin/env bash -# local branch to keep update info on -# will be created on first run; updated thereafter -branch=update-zips -# must already exist -# must NOT be a relative path -output=~/www/updates - -function apply_function() -{ - $1 misc *.* COPYING rules/ - $1 graphics-images graphics/images/ graphics/guiicons/ - $1 graphics-items graphics/items/ - $1 graphics-minimaps graphics/minimaps/ - $1 graphics-particles graphics/particles/ - $1 graphics-skills graphics/skills/ - $1 graphics-sprites graphics/sprites/ - $1 graphics-tiles graphics/tiles/ - $1 items items/ - $1 maps maps/ - $1 monsters monsters/ - $1 npcs npcs/ - $1 quests quests/ - $1 sfx sfx/ - $1 tilesets tilesets/ -} - -function add_resource() -{ - pushd $output >/dev/null - adler32 $1 | tee -a resources2.txt | { - read name hash - chmod a+r $name - sed '/<\/updates>/i <update type="data" file="'$name'" hash="'$hash'" />' -i resources.xml - } - popd >/dev/null -} - -function add_music() -{ - pushd $output >/dev/null - adler32 $1 | { - read name hash - chmod a+r $name - sed '/<\/updates>/i <update type="music" required="no" file="'$name'" hash="'$hash'" />' -i resources.xml - } - popd >/dev/null -} - -function do_initial_zip() -{ - zip=$1-$this_update.zip; shift - git ls-files --with-tree=HEAD -- "$@" \ - | zip -q $output/$zip -@ - add_resource $zip -} -function do_initial_music() -{ - zip=music-$this_update.zip - ( cd music/ ; git ls-files --with-tree=HEAD ) \ - | sed 's:^:music/:' \ - | zip -q $output/$zip -@ - add_music $zip -} - -function git_diff_tree() -{ - git diff-tree -r --diff-filter=AM "$@" -} - -function do_delta_zip() -{ - zip=$1-$last_update..$this_update.zip; shift - if git_diff_tree --quiet $last_update $this_update -- "$@" - then - return - fi - git_diff_tree --name-only $last_update $this_update -- "$@" \ - | zip -q $output/$zip -@ - add_resource $zip -} -function do_delta_music() -{ - zip=music-$last_update..$this_update.zip - if (cd music; git_diff_tree --quiet $last_update $this_update ) - then - return - fi - (cd music; git_diff_tree --name-only $last_update $this_update ) \ - | sed 's:^:music/:' \ - | zip -q $output/$zip -@ - add_music $zip -} +# Copyright (C) 2011-2012 Evol Online +# Author: Andrei Karas (4144) -function do_initial_zips() -{ - apply_function do_initial_zip -} - -function do_delta_zips() -{ - apply_function do_delta_zip -} - -function main() -{ - if ! test -d $output - then - echo 'Fatal error: output directory does not exist' - echo "$output" - return 1 - fi - if ! test -f $output/resources.xml - then - ( - echo '<?xml version="1.0"?>' - echo '<updates>' - echo '</updates>' - ) > $output/resources.xml - fi - - this_update=$(git rev-parse --short HEAD) - if ! last_update=$(git rev-parse --short $branch 2>/dev/null) - then - echo 'Doing initial updates' - do_initial_zips - elif test "$this_update" = "$last_update" - then - echo 'No commits since last update generation ...' - else - echo 'Doing incremental updates' - do_delta_zips - fi - git branch -f $branch - - this_update=$(cd music; git rev-parse --short HEAD) - if ! last_update=$(cd music; git rev-parse --short $branch 2>/dev/null) - then - echo 'Doing initial music updates' - do_initial_music - elif test "$this_update" = "$last_update" - then - echo 'No commits since last music update generation ...' - else - echo 'Doing incremental music updates' - do_delta_music - fi - ( cd music; git branch -f $branch ) -} - -if test "$0" = "$BASH_SOURCE" -then - echo 'Generating updates automatically' - main -else - echo 'sourcing detected - you can do manual updates' -fi +dir=`pwd` +output=~/www/updates +cdata=../../client-data + +LDLIBS=-lz +prefix=/usr/local +CC=${CC:=gcc} + +echo "======= Legacy =======" + +echo ">> Building adler32..." +rm -f adler32 2>/dev/null || : +$CC -lz adler32.c -o adler32 + +echo ">> Creating directory tree..." +mkdir -pv files +mkdir -pv $output +mkdir -pv $cdata/music + +echo ">> Removing leftovers..." +rm -rv files/* 2>/dev/null || : +cp $output/news.txt files/ 2>/dev/null || : +cp $output/news.html files/ 2>/dev/null || : +rm -rv $output/* 2>/dev/null || : + +echo ">> Entering client-data..." +pushd $cdata +echo ">> Changing file dates..." +find -path ./music -prune -o -iregex ".+[.]\(xml\|png\|tmx\|ogg\|txt\|po\|tsx\)" -exec touch --date=2015-01-01 {} \; +echo ">> Compressing files..." +find -path ./music -prune -o -iregex ".+[.]\(xml\|png\|tmx\|ogg\|txt\|po\|tsx\)" -printf "%P\n" | zip -X -@ $dir/files/Legacy.zip +echo ">> Dumping git revision to file..." +git rev-parse HEAD >$dir/commit.txt + +pushd $dir/files +echo ">> Calculating adler32 checksum..." +sum=`../adler32 1 Legacy.zip` +echo "Legacy.zip ${sum}" >resources2.txt + +echo ">> Generating xml file..." +echo '<?xml version="1.0"?> +<updates>' >xml_header.txt +echo '</updates>' >xml_footer.txt + +echo " <update type=\"data\" file=\"Legacy.zip\" hash=\"${sum}\" />" >> xml_header.txt +cp xml_header.txt resources.xml +cat xml_footer.txt >>resources.xml + +echo ">> Moving stuff around..." +cp -v Legacy.zip $output/ +cp -v resources2.txt $output/ +cp -v resources.xml $output/ +cp -v news.txt $output/ 2>/dev/null || : +cp -v news.html $output/ 2>/dev/null || : +popd +popd |