summaryrefslogtreecommitdiff
path: root/client/make-updates
diff options
context:
space:
mode:
Diffstat (limited to 'client/make-updates')
-rwxr-xr-xclient/make-updates220
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