summaryrefslogtreecommitdiff
path: root/herculeswrapper/include.sh
diff options
context:
space:
mode:
Diffstat (limited to 'herculeswrapper/include.sh')
-rw-r--r--herculeswrapper/include.sh161
1 files changed, 160 insertions, 1 deletions
diff --git a/herculeswrapper/include.sh b/herculeswrapper/include.sh
index cc6b1f4..9aa891c 100644
--- a/herculeswrapper/include.sh
+++ b/herculeswrapper/include.sh
@@ -72,6 +72,7 @@ function pull_all {
cd ..
./pull.sh
cd server-data
+ git_merge
stash_pop "data"
cd ../server-code
stash_pop "code"
@@ -79,7 +80,7 @@ function pull_all {
stash_pop "plugin"
cd ../../../tools
stash_pop "tools"
- cd ..
+ cd ../
./status.sh
cd server-data
}
@@ -103,3 +104,161 @@ function build_plugin {
cat err.txt
cd ../server-data
}
+
+function git_merge {
+ if [ -f ../tools/herculeswrapper/herc-map-wrapper-config ]
+ then
+ # prevent interaction
+ export GIT_EDITOR=:
+ # force commits to have predictable hashes
+ export GIT_AUTHOR_DATE='1970-01-01 00:00 +0000'
+ export GIT_COMMITTER_DATE='1970-01-01 00:00 +0000'
+
+ reset=$'\e[m'
+ black_fg=$'\e[30m'
+ red_fg=$'\e[31m'
+ green_fg=$'\e[32m'
+ yellow_fg=$'\e[33m'
+ blue_fg=$'\e[34m'
+ magenta_fg=$'\e[35m'
+ cyan_fg=$'\e[36m'
+ gray_fg=$'\e[37m'
+
+ reset2='##0'
+ black_fg2='##0'
+ red_fg2='##1'
+ green_fg2='##2'
+ blue_fg2='##3'
+ orange_fg2='##4'
+ yellow_fg2='##5'
+ pink_fg2='##6'
+ purple_fg2='##7'
+ gray_fg2='##8'
+ brown_fg2='##9'
+
+
+ now()
+ {
+ date -u +'%F %T'
+ }
+
+ good()
+ {
+ echo "$(now)$green_fg" "$@" "$reset" >&2
+ }
+
+ info()
+ {
+ echo "$(now)$cyan_fg" "$@" "$reset" >&2
+ }
+
+ warning()
+ {
+ echo "$(now)$yellow_fg" "$@" "$reset" >&2
+ }
+
+ error()
+ {
+ echo "$(now)$red_fg" "$@" "$reset" >&2
+ }
+
+ good2()
+ {
+ echo \""$green_fg2" "$@" "$reset2"\",
+ }
+
+ info2()
+ {
+ echo \""$brown_fg2" "$@" "$reset2"\",
+ }
+
+ warning2()
+ {
+ echo \""$yellow_fg2" "$@" "$reset2"\",
+ }
+
+ error2()
+ {
+ echo \""$red_fg2" "$@" "$reset2"\",
+ }
+
+ run()
+ {
+ info '$' "$@"
+ "$@"
+ }
+
+ try_merge()
+ {
+ test -n "$1"
+ local branch=$1 commit
+ info 'commit=$(' git rev-parse --verify -q $branch ')'
+ if ! commit=$(git rev-parse --verify -q $branch)
+ then
+ error2 bogus $branch >> $motd
+ error bogus $branch
+ return
+ fi
+ info commit=$commit
+ if run bash -c 'set -o pipefail; git branch --contains '$commit' | grep -qw master'
+ then
+ warning2 already $branch $commit >> $motd
+ warning already $branch
+ return
+ fi
+ if run git merge --ff-only $branch $commit
+ then
+ good2 fast $branch $commit >> $motd
+ good fast $branch $commit
+ return
+ fi
+ if run git merge $branch $commit
+ then
+ good2 merge $branch $commit >> $motd
+ good merge $branch $commit
+ return
+ fi
+ git merge --abort
+ error2 abort $branch $commit >> $motd
+ error abort $branch $commit
+ return
+ }
+
+ start_time=$(date +%s)
+ source ../tools/herculeswrapper/herc-map-wrapper-config
+
+ run test -f $motd
+ echo -e 'function\tscript\tMOTD_debug_text\t{\n setarray $Debug_Messages$,' > $motd
+ run git fetch --all
+ run git reset --hard $server_main_branch
+ info 'commit=$(' git rev-parse --verify -q $server_main_branch ')'
+ commit=$(git rev-parse --verify -q $server_main_branch)
+ info2 server base $server_main_branch $commit >> $motd
+ for branch in ${server_extra_branches[@]}
+ do
+ try_merge $branch
+ done
+
+ run cd $client_data
+
+ # force new master and back up for future restoration
+ run git fetch --all
+ run git reset --hard $client_main_branch
+
+ info 'commit=$(' git rev-parse --verify -q $client_main_branch ')'
+ commit=$(git rev-parse --verify -q $client_main_branch)
+ info2 client base $client_main_branch $commit >> $motd
+ for branch in ${client_extra_branches[@]}
+ do
+ try_merge $branch
+ done
+ echo '"End of Commits";' >> $motd
+ echo -e ' return;\n}' >> $motd
+
+ # generate the transient updates
+ run cd $tmw_tools/update/
+ run ./createnew.sh
+ run ./create_music.sh
+ run cd ../../server-data/
+ fi
+}