6 # I use this in EVERY shell script ;)
12 while ! [ -f ./all ]; do
13 if [ x"`pwd`" = x"/" ]; then
14 echo "Cannot find myself."
15 echo "Please run this script with the working directory inside a Xonotic checkout."
23 # If we are on WINDOWS:
28 # Windows hates users. So this script has to copy itself elsewhere first...
29 cp "$SELF" ../all.xonotic.sh
30 export WE_HATE_OUR_USERS=1
31 exec ../all.xonotic.sh "$@"
39 echo >&2 "$ESC[1m$*$ESC[m"
42 self=`git hash-object "$SELF"`
45 self_new=`git hash-object "$SELF"`
46 if [ x"$self" != x"$self_new" ]; then
47 msg "./all has changed."
48 if [ -z "$XONOTIC_FORBID_RERUN_ALL" ]; then
49 msg "Rerunning the requested operation to make sure."
50 export XONOTIC_FORBID_RERUN_ALL=1
53 msg "Please try $SELF update, and then retry your requested operation."
70 echo "the root directory"
80 if git ls-files -u | grep ' 1 '; then
82 echo "MERGE CONFLICT."
83 echo "change into the \"$1\" project directory, and then:"
84 echo "- edit the files mentioned above with your favorite editor,"
85 echo " and fix the conflicts (marked with <<<<<<< blocks)"
86 echo "- for binary files, you can select the files using"
87 echo " git checkout --ours or git checkout --theirs"
88 echo "- when done with a file, 'git add' the file"
89 echo "- when done, 'git commit'"
98 while [ x"$yesno" != x"y" -a x"$yesno" != x"n" ]; do
109 check_mergeconflict "$1"
114 data/xonotic-data.pk3dir | | master |
115 data/xonotic-music.pk3dir | | master |
116 data/xonotic-nexcompat.pk3dir | | master | no
117 darkplaces | | div0-stable | svn
118 netradiant | | master |
119 div0-gittools | | master | no
120 d0_blind_id | http://github.com/divVerent/d0_blind_id.git | master |
121 data/xonotic-maps.pk3dir | | master |
122 mediasource | | master | no
123 fteqcc | http://github.com/Blub/qclib.git | master |
125 # todo: in darkplaces, change repobranch to div0-stable
127 repos=`echo "$repos_urls" | grep . | cut -d '|' -f 1 | tr -d ' '`
129 base=`git config remote.origin.url`
132 base=${base%xonotic.git}
135 echo "The main repo is not xonotic.git, what have you done?"
139 pushbase=`git config remote.origin.pushurl || true`
142 pushbase=${pushbase%xonotic.git}
147 echo "The main repo is not xonotic.git, what have you done?"
154 repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
155 if [ -n "$repo_t" ]; then
165 if [ x"$1" = x"." ]; then
166 echo "$base""xonotic.git"
168 echo "$base${1##*/}.git"
175 [ -n "$pushbase" ] || return 0
176 repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
177 if [ -n "$repo_t" ]; then
182 echo "$pushbase$repo_t"
186 if [ x"$1" = x"." ]; then
187 echo "$pushbase""xonotic.git"
189 echo "$pushbase${1##*/}.git"
196 repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 3 | tr -d ' '`
197 if [ -n "$repo_t" ]; then
206 echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 4 | tr -d ' '
214 # if we have the dir, always keep it
216 msg "Repository $d enabled because it already exists"
220 # if .yes file exists, always keep it
221 if [ -f "$d.yes" ]; then
222 msg "Repository $d enabled by a .yes file"
226 # if we have .no file, skip
227 if [ -f "$d.no" ]; then
228 msg "Repository $d disabled by a .no file, delete $p.no to enable"
231 # if we have matching pk3, skip
232 if [ x"$p" != x"$d" ] && [ -f "$p" ]; then
233 msg "Repository $d disabled by matching .pk3 file, delete $p or create $d.yes to enable"
236 # if "no" flag is set, skip
239 msg "Repository $d disabled by default, create $d.yes to enable"
244 msg "Repository $d enabled by default"
251 if [ "$#" = 0 ]; then
257 fix_upstream_rebase()
259 if [ -z "$r_me" ] || [ -z "$r_other" ]; then
262 r_base=`git merge-base "$r_me" "$r_other"`
264 # no merge-base? upstream did filter-branch
265 if [ -n "$r_base" ]; then
266 # otherwise, check if the two histories are "similar"
267 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
268 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
270 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
271 r_lc_me=`echo "$r_l_me" | wc -l`
272 r_lc_other=`echo "$r_l_other" | wc -l`
273 r_lc_together=`{ echo "$r_l_me"; echo "$r_l_other"; } | sort -u | wc -l`
274 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
276 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
277 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
278 git reset --hard "$r_me"
288 fix_upstream_rebase_mergeok()
290 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
291 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
295 fix_upstream_rebase_mergefail()
297 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
298 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
304 verbose git config remote.origin.url "$1"
306 verbose git config remote.origin.pushurl "$2"
308 verbose git config --unset remote.origin.pushurl || true
310 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
311 verbose git config core.autocrlf input
312 if [ -z "`git config push.default || true`" ]; then
313 verbose git config push.default current # or is tracking better?
315 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
316 verbose git config filter.mapclean.smudge "cat"
324 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
325 7za a -tzip -mx=9 -x@"$ziplist" "$archive" "$@" || true
326 zip -9y -@<"$ziplist" "$archive" || true
338 enter "$d0/$d" verbose
339 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
345 pushurl=`repopushurl "$d"`
346 branch=`repobranch "$d"`
347 if [ -d "$d0/$d" ]; then
349 fix_git_config "$url" "$pushurl"
355 # enable the ssh URL for pushing
358 if [ -f ~/.ssh/id_rsa.pub ]; then
360 msg "A key already exists and no new one will be generated. If you"
361 msg "already have done the procedure for getting your key approved, you"
362 msg "can skip the following paragraph and already use the repository."
364 msg "To get access, your key has to be approved first. For that, visit"
365 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
366 msg "the \"Support\" tracker in the \"Repository\" category where you"
367 msg "apply for access and paste the following output into the issue:"
369 msg "`cat ~/.ssh/id_rsa.pub`"
371 msg "Note that you will only have write access to branches that start"
372 msg "with your user name."
373 elif [ -f ~/.ssh/id_dsa.pub ]; then
375 msg "A key already exists and no new one will be generated. If you"
376 msg "already have done the procedure for getting your key approved, you"
377 msg "can skip the following paragraph and already use the repository."
379 msg "To get access, your key has to be approved first. For that, visit"
380 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
381 msg "the \"Support\" tracker in the \"Repository\" category where you"
382 msg "apply for access and paste the following output into the issue:"
384 msg "`cat ~/.ssh/id_dsa.pub`"
386 msg "Note that you will only have write access to branches that start"
387 msg "with your user name."
390 msg "No key has been generated yet. One will be generated now."
391 msg "If other people are using your computer, it is recommended"
392 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
393 msg "when asked for a passphrase."
395 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
397 msg "To get access, your key has to be approved first. For that, visit"
398 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
399 msg "the \"Support\" tracker in the \"Repository\" category where you"
400 msg "apply for access and paste the following output into the issue:"
402 msg "`cat ~/.ssh/id_rsa.pub`"
404 msg "Note that you will only have write access to branches that start"
405 msg "with your user name."
413 if [ x"$1" = x"-N" ]; then
415 elif [ x"$1" = x"-p" ]; then
417 if [ x"$base" != x"ssh://xonotic@git.xonotic.org/" ]; then
418 pushbase=ssh://xonotic@git.xonotic.org/
420 elif [ x"$1" = x"-s" ]; then
422 base=ssh://xonotic@git.xonotic.org/
424 elif [ x"$1" = x"-g" ]; then
426 base=git://git.xonotic.org/xonotic/
427 elif [ x"$1" = x"-h" ]; then
429 base=http://git.xonotic.org/xonotic/
430 elif [ x"$1" = x"-l" ]; then
436 msg "Invalid location!"
437 msg "Possible locations for the -l option:"
438 msg " nl (Netherlands, run by merlijn)"
439 msg " de (Germany, run by divVerent)"
440 msg " default (currently nl)"
458 *://*.git.xonotic.org/*)
459 location=${base%%.git.xonotic.org/*}
460 location=${location##*://}
468 if [ -n "$location" ]; then
469 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
470 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
472 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
473 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
477 pushurl=`repopushurl .`
478 fix_git_config "$url" "$pushurl"
480 if $allow_pull || $fix_config; then
485 pushurl=`repopushurl "$d"`
486 branch=`repobranch "$d"`
487 if [ -d "$d0/$d" ]; then
489 enter "$d0/$d" verbose
490 r=`git symbolic-ref HEAD`
492 if git config branch.$r.remote >/dev/null 2>&1; then
493 if ! verbose git pull; then
494 fix_upstream_rebase_mergefail || true
495 check_mergeconflict "$d"
496 echo "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
499 fix_upstream_rebase_mergeok || true
504 checkself "$cmd" "$@"
506 verbose git remote prune origin
510 verbose git clone "$url" "$d0/$d"
511 enter "$d0/$d" verbose
512 fix_git_config "$url" "$pushurl"
513 if [ "$branch" != "master" ]; then
514 verbose git checkout --track -b "$branch" origin/"$branch"
521 misc/tools/xonotic-map-compiler-autobuild download
525 if [ x"$1" = x"-f" ]; then
531 if [ -z "$branch" ]; then
534 branch=${remote#origin/}
545 enter "$d0/$d" verbose
547 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
549 verbose git checkout $checkoutflags "$b"
550 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
552 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
555 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
557 verbose git checkout $checkoutflags "$b"
558 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
560 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
562 echo "WTF? Not even branch $b doesn't exist in $d"
567 checkself "$cmd" "$@"
571 echo "The requested branch was not found in any repository."
579 if [ -z "$branch" ]; then
583 if [ -z "$branch" ]; then
586 r=`git symbolic-ref HEAD`
593 dv=`visible_repo_name "$d"`
594 enter "$d0/$d" verbose
595 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
596 echo "Already having this branch in $dv."
598 if yesno "Branch in $dv?"; then
599 if [ -n "$srcbranch" ]; then
602 b=origin/"`repobranch "$d"`"
603 verbose git fetch origin || true
605 # TODO do this without pushing
606 verbose git checkout -b "$branch" "$b"
607 verbose git config "branch.$branch.remote" "$remote"
608 verbose git config "branch.$branch.merge" "refs/heads/$branch"
618 cd "$d0/$d" # am in a pipe, shouldn't use enter
619 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
624 while read -r d BRANCH REV TEXT; do
625 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
628 if [ x"$REV" = x"->" ]; then
631 BRANCH=${BRANCH#remotes/}
632 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
633 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
634 eval "r=\$branches_repos_$ID"
636 eval "branches_repos_$ID=\$r"
638 echo -n "$branches_list" | xargs -n 1 echo | sort -u | while IFS= read -r BRANCH; do
639 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
640 eval "r=\$branches_repos_$ID"
641 printf "%-60s %s\n" "$BRANCH" "$r"
648 dv=`visible_repo_name "$d"`
649 enter "$d0/$d" verbose
650 r=`git symbolic-ref HEAD`
652 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
653 # we have uncommitted changes
654 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
655 if ! verbose git merge origin/"`repobranch "$d"`"; then
656 check_mergeconflict "$d"
657 exit 1 # this should ALWAYS be fatal
667 dv=`visible_repo_name "$d"`
668 enter "$d0/$d" verbose
669 r=`git symbolic-ref HEAD`
671 diffdata=`git diff --color HEAD`
672 if [ -n "$diffdata" ]; then
673 # we have uncommitted changes
674 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" 'echo "$diffdata" | less -r'; then
675 verbose git commit -a
678 rem=`git config "branch.$r.remote" || echo origin`
679 bra=`git config "branch.$r.merge" || echo "$r"`
680 upstream="$rem/${bra#refs/heads/}"
681 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
682 upstream="origin/`repobranch "$d"`"
684 logdata=`git log --color "$upstream".."$r"`
685 if [ -n "$logdata" ]; then
686 if yesno "Push \"$r\" in $dv?" 'echo "$logdata" | less -r'; then
687 verbose git push "$rem" HEAD
690 if [ x"$submit" = x"-s" ]; then
693 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
707 snowleopardhack=false
708 if [ -z "$CC" ]; then
709 export CC="gcc -DSUPPORTIPV6"
726 export CC="$CC -g -mtune=native -march=native"
734 if [ -n "$WE_HATE_OUR_USERS" ]; then
735 TARGETS="sv-$debug cl-$debug"
736 elif [ x"`uname`" = x"Darwin" ]; then
739 TARGETS="sv-$debug cl-$debug sdl-$debug"
742 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
744 TARGETS="sv-$debug sdl-$debug"
747 export CC="$CC -I$PWD/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks/SDL.framework/Headers -F$PWD/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
749 TARGETS="sv-$debug cl-$debug sdl-$debug"
751 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
752 # if we give the command make the arg "", it will surely fail (invalid filename),
753 # so better handle it as an empty client option
756 elif [ -n "$1" ]; then
758 TARGETS_SAVE=$TARGETS
763 TARGETS="$TARGETS sdl-debug"
766 TARGETS="$TARGETS cl-debug"
767 if $snowleopardhack; then
768 export CC="$CC -arch i386"
772 TARGETS="$TARGETS cl-debug"
775 TARGETS="$TARGETS sv-debug"
778 BAD_TARGETS="$BAD_TARGETS $X"
782 if [ -n "$TARGETS" ]; then # at least a valid client
784 else # no valid client, let's assume this option is not meant to be a client then
785 TARGETS=$TARGETS_SAVE
789 if [ -z "$MAKEFLAGS" ]; then
790 if [ -f /proc/cpuinfo ]; then
791 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
792 if [ $ncpus -gt 1 ]; then
796 if [ -n "$WE_HATE_OUR_USERS" ]; then
797 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
801 enter "$d0/d0_blind_id" verbose
802 if ! $compiled0; then
803 # compilation of crypto library failed
804 # use binaries then, if we can...
806 if [ -n "$WE_HATE_OUR_USERS" ]; then
807 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
808 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
814 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
815 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
816 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
819 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
820 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
821 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
829 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
839 if [ -f Makefile ]; then
840 verbose make $MAKEFLAGS distclean
843 if ! [ -f Makefile ]; then
844 verbose sh autogen.sh
847 verbose make $MAKEFLAGS
850 enter "$d0/fteqcc" verbose
852 verbose make $MAKEFLAGS clean
854 verbose make $MAKEFLAGS
856 enter "$d0/data/xonotic-data.pk3dir" verbose
858 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
860 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
861 # 4 levels up: data, xonotic-data, qcsrc, server
863 enter "$d0/darkplaces" verbose
864 if [ x"$BAD_TARGETS" = x" " ]; then
865 echo "Warning: invalid empty client, default clients will be used."
868 verbose make $MAKEFLAGS clean
870 for T in $TARGETS; do
871 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
873 for T in $BAD_TARGETS; do
874 echo "Warning: discarded invalid client $T."
877 verbose "$SELF" update-maps
880 if [ -n "$WE_HATE_OUR_USERS" ]; then
882 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
883 elif [ x"`uname`" = x"Darwin" ]; then
884 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
885 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
888 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
892 sdl|glx|agl|dedicated)
901 if ! [ -x "darkplaces/darkplaces$client" ]; then
902 if [ -x "darkplaces/darkplaces$client.exe" ]; then
905 echo "Client darkplaces/darkplaces$client not found, aborting"
909 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
911 # if pulseaudio is running: USE IT
912 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
913 if ps -C pulseaudio >/dev/null; then
914 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
915 export SDL_AUDIODRIVER=pulse
922 if [ -n "$USE_GDB" ]; then
923 set -- gdb --args "$@"
924 elif which gdb >/dev/null 2>&1; then
925 set -- gdb --batch -x savecore.gdb --args "$@"
926 elif which catchsegv >/dev/null 2>&1; then
927 set -- catchsegv "$@"
931 if [ -f xonotic.core ]; then
932 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
933 gdb "$binary" xonotic.core
934 #elif yesno "You did not want to examine the core dump. Do you want to provide it - including your DarkPlaces checkout - to the Xonotic developers?"; then
935 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
937 # rm -f xonotic.core.tar.gz
939 echo "The core dump can be examined later by"
940 echo " gdb $binary xonotic.core"
946 if [ x"$1" = x"-k" ]; then
951 if verbose cd "$d0/$d"; then
963 patchdir=`mktemp -d -t save-patches.XXXXXX`
965 enter "$d0/$d" verbose
966 git branch -v -v | cut -c 3- | {
968 while read -r BRANCH REV UPSTREAM TEXT; do
971 UPSTREAM=${UPSTREAM#\[}
972 UPSTREAM=${UPSTREAM%\]}
973 UPSTREAM=${UPSTREAM%:*}
977 UPSTREAM=origin/"`repobranch "$d"`"
981 if [ x"$REV" = x"->" ]; then
984 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
985 echo "$d" > "$patchdir/$i/info.txt"
986 echo "$BRANCH" >> "$patchdir/$i/info.txt"
987 echo "$UPSTREAM" >> "$patchdir/$i/info.txt"
988 echo "$TRACK" >> "$patchdir/$i/info.txt"
991 rm -rf "$patchdir/$i"
996 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1001 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1002 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1004 for P in "$patchdir"/*/info.txt; do
1009 read -r UPSTREAM <&3
1011 verbose git checkout HEAD^0
1012 verbose git branch -D "$BRANCH"
1013 if [ x"$TRACK" = x"true" ]; then
1014 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1016 verbose git branch -b "$BRANCH" "$UPSTREAM"
1028 report=$report"$*$LF"
1033 report=$report" $*$LF"
1038 o=`"$@" | sed 's/^/ /' || true`
1042 enter "$d0/$d" verbose
1043 base="`repobranch "$d"`"
1045 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1046 case "${ref#refs/remotes/origin/}" in
1059 if [ -n "$branch" ]; then
1060 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1069 l0=`git rev-list "$base".."$ref" | wc -l`
1070 l1=`git rev-list master.."$ref" | wc -l`
1071 if [ $l0 -gt $l1 ]; then
1078 reportecho " Branch $ref:"
1079 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1080 logdata=`git log --color "$realbase".."$ref"`
1081 if [ -z "$logdata" ]; then
1082 reportecho4 "--> not merging, no changes vs master"
1083 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1084 git push origin :"${ref#refs/remotes/origin/}"
1085 reportecho4 "--> branch deleted"
1088 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1089 if [ -z "$diffdata" ]; then
1090 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1091 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ echo "$logdata"; } | less -r'; then
1092 git push origin :"${ref#refs/remotes/origin/}"
1093 reportecho4 "--> branch deleted"
1095 elif [ -z "$branch" ] && [ -n "$note" ]; then
1096 reportdo4 echo "$note"
1097 reportecho4 "--> not merging, already had this one rejected before"
1098 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ echo "$logdata"; echo "$diffdata"; } | less -r'; then
1099 git checkout "$realbase"
1100 org=`git rev-parse HEAD`
1101 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1102 git reset --hard "$org"
1103 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1105 reportecho4 "--> merge failed"
1106 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1107 git reset --hard "$org"
1108 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1110 reportecho4 "--> compile failed"
1111 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1112 git reset --hard "$org"
1113 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1114 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1115 if [ x"$note" = x"del" ]; then
1116 git push origin :"${ref#refs/remotes/origin/}"
1117 reportecho4 "--> test failed, branch deleted"
1118 elif [ -n "$note" ]; then
1119 reportdo4 echo "$note"
1120 reportecho4 "--> test failed"
1122 reportecho4 "--> test failed, postponed"
1126 case ",`repoflags "$d"`," in
1128 # we do quite a mess here... luckily we know $org
1129 git fetch # svn needs to be current
1130 git rebase -i --onto origin/master "$org"
1131 git svn dcommit --add-author-from
1132 git reset --hard "$org"
1135 git push origin HEAD
1138 reportecho4 "--> MERGED"
1139 if yesno "Delete original branch \"$ref\"?"; then
1140 git push origin :"${ref#refs/remotes/origin/}"
1141 reportecho4 "--> branch deleted"
1145 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1146 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1147 if [ x"$note" = x"del" ]; then
1148 git push origin :"${ref#refs/remotes/origin/}"
1149 reportecho4 "--> branch deleted"
1150 elif [ -n "$note" ]; then
1151 reportdo4 echo "$note"
1152 reportecho4 "--> rejected"
1154 reportecho4 "--> postponed"
1163 echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1175 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1176 # ./all clean --reclone
1179 if [ x"$X" = x"--reclone" ]; then
1186 elif [ x"$X" = x"-f" ]; then
1188 elif [ x"$X" = x"-u" ]; then
1190 elif [ x"$X" = x"-U" ]; then
1193 elif [ x"$X" = x"-fu" ]; then
1196 elif [ x"$X" = x"-fU" ]; then
1200 elif [ x"$X" = x"-m" ]; then
1202 elif [ x"$X" = x"-r" ]; then
1204 elif [ x"$X" = x"-D" ]; then
1217 if $gotoupstream; then
1219 msg "Must also use -f (delete local changes) when using -u"
1222 if $gotomaster; then
1223 if $fetchupstream; then
1224 verbose git fetch origin
1225 verbose git remote prune origin
1227 verbose git checkout -f "`repobranch "$d"`"
1228 verbose git reset --hard origin/"`repobranch "$d"`"
1230 r=`git symbolic-ref HEAD`
1232 rem=`git config "branch.$r.remote" || echo origin`
1233 bra=`git config "branch.$r.merge" || echo "$r"`
1234 upstream="$rem/${bra#refs/heads/}"
1235 if $fetchupstream; then
1236 verbose git fetch "$rem"
1237 verbose git remote prune "$rem"
1239 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1240 upstream="origin/`repobranch "$d"`"
1242 verbose git reset --hard "$upstream"
1244 elif $gotomaster; then
1246 verbose git checkout -f "`repobranch "$d"`"
1247 verbose git reset --hard
1249 verbose git checkout "`repobranch "$d"`"
1252 verbose git reset --hard
1254 if $rmuntracked; then
1257 verbose git clean -df
1260 verbose git clean -xdf
1264 if $killbranches; then
1265 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1266 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1267 verbose git branch -D "${B#refs/heads/}"
1270 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch -t master origin/master || true
1271 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch -t "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1273 checkself "$cmd" "$@"
1277 # release building goes here
1279 #"$SELF" each git clean -fxd
1280 case "$RELEASETYPE" in
1282 msg "Building a BETA"
1285 msg "Building a RELEASE"
1288 echo >&2 -n "$ESC[2J$ESC[H"
1295 msg " +---------------------------------------------------------.---+"
1297 msg " +---------------------------------------------------------^---+"
1299 msg " | / \ This is the official release build system. |"
1300 msg " | | | If you are not a member of the Xonotic Core Team, |"
1301 msg " | | STOP | you are not supposed to use this script and should |"
1302 msg " | | | instead use ./all compile to compile the engine |"
1303 msg " | \____/ and game code. |"
1305 msg " | [ I understand ] |"
1306 msg " +-------------------------------------------------------------+"
1308 # A LOT of build infrastructure is required:
1311 # - .ssh/config must be configured so the following
1312 # host names are reachable and have a compile
1313 # infrastructure set up:
1314 # - xonotic-build-linux32 (with gcc on x86)
1315 # - xonotic-build-linux64 (with gcc on x86_64)
1316 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1317 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1318 # and x86_64-w64-mingw32-g++)
1319 # - xonotic-build-osx (with Xcode and SDL.framework)
1320 # - AMD Compressonator installed in WINE
1321 # - ResEdit installed in WINE
1322 # - a lot of other requirements you will figure out
1323 # while reading the error messages
1324 # - environment variable RELEASETYPE set
1325 # - optionally, environment variable RELEASEDATE set
1330 verbose rm -rf Xonotic Xonotic*.zip
1331 verbose mkdir -p Xonotic
1332 if [ -n "$RELEASEDATE" ]; then
1333 verbose echo "$RELEASEDATE" > Xonotic/stamp.txt
1335 verbose date +%Y%m%d > Xonotic/stamp.txt
1337 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1339 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1341 verbose rm -rf misc/builddeps
1342 verbose mv misc/buildfiles/win32/* . || true
1343 verbose mv misc/buildfiles/win64 bin64 || true
1344 verbose mv misc/buildfiles/osx/* . || true
1345 verbose rm -rf misc/buildfiles
1346 verbose rm -rf misc/pki
1349 verbose cd darkplaces
1350 verbose git archive --format=tar HEAD
1352 verbose cd Xonotic/source/darkplaces
1357 verbose git archive --format=tar HEAD
1359 verbose cd Xonotic/source/fteqcc
1363 verbose cd data/xonotic-data.pk3dir
1364 verbose git archive --format=tar HEAD -- qcsrc Makefile
1366 verbose cd Xonotic/source
1369 rm -f Xonotic/key_15.d0pk
1371 release-compile-run)
1380 if [ -n "$targetfiles" ]; then
1381 case " $HOSTS_THAT_ARE_DISABLED " in
1386 case " $HOSTS_THAT_ARE_MYSELF " in
1388 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1389 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1390 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1391 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1392 for f in $targetfiles; do
1393 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1397 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1398 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1399 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1400 for f in $targetfiles; do
1401 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1405 # now rebrand the binaries...
1406 for f in $targetfiles; do
1407 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1410 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1412 d=`mktemp -d -t rebrand.XXXXXX`
1414 echo "-mygames" > darkplaces.opt
1415 zip -9r darkplaces.zip darkplaces.opt
1428 fteqcc_maketargets=$3
1430 darkplaces_maketargets=$5
1432 host=xonotic-build-$suffix
1433 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1434 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1436 release-engine-win32)
1437 verbose "$SELF" release-compile win32 \
1438 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -march=i686 -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DUSE_WSPIAPI_H -DSUPPORTIPV6" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN32RELEASE=1 D3D=0' \
1439 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1441 verbose "$SELF" release-compile win32 \
1442 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DUSE_WSPIAPI_H -DSUPPORTIPV6" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN32RELEASE=1 D3D=0' \
1444 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1446 release-engine-win64)
1447 verbose "$SELF" release-compile win64 \
1448 'STRIP=: DP_MAKE_TARGET=mingw CC="amd64-mingw32msvc-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DSUPPORTIPV6" WINDRES="amd64-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN64RELEASE=1 D3D=0' \
1449 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1450 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1451 verbose "$SELF" release-compile win64 \
1452 'STRIP=: DP_MAKE_TARGET=mingw CC="x86_64-w64-mingw32-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DSUPPORTIPV6" WINDRES="x86_64-w64-mingw32-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN64RELEASE=1 D3D=0' \
1454 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1457 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1458 verbose "$SELF" release-compile osx \
1459 'STRIP=: CC="gcc -g -arch i386 -arch ppc -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -I.deps/include -L.deps/lib -fno-reorder-blocks -DSUPPORTIPV6"' \
1460 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1461 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1462 verbose "$SELF" release-compile osx \
1463 'STRIP=: CC="gcc -g -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -I.deps/include -L.deps/lib -fno-reorder-blocks -DSUPPORTIPV6"' \
1465 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1467 release-engine-linux32)
1468 verbose "$SELF" release-compile linux32 \
1469 'STRIP=: CC="gcc -m32 -march=i686 -g -I.deps/include -L.deps/lib -DSUPPORTIPV6" DP_MODPLUG_STATIC_LIBDIR=.deps/lib LIB_JPEG=.deps/lib/libjpeg.a DP_CRYPTO_STATIC_LIBDIR=.deps/lib' \
1470 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1471 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1473 release-engine-linux64)
1474 verbose "$SELF" release-compile linux64 \
1475 'STRIP=: CC="gcc -m64 -g -I.deps/include -L.deps/lib -DSUPPORTIPV6" DP_MODPLUG_STATIC_LIBDIR=.deps/lib LIB_JPEG=.deps/lib/libjpeg.a DP_CRYPTO_STATIC_LIBDIR=.deps/lib' \
1476 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1477 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1480 verbose "$SELF" release-engine-linux32 &
1481 verbose "$SELF" release-engine-linux64 &
1482 verbose "$SELF" release-engine-win32 &
1483 verbose "$SELF" release-engine-win64 &
1484 verbose "$SELF" release-engine-osx &
1493 verbose "$SELF" update-maps
1496 case "$RELEASETYPE" in
1498 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1499 # back out of: source/qcsrc/server
1502 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1505 verbose rm -f Xonotic/source/*/fteqcc.log
1507 release-buildpk3-transform-raw)
1510 release-buildpk3-transform-normal)
1513 # texture: convert to jpeg and dds
1514 verbose export do_jpeg=true
1515 verbose export jpeg_qual_rgb=95
1516 verbose export jpeg_qual_a=99
1517 verbose export do_dds=true
1518 verbose export dds_flags=
1519 verbose export do_ogg=false
1520 verbose export del_src=true
1521 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1523 release-buildpk3-transform-low)
1526 # texture: convert to jpeg and dds
1527 # music: reduce bitrate
1528 verbose export do_jpeg=true
1529 verbose export jpeg_qual_rgb=80
1530 verbose export jpeg_qual_a=99
1531 verbose export do_dds=false
1532 verbose export do_ogg=true
1533 verbose export ogg_qual=1
1534 verbose export del_src=true
1535 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1537 release-buildpk3-transform-lowdds)
1540 # texture: convert to jpeg and dds
1541 # music: reduce bitrate
1542 verbose export do_jpeg=false
1543 verbose export do_jpeg_if_not_dds=true
1544 verbose export jpeg_qual_rgb=80
1545 verbose export jpeg_qual_a=99
1546 verbose export do_dds=true
1547 verbose export dds_flags=
1548 verbose export do_ogg=true
1549 verbose export ogg_qual=1
1550 verbose export del_src=true
1551 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1564 verbose rm -rf Xonotic/temp
1565 verbose mkdir -p Xonotic/temp
1568 verbose git archive --format=tar HEAD
1570 verbose cd Xonotic/temp
1573 verbose cd Xonotic/temp
1574 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1575 verbose cp ../source/progs.dat .
1576 verbose cp ../source/csprogs.dat .
1577 verbose cp ../source/menu.dat .
1578 verbose rm -rf qcsrc
1579 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1580 major=$(($gv / 10000))
1581 minor=$(($gv / 100 - $major * 100))
1582 patch=$(($gv - $major * 10000 - $minor * 100))
1583 versionstr="$major.$minor.$patch"
1584 case "$RELEASETYPE" in
1586 versionstr="$versionstr""beta"
1590 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1591 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1592 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1593 " defaultXonotic.cfg
1595 verbose cd gfx/menu/luminos
1596 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1597 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1598 verbose rm background_l2.svg
1601 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1602 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1603 if [ -f "$X" ]; then
1605 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1609 verbose export git_src_repo="$d0/$src" # skip hash-object
1610 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1611 verbose mkzip "../../$dst" *
1613 verbose rm -rf Xonotic/temp
1616 stamp=`cat Xonotic/stamp.txt`
1622 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1628 while [ "$#" -gt 1 ]; do
1629 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1635 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1636 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1637 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1638 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1639 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1641 release-pack-needsx11)
1644 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1647 verbose "$SELF" release-pack
1652 stamp=`cat Xonotic/stamp.txt`
1653 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1654 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1655 # let's pass crypto import laws of some nasty countries
1656 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1657 if [ -n "$crypto_libs" ]; then
1658 verbose mkzip Xonotic-$stamp-crypto.zip \
1662 # build the archives
1663 verbose mkzip Xonotic-$stamp-engine.zip \
1665 Xonotic/bin64/*.dll \
1668 Xonotic/xonotic.exe \
1669 Xonotic/source/darkplaces/
1670 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1671 verbose mkzip Xonotic-$stamp-common.zip \
1672 Xonotic/source/fteqcc/ \
1673 Xonotic/source/qcsrc/ \
1678 Xonotic/key_0.d0pk \
1679 Xonotic/data/font-nimbussansl-$stamp.pk3
1680 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1681 verbose mkzip0 Xonotic-$stamp.zip \
1682 Xonotic/data/xonotic-$stamp-data.pk3 \
1683 Xonotic/data/xonotic-$stamp-maps.pk3 \
1684 Xonotic/data/xonotic-$stamp-music.pk3 \
1685 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1686 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1687 verbose mkzip0 Xonotic-$stamp-low.zip \
1688 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1689 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1690 Xonotic/data/xonotic-$stamp-music-low.pk3
1691 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1692 # verbose mkzip0 Xonotic-$stamp-high.zip \
1693 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1694 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1695 # Xonotic/data/xonotic-$stamp-music.pk3 \
1696 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1697 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1698 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1699 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1700 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1701 Xonotic/data/xonotic-$stamp-music-low.pk3
1704 verbose "$SELF" release-prepare
1705 verbose "$SELF" release-maps
1706 verbose "$SELF" release-engine
1707 verbose "$SELF" release-qc
1708 verbose "$SELF" release-pack-needsx11
1709 verbose "$SELF" release-zip
1714 echo " $SELF admin-merge [<branch>]"
1715 echo " $SELF branch <branch>"
1716 echo " $SELF branch <remote> <branch> [<srcbranch>]"
1717 echo " $SELF branches"
1718 echo " $SELF checkout|switch <branch>"
1719 echo " $SELF checkout|switch <remote>/<branch>"
1720 echo " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1721 echo " $SELF clean --reclone"
1722 echo " $SELF compile [-c] [-r] [-0]"
1723 echo " $SELF each|foreach [-k] command..."
1724 echo " $SELF fix_upstream_rebase"
1725 echo " $SELF keygen"
1727 echo " $SELF push|commit [-s]"
1728 echo " $SELF release"
1729 echo " $SELF restore-patches"
1730 echo " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1731 echo " $SELF save-patches"
1732 echo " $SELF update-maps"
1733 echo " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"