From 0c5c4eecb7e5ef0693e6e41f4bf0ce881f85e005 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 17 Jan 2011 20:28:29 +0200 Subject: Add update file generator tool. Based on scripts from here: http://forums.themanaworld.org/viewtopic.php?p=101133#p101133 --- update/adler32.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++ update/commit.txt | 1 + update/createnew.sh | 28 +++++++++++++++++++ update/news.txt | 3 ++ update/update.sh | 32 ++++++++++++++++++++++ 5 files changed, 143 insertions(+) create mode 100644 update/adler32.c create mode 100644 update/commit.txt create mode 100755 update/createnew.sh create mode 100644 update/news.txt create mode 100755 update/update.sh (limited to 'update') diff --git a/update/adler32.c b/update/adler32.c new file mode 100644 index 0000000..606c739 --- /dev/null +++ b/update/adler32.c @@ -0,0 +1,79 @@ +/* + * adler32.c (c) 2006 Bjorn Lindeijer + * License: GPL, v2 or later + * + * Calculates Adler-32 checksums for all files passed as argument. + * + * Usage: adler32 [file]... + */ + +#include +#include +#include + +/** + * Calculates the Adler-32 checksum for the given file. + */ +unsigned long fadler32(FILE *file) +{ + // Obtain file size + fseek(file, 0, SEEK_END); + long fileSize = ftell(file); + rewind(file); + + // Calculate Adler-32 checksum + char *buffer = (char*) malloc(fileSize); + fread(buffer, 1, fileSize, file); + unsigned long adler = adler32(0L, Z_NULL, 0); + adler = adler32(adler, (Bytef*) buffer, fileSize); + free(buffer); + + return adler; +} + +/** + * Prints out usage and exists. + */ +void print_usage() +{ + printf("Usage: adler32 mode [file]...\n"); + exit(0); +} + +int main(int argc, char *argv[]) +{ + int i; /**< Loops through arguments. */ + + if (argc < 2) + { + print_usage(); + } + + int mode = atoi(argv[1]); + + for (i = 2; i < argc; ++i) + { + FILE *file = fopen(argv[i], "r"); + + if (!file) + { + printf("Error while opening '%s' for reading!\n", argv[i]); + exit(1); + } + + unsigned long adler = fadler32(file); + switch (mode) + { + case 0: + default: + printf("%s %lx\n", argv[i], adler); + break; + case 1: + printf("%lx", adler); + break; + } + fclose(file); + } + + return 0; +} diff --git a/update/commit.txt b/update/commit.txt new file mode 100644 index 0000000..b22f28c --- /dev/null +++ b/update/commit.txt @@ -0,0 +1 @@ +76d576f6d275d3bbcf10fe8a4aabf505353b3e0a diff --git a/update/createnew.sh b/update/createnew.sh new file mode 100755 index 0000000..2132154 --- /dev/null +++ b/update/createnew.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +dir=`pwd` + +rm adler32 +gcc -lz adler32.c -o adler32 + +rm files/evol.zip +cd ../../clientdata +find -iregex ".+[.]\(xml\|png\|tmx\|ogg\|txt\)" -printf "%P\n" | zip -@ ../evol-tools/update/files/evol.zip +git log --pretty=oneline -n 1 | awk '{print $1}' >../evol-tools/update/commit.txt + +cd $dir/files +sum=`../adler32 1 evol.zip` +echo "evol.zip ${sum}" >resources2.txt + +echo ' +' >xml_header.txt +echo '' >xml_footer.txt + +echo " " >> xml_header.txt +cp xml_header.txt resources.xml +cat xml_footer.txt >>resources.xml + +cp evol.zip ../upload/ +cp resources2.txt ../upload/ +cp resources.xml ../upload/ +cp ../news.txt ../upload/ \ No newline at end of file diff --git a/update/news.txt b/update/news.txt new file mode 100644 index 0000000..48ea179 --- /dev/null +++ b/update/news.txt @@ -0,0 +1,3 @@ +Welcome to Evol update server. + +Alpha testing. \ No newline at end of file diff --git a/update/update.sh b/update/update.sh new file mode 100755 index 0000000..f4c0966 --- /dev/null +++ b/update/update.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +dir=`pwd` + +rm adler32 +gcc -lz adler32.c -o adler32 + +previous=`cat commit.txt` + +cd ../../clientdata +head=`git log --pretty=oneline -n 1 | awk '{print $1}'` +u1=`echo ${previous} | cut -c 1-7` +u2=`echo ${head} | cut -c 1-7` +git log --name-status ${previous}..${head} | awk '/^(A|M)\t/ {print $2}' | \ + grep -e "[.]\(xml\|png\|tmx\|ogg\|txt\)" | sort | uniq | \ + xargs zip -9 -r ../evol-tools/update/files/evol-${u1}..${u2}.zip + +cd $dir/files +if [ -f evol-${u1}..${u2}.zip ]; then + mv ../commit.txt ../commit_old.txt + echo ${head} >../commit.txt + sum=`../adler32 1 evol-${u1}..${u2}.zip` + echo "evol-${u1}..${u2}.zip ${sum}" >>resources2.txt + echo " " >> xml_header.txt + cp xml_header.txt resources.xml + cat xml_footer.txt >>resources.xml + + cp evol-${u1}..${u2}.zip ../upload/ + cp resources2.txt ../upload/ + cp resources.xml ../upload/ + cp ../news.txt ../upload +fi -- cgit v1.2.3-70-g09d2