diff options
Diffstat (limited to 'herculeswrapper/include.sh')
-rw-r--r-- | herculeswrapper/include.sh | 161 |
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 +} |