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 git config filter.mapclean.clean "grep ^[^/]"
316 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 if [ -z "$CC" ]; then
708 export CC="gcc -DSUPPORTIPV6"
724 export CC="$CC -g -mtune=native -march=native"
732 if [ -n "$WE_HATE_OUR_USERS" ]; then
733 TARGETS="sv-$debug cl-$debug"
734 elif [ x"`uname`" = x"Darwin" ]; then
737 TARGETS="sv-$debug cl-$debug sdl-$debug"
740 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
741 TARGETS="sv-$debug sdl-$debug"
744 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"
746 TARGETS="sv-$debug cl-$debug sdl-$debug"
748 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
749 # if we give the command make the arg "", it will surely fail (invalid filename),
750 # so better handle it as an empty client option
753 elif [ -n "$1" ]; then
755 TARGETS_SAVE=$TARGETS
760 TARGETS="$TARGETS sdl-debug"
763 TARGETS="$TARGETS cl-debug"
766 TARGETS="$TARGETS sv-debug"
769 BAD_TARGETS="$BAD_TARGETS $X"
773 if [ -n "$TARGETS" ]; then # at least a valid client
775 else # no valid client, let's assume this option is not meant to be a client then
776 TARGETS=$TARGETS_SAVE
780 if [ -z "$MAKEFLAGS" ]; then
781 if [ -f /proc/cpuinfo ]; then
782 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
783 if [ $ncpus -gt 1 ]; then
787 if [ -n "$WE_HATE_OUR_USERS" ]; then
788 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
792 enter "$d0/d0_blind_id" verbose
793 if ! $compiled0; then
794 # compilation of crypto library failed
795 # use binaries then, if we can...
797 if [ -n "$WE_HATE_OUR_USERS" ]; then
798 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
799 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
805 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
806 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
807 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
810 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
811 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
812 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
820 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
830 if [ -f Makefile ]; then
831 verbose make $MAKEFLAGS distclean
834 if ! [ -f Makefile ]; then
835 verbose sh autogen.sh
838 verbose make $MAKEFLAGS
841 enter "$d0/fteqcc" verbose
843 verbose make $MAKEFLAGS clean
845 verbose make $MAKEFLAGS
847 enter "$d0/data/xonotic-data.pk3dir" verbose
849 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
851 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
852 # 4 levels up: data, xonotic-data, qcsrc, server
854 enter "$d0/darkplaces" verbose
855 if [ x"$BAD_TARGETS" = x" " ]; then
856 echo "Warning: invalid empty client, default clients will be used."
859 verbose make $MAKEFLAGS clean
861 for T in $TARGETS; do
862 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
864 for T in $BAD_TARGETS; do
865 echo "Warning: discarded invalid client $T."
868 verbose "$SELF" update-maps
871 if [ -n "$WE_HATE_OUR_USERS" ]; then
873 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
874 elif [ x"`uname`" = x"Darwin" ]; then
875 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
876 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
879 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
883 sdl|glx|agl|dedicated)
892 if ! [ -x "darkplaces/darkplaces$client" ]; then
893 if [ -x "darkplaces/darkplaces$client.exe" ]; then
896 echo "Client darkplaces/darkplaces$client not found, aborting"
900 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
902 # if pulseaudio is running: USE IT
903 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
904 if ps -C pulseaudio >/dev/null; then
905 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
906 export SDL_AUDIODRIVER=pulse
913 if [ -n "$USE_GDB" ]; then
914 set -- gdb --args "$@"
915 elif which gdb >/dev/null 2>&1; then
916 set -- gdb --batch -x savecore.gdb --args "$@"
917 elif which catchsegv >/dev/null 2>&1; then
918 set -- catchsegv "$@"
922 if [ -f xonotic.core ]; then
923 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
924 gdb "$binary" xonotic.core
925 #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
926 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
928 # rm -f xonotic.core.tar.gz
930 echo "The core dump can be examined later by"
931 echo " gdb $binary xonotic.core"
937 if [ x"$1" = x"-k" ]; then
942 if verbose cd "$d0/$d"; then
954 patchdir=`mktemp -d -t save-patches.XXXXXX`
956 enter "$d0/$d" verbose
957 git branch -v -v | cut -c 3- | {
959 while read -r BRANCH REV UPSTREAM TEXT; do
962 UPSTREAM=${UPSTREAM#\[}
963 UPSTREAM=${UPSTREAM%\]}
964 UPSTREAM=${UPSTREAM%:*}
968 UPSTREAM=origin/"`repobranch "$d"`"
972 if [ x"$REV" = x"->" ]; then
975 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
976 echo "$d" > "$patchdir/$i/info.txt"
977 echo "$BRANCH" >> "$patchdir/$i/info.txt"
978 echo "$UPSTREAM" >> "$patchdir/$i/info.txt"
979 echo "$TRACK" >> "$patchdir/$i/info.txt"
982 rm -rf "$patchdir/$i"
987 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
992 patchdir=`mktemp -d -t restore-patches.XXXXXX`
993 ( cd "$patchdir" && tar xvzf - ) < "$infile"
995 for P in "$patchdir"/*/info.txt; do
1000 read -r UPSTREAM <&3
1002 verbose git checkout HEAD^0
1003 verbose git branch -D "$BRANCH"
1004 if [ x"$TRACK" = x"true" ]; then
1005 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1007 verbose git branch -b "$BRANCH" "$UPSTREAM"
1019 report=$report"$*$LF"
1024 report=$report" $*$LF"
1029 o=`"$@" | sed 's/^/ /' || true`
1033 enter "$d0/$d" verbose
1034 base="`repobranch "$d"`"
1036 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1037 case "${ref#refs/remotes/origin/}" in
1050 if [ -n "$branch" ]; then
1051 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1060 l0=`git rev-list "$base".."$ref" | wc -l`
1061 l1=`git rev-list master.."$ref" | wc -l`
1062 if [ $l0 -gt $l1 ]; then
1069 reportecho " Branch $ref:"
1070 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1071 logdata=`git log --color "$realbase".."$ref"`
1072 if [ -z "$logdata" ]; then
1073 reportecho4 "--> not merging, no changes vs master"
1074 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1075 git push origin :"${ref#refs/remotes/origin/}"
1076 reportecho4 "--> branch deleted"
1079 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1080 if [ -z "$diffdata" ]; then
1081 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1082 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ echo "$logdata"; } | less -r'; then
1083 git push origin :"${ref#refs/remotes/origin/}"
1084 reportecho4 "--> branch deleted"
1086 elif [ -z "$branch" ] && [ -n "$note" ]; then
1087 reportdo4 echo "$note"
1088 reportecho4 "--> not merging, already had this one rejected before"
1089 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ echo "$logdata"; echo "$diffdata"; } | less -r'; then
1090 git checkout "$realbase"
1091 org=`git rev-parse HEAD`
1092 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1093 git reset --hard "$org"
1094 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1096 reportecho4 "--> merge failed"
1097 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1098 git reset --hard "$org"
1099 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1101 reportecho4 "--> compile failed"
1102 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1103 git reset --hard "$org"
1104 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1105 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1106 if [ x"$note" = x"del" ]; then
1107 git push origin :"${ref#refs/remotes/origin/}"
1108 reportecho4 "--> test failed, branch deleted"
1109 elif [ -n "$note" ]; then
1110 reportdo4 echo "$note"
1111 reportecho4 "--> test failed"
1113 reportecho4 "--> test failed, postponed"
1117 case ",`repoflags "$d"`," in
1119 # we do quite a mess here... luckily we know $org
1120 git fetch # svn needs to be current
1121 git rebase -i --onto origin/master "$org"
1122 git svn dcommit --add-author-from
1123 git reset --hard "$org"
1126 git push origin HEAD
1129 reportecho4 "--> MERGED"
1130 if yesno "Delete original branch \"$ref\"?"; then
1131 git push origin :"${ref#refs/remotes/origin/}"
1132 reportecho4 "--> branch deleted"
1136 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1137 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1138 if [ x"$note" = x"del" ]; then
1139 git push origin :"${ref#refs/remotes/origin/}"
1140 reportecho4 "--> branch deleted"
1141 elif [ -n "$note" ]; then
1142 reportdo4 echo "$note"
1143 reportecho4 "--> rejected"
1145 reportecho4 "--> postponed"
1154 echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1166 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1167 # ./all clean --reclone
1170 if [ x"$1" = x"--reclone" ]; then
1177 elif [ x"$1" = x"-f" ]; then
1179 elif [ x"$1" = x"-u" ]; then
1181 elif [ x"$1" = x"-U" ]; then
1184 elif [ x"$1" = x"-fu" ]; then
1187 elif [ x"$1" = x"-fU" ]; then
1191 elif [ x"$1" = x"-m" ]; then
1193 elif [ x"$1" = x"-r" ]; then
1195 elif [ x"$1" = x"-D" ]; then
1208 if $gotoupstream; then
1210 msg "Must also use -f (delete local changes) when using -u"
1213 if $gotomaster; then
1214 if $fetchupstream; then
1215 verbose git fetch origin
1216 verbose git remote prune origin
1218 verbose git checkout -f "`repobranch "$d"`"
1219 verbose git reset --hard origin/"`repobranch "$d"`"
1221 r=`git symbolic-ref HEAD`
1223 rem=`git config "branch.$r.remote" || echo origin`
1224 bra=`git config "branch.$r.merge" || echo "$r"`
1225 upstream="$rem/${bra#refs/heads/}"
1226 if $fetchupstream; then
1227 verbose git fetch "$rem"
1228 verbose git remote prune "$rem"
1230 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1231 upstream="origin/`repobranch "$d"`"
1233 verbose git reset --hard "$upstream"
1235 elif $gotomaster; then
1237 verbose git checkout -f "`repobranch "$d"`"
1238 verbose git reset --hard
1240 verbose git checkout "`repobranch "$d"`"
1243 verbose git reset --hard
1245 if $rmuntracked; then
1248 verbose git clean -df
1251 verbose git clean -xdf
1255 if $killbranches; then
1256 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1257 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1258 verbose git branch -D "${B#refs/heads/}"
1261 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch -t master origin/master || true
1262 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch -t "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1267 # release building goes here
1269 #"$SELF" each git clean -fxd
1270 case "$RELEASETYPE" in
1272 msg "Building a BETA"
1275 msg "Building a RELEASE"
1278 echo >&2 -n "$ESC[2J$ESC[H"
1285 msg " +---------------------------------------------------------.---+"
1287 msg " +---------------------------------------------------------^---+"
1289 msg " | / \ This is the official release build system. |"
1290 msg " | | | If you are not a member of the Xonotic Core Team, |"
1291 msg " | | STOP | you are not supposed to use this script and should |"
1292 msg " | | | instead use ./all compile to compile the engine |"
1293 msg " | \____/ and game code. |"
1295 msg " | [ I understand ] |"
1296 msg " +-------------------------------------------------------------+"
1298 # A LOT of build infrastructure is required:
1301 # - .ssh/config must be configured so the following
1302 # host names are reachable and have a compile
1303 # infrastructure set up:
1304 # - xonotic-build-linux32 (with gcc on x86)
1305 # - xonotic-build-linux64 (with gcc on x86_64)
1306 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1307 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1308 # and x86_64-w64-mingw32-g++)
1309 # - xonotic-build-osx (with Xcode and SDL.framework)
1310 # - AMD Compressonator installed in WINE
1311 # - ResEdit installed in WINE
1312 # - a lot of other requirements you will figure out
1313 # while reading the error messages
1314 # - environment variable RELEASETYPE set
1315 # - optionally, environment variable RELEASEDATE set
1320 verbose rm -rf Xonotic Xonotic*.zip
1321 verbose mkdir -p Xonotic
1322 if [ -n "$RELEASEDATE" ]; then
1323 verbose echo "$RELEASEDATE" > Xonotic/stamp.txt
1325 verbose date +%Y%m%d > Xonotic/stamp.txt
1327 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1329 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1331 verbose rm -rf misc/builddeps
1332 verbose mv misc/buildfiles/win32/* . || true
1333 verbose mv misc/buildfiles/win64 bin64 || true
1334 verbose mv misc/buildfiles/osx/* . || true
1335 verbose rm -rf misc/buildfiles
1336 verbose rm -rf misc/pki
1339 verbose cd darkplaces
1340 verbose git archive --format=tar HEAD
1342 verbose cd Xonotic/source/darkplaces
1347 verbose git archive --format=tar HEAD
1349 verbose cd Xonotic/source/fteqcc
1353 verbose cd data/xonotic-data.pk3dir
1354 verbose git archive --format=tar HEAD -- qcsrc Makefile
1356 verbose cd Xonotic/source
1359 rm -f Xonotic/key_15.d0pk
1361 release-compile-run)
1370 if [ -n "$targetfiles" ]; then
1371 case " $HOSTS_THAT_ARE_DISABLED " in
1376 case " $HOSTS_THAT_ARE_MYSELF " in
1378 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1379 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1380 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1381 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1382 for f in $targetfiles; do
1383 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1387 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1388 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1389 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1390 for f in $targetfiles; do
1391 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1395 # now rebrand the binaries...
1396 for f in $targetfiles; do
1397 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1400 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "$f"
1402 d=`mktemp -d -t rebrand.XXXXXX`
1404 echo "-mygames" > darkplaces.opt
1405 zip -9r darkplaces.zip darkplaces.opt
1418 fteqcc_maketargets=$3
1420 darkplaces_maketargets=$5
1422 host=xonotic-build-$suffix
1423 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1424 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1426 release-engine-win32)
1427 verbose "$SELF" release-compile win32 \
1428 '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' \
1429 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1431 verbose "$SELF" release-compile win32 \
1432 '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' \
1434 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1436 release-engine-win64)
1437 verbose "$SELF" release-compile win64 \
1438 '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' \
1439 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1440 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1441 verbose "$SELF" release-compile win64 \
1442 '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' \
1444 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1447 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1448 verbose "$SELF" release-compile osx \
1449 '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"' \
1450 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1451 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1452 verbose "$SELF" release-compile osx \
1453 '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"' \
1455 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1457 release-engine-linux32)
1458 verbose "$SELF" release-compile linux32 \
1459 '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' \
1460 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1461 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1463 release-engine-linux64)
1464 verbose "$SELF" release-compile linux64 \
1465 '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' \
1466 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1467 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1470 verbose "$SELF" release-engine-linux32 &
1471 verbose "$SELF" release-engine-linux64 &
1472 verbose "$SELF" release-engine-win32 &
1473 verbose "$SELF" release-engine-win64 &
1474 verbose "$SELF" release-engine-osx &
1483 verbose "$SELF" update-maps
1486 case "$RELEASETYPE" in
1488 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1489 # back out of: source/qcsrc/server
1492 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1495 verbose rm -f Xonotic/source/*/fteqcc.log
1497 release-buildpk3-transform-raw)
1500 release-buildpk3-transform-normal)
1503 # texture: convert to jpeg and dds
1504 verbose export do_jpeg=true
1505 verbose export jpeg_qual_rgb=95
1506 verbose export jpeg_qual_a=99
1507 verbose export do_dds=true
1508 verbose export dds_flags=
1509 verbose export do_ogg=false
1510 verbose export del_src=true
1511 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1513 release-buildpk3-transform-low)
1516 # texture: convert to jpeg and dds
1517 # music: reduce bitrate
1518 verbose export do_jpeg=true
1519 verbose export jpeg_qual_rgb=80
1520 verbose export jpeg_qual_a=95
1521 verbose export do_dds=false
1522 verbose export do_ogg=true
1523 verbose export ogg_qual=1
1524 verbose export del_src=true
1525 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1527 release-buildpk3-transform-lowdds)
1530 # texture: convert to jpeg and dds
1531 # music: reduce bitrate
1532 verbose export do_jpeg=false
1533 verbose export do_jpeg_if_not_dds=true
1534 verbose export jpeg_qual_rgb=80
1535 verbose export jpeg_qual_a=95
1536 verbose export do_dds=true
1537 verbose export dds_flags=
1538 verbose export do_ogg=true
1539 verbose export ogg_qual=1
1540 verbose export del_src=true
1541 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1554 verbose rm -rf Xonotic/temp
1555 verbose mkdir -p Xonotic/temp
1558 verbose git archive --format=tar HEAD
1560 verbose cd Xonotic/temp
1563 verbose cd Xonotic/temp
1564 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1565 verbose cp ../source/progs.dat .
1566 verbose cp ../source/csprogs.dat .
1567 verbose cp ../source/menu.dat .
1568 verbose rm -rf qcsrc
1569 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1570 major=$(($gv / 10000))
1571 minor=$(($gv / 100 - $major * 100))
1572 patch=$(($gv - $major * 10000 - $minor * 100))
1573 versionstr="$major.$minor.$patch"
1574 case "$RELEASETYPE" in
1576 versionstr="$versionstr""beta"
1580 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1581 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1582 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1583 " defaultXonotic.cfg
1585 verbose cd gfx/menu/luminos
1586 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1587 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1588 verbose rm background_l2.svg
1591 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1592 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1593 if [ -f "$X" ]; then
1595 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1599 verbose export git_src_repo="$d0/$src" # skip hash-object
1600 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1601 verbose mkzip "../../$dst" *
1603 verbose rm -rf Xonotic/temp
1606 stamp=`cat Xonotic/stamp.txt`
1612 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1618 while [ "$#" -gt 1 ]; do
1619 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1625 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1626 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1627 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1628 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1629 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1631 release-pack-needsx11)
1634 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1637 verbose "$SELF" release-pack
1642 stamp=`cat Xonotic/stamp.txt`
1643 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1644 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1645 # let's pass crypto import laws of some nasty countries
1646 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1647 if [ -n "$crypto_libs" ]; then
1648 verbose mkzip Xonotic-$stamp-crypto.zip \
1652 # build the archives
1653 verbose mkzip Xonotic-$stamp-engine.zip \
1655 Xonotic/bin64/*.dll \
1658 Xonotic/xonotic.exe \
1659 Xonotic/source/darkplaces/
1660 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1661 verbose mkzip Xonotic-$stamp-common.zip \
1662 Xonotic/source/fteqcc/ \
1663 Xonotic/source/qcsrc/ \
1668 Xonotic/key_0.d0pk \
1669 Xonotic/data/font-nimbussansl-$stamp.pk3
1670 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1671 verbose mkzip0 Xonotic-$stamp.zip \
1672 Xonotic/data/xonotic-$stamp-data.pk3 \
1673 Xonotic/data/xonotic-$stamp-maps.pk3 \
1674 Xonotic/data/xonotic-$stamp-music.pk3 \
1675 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1676 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1677 verbose mkzip0 Xonotic-$stamp-low.zip \
1678 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1679 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1680 Xonotic/data/xonotic-$stamp-music-low.pk3
1681 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1682 # verbose mkzip0 Xonotic-$stamp-high.zip \
1683 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1684 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1685 # Xonotic/data/xonotic-$stamp-music.pk3 \
1686 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1687 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1688 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1689 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1690 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1691 Xonotic/data/xonotic-$stamp-music-low.pk3
1694 verbose "$SELF" release-prepare
1695 verbose "$SELF" release-maps
1696 verbose "$SELF" release-engine
1697 verbose "$SELF" release-qc
1698 verbose "$SELF" release-pack-needsx11
1699 verbose "$SELF" release-zip
1704 echo " $SELF admin-merge [<branch>]"
1705 echo " $SELF branch <branch>"
1706 echo " $SELF branch <remote> <branch> [<srcbranch>]"
1707 echo " $SELF branches"
1708 echo " $SELF checkout|switch <branch>"
1709 echo " $SELF checkout|switch <remote>/<branch>"
1710 echo " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1711 echo " $SELF clean --reclone"
1712 echo " $SELF compile [-c] [-r] [-0]"
1713 echo " $SELF each|foreach [-k] command..."
1714 echo " $SELF fix_upstream_rebase"
1715 echo " $SELF keygen"
1717 echo " $SELF push|commit [-s]"
1718 echo " $SELF release"
1719 echo " $SELF restore-patches"
1720 echo " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1721 echo " $SELF save-patches"
1722 echo " $SELF update-maps"
1723 echo " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"