+ admin-merge)
+ if [ "$#" = 1 ]; then
+ set -- "${1%%/*}" "${1#*/}"
+ fi
+ for d in $repos; do
+ enter "$d0/$d" verbose
+ git rev-parse "$1/$2" || continue
+ # 1. review
+ {
+ git log HEAD.."$1/$2"
+ git diff HEAD..."$1/$2"
+ } | less
+ if yesno "Merge \"$1/$2\" into `git symbolic-ref HEAD` of $d?"; then
+ git merge "$1/$2"
+ if "$SELF" compile && yesno "Still merge \"$1/$2\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
+ git push origin HEAD
+ git push "$1" :"$2"
+ else
+ git reset --hard HEAD@{1}
+ fi
+ fi
+ done
+ ;;
+ admin-merge-2)
+ t=`mktemp`
+ report=""
+ reportecho()
+ {
+ report=$report"$*$LF"
+ echo "$*"
+ }
+ reportecho4()
+ {
+ report=$report" $*$LF"
+ echo " $*"
+ }
+ reportdo4()
+ {
+ o=`"$@" | sed 's/^/ /' || true`
+ reportecho "$o"
+ }
+ for d in $repos; do
+ enter "$d0/$d" verbose
+ base="`repobranch "$d"`"
+ reportecho "In $d:"
+ for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
+ case "${ref#refs/remotes/origin/}" in
+ "$base")
+ continue
+ ;;
+ HEAD|master)
+ continue
+ ;;
+ esac
+ reportecho " Branch $ref:"
+ note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
+ logdata=`git log --color "$base".."$ref"`
+ diffdata=`git diff --color --find-copies-harder --ignore-space-change "$base"..."$ref"`
+ if [ -z "$logdata" ]; then
+ reportecho4 "--> not merging, no changes vs master"
+ elif [ -z "$diffdata" ]; then
+ reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
+ if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ echo "$logdata"; } | less -r'; then
+ git push origin :"${ref#refs/remotes/origin/}"
+ reportecho4 "--> branch deleted"
+ fi
+ elif [ -n "$note" ]; then
+ reportdo4 echo "$note"
+ reportecho4 "--> not merging, already had this one rejected before"
+ elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ echo "$logdata"; echo "$diffdata"; } | less -r'; then
+ git checkout "$base"
+ org=`git rev-parse HEAD`
+ if ! git merge "$ref" 2>&1 | tee "$t"; then
+ git reset --hard "$org"
+ GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
+ reportdo4 cat "$t"
+ reportecho4 "--> merge failed"
+ elif ! "$SELF" compile 2>&1 | tee "$t"; then
+ git reset --hard "$org"
+ GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
+ reportdo4 cat "$t"
+ reportecho4 "--> compile failed"
+ elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
+ git reset --hard "$org"
+ git notes edit "$ref"
+ note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
+ reportdo4 echo "$note"
+ reportecho4 "--> test failed"
+ else
+ case ",`repoflags "$d"`," in
+ *,svn,*)
+ # we do quite a mess here... luckily we know $org
+ git pull # svn needs to be current
+ git rebase -i --onto master "$org"
+ git svn dcommit --add-author-from
+ git reset --hard "$org"
+ ;;
+ *)
+ git push origin HEAD
+ ;;
+ esac
+ reportecho4 "--> MERGED"
+ if yesno "Delete original branch \"$ref\"?"; then
+ git push origin :"${ref#refs/remotes/origin/}"
+ reportecho4 "--> branch deleted"
+ fi
+ fi
+ else
+ GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
+ note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
+ if [ -n "$note" ]; then
+ reportdo4 echo "$note"
+ reportecho4 "--> rejected"
+ else
+ reportecho4 "--> postponed"
+ fi
+ fi
+ reportecho ""
+ done
+ reportecho ""
+ done
+ rm -f "$t"
+ echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
+ ;;
+
+ # release building goes here
+ release-mkdir)
+ mkdir -p Xonotic/"$1"
+ ;;
+ release-prepare)
+#"$SELF" each git clean -fxd
+ mkdir -p Xonotic
+ "$SELF" release-copy Docs/
+ "$SELF" release-copy misc/
+ "$SELF" release-copy server/
+ "$SELF" release-copy xonotic-linux-glx.sh
+ "$SELF" release-copy xonotic-linux-sdl.sh
+ "$SELF" release-mkdir data
+ ;;
+ release-copy)
+ rsync --exclude=.git -vaSHPAX "$1" Xonotic/"$1"
+ ;;
+ release-engine-win32)
+ rsync --exclude=.git -vaSHPAX Xonotic/misc/buildfiles/w32/* Xonotic/
+ ;;
+ release-engine-osx)
+ rsync --exclude=.git -vaSHPAX Xonotic/misc/buildfiles/osx/* Xonotic/
+ ;;
+ release-engine-linux32)
+ ;;
+ release-engine-linux64)
+ ;;
+ release-engine)
+ "$SELF" release-engine-win32
+ "$SELF" release-engine-osx
+ "$SELF" release-engine-linux32
+ "$SELF" release-engine-linux64
+ ;;
+ release-maps)
+ "$SELF" update-maps
+ for X in data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
+ if [ -f "$X" ]; then
+ cd Xonotic/data/xonotic-maps.pk3dir
+ unzip ../../../"$X"
+ cd ../../..
+ fi
+ done
+ ;;
+ release-finish)
+ # version numnber and stuff like that
+ ;;
+ release-buildpk3-transform-raw)
+ ;;
+ release-buildpk3-transform-normal)
+ # texture: convert to jpeg
+ ;;
+ release-buildpk3-transform-low)
+ # texture: convert to jpeg and downscale
+ # music: reduce bitrate
+ ;;
+ release-buildpk3)
+ src=$1
+ dst=$2
+ transform=$3
+ case "$dst" in
+ /*)
+ ;;
+ */
+ dst="$PWD/$dst"
+ ;;
+ esac
+ rm -rf Xonotic/temp
+ rsync --exclude=.git -vaSHPAX "$src"/ "Xonotic/temp"
+ "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
+ 7za a -tzip -mx=9 "$dst" .
+ rm -rf Xonotic/temp
+ ;;
+ release-buildpk3s)
+ src=$1
+ shift
+ while [ "$#" -gt 1 ]; do
+ "$SELF" release-buildpk3 "$src" "Xonotic/${src%.pk3dir}$2.pk3" "$1"
+ done
+ rm -rf "$src"
+ ;;
+ release-pack)
+ "$SELF" release-buildpk3s data/font-dejavu.pk3dir raw ''
+ "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' raw '-raw' low '-low'
+ "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' raw '-raw' low '-low'
+ "$SELF" release-buildpk3s data/xonotic-music.pk3dir normal '' raw '-raw' low '-low'
+ "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
+ ;;
+ release)
+ "$SELF" release-prepare
+ "$SELF" release-engine
+ "$SELF" release-gamedata
+ "$SELF" release-maps
+ "$SELF" release-finish
+ "$SELF" release-pack
+ ;;
+