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 if [ -z "$CC" ]; then
708 export CC="gcc -DSUPPORTIPV6"
725 export CC="$CC -g -mtune=native -march=native"
733 if [ -n "$WE_HATE_OUR_USERS" ]; then
734 TARGETS="sv-$debug cl-$debug"
735 elif [ x"`uname`" = x"Darwin" ]; then
738 TARGETS="sv-$debug cl-$debug sdl-$debug"
741 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
742 TARGETS="sv-$debug sdl-$debug"
745 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"
747 TARGETS="sv-$debug cl-$debug sdl-$debug"
749 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
750 # if we give the command make the arg "", it will surely fail (invalid filename),
751 # so better handle it as an empty client option
754 elif [ -n "$1" ]; then
756 TARGETS_SAVE=$TARGETS
761 TARGETS="$TARGETS sdl-debug"
764 TARGETS="$TARGETS cl-debug"
767 TARGETS="$TARGETS sv-debug"
770 BAD_TARGETS="$BAD_TARGETS $X"
774 if [ -n "$TARGETS" ]; then # at least a valid client
776 else # no valid client, let's assume this option is not meant to be a client then
777 TARGETS=$TARGETS_SAVE
781 if [ -z "$MAKEFLAGS" ]; then
782 if [ -f /proc/cpuinfo ]; then
783 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
784 if [ $ncpus -gt 1 ]; then
788 if [ -n "$WE_HATE_OUR_USERS" ]; then
789 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
793 enter "$d0/d0_blind_id" verbose
794 if ! $compiled0; then
795 # compilation of crypto library failed
796 # use binaries then, if we can...
798 if [ -n "$WE_HATE_OUR_USERS" ]; then
799 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
800 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
806 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
807 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
808 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
811 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
812 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
813 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
821 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
831 if [ -f Makefile ]; then
832 verbose make $MAKEFLAGS distclean
835 if ! [ -f Makefile ]; then
836 verbose sh autogen.sh
839 verbose make $MAKEFLAGS
842 enter "$d0/fteqcc" verbose
844 verbose make $MAKEFLAGS clean
846 verbose make $MAKEFLAGS
848 enter "$d0/data/xonotic-data.pk3dir" verbose
850 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
852 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
853 # 4 levels up: data, xonotic-data, qcsrc, server
855 enter "$d0/darkplaces" verbose
856 if [ x"$BAD_TARGETS" = x" " ]; then
857 echo "Warning: invalid empty client, default clients will be used."
860 verbose make $MAKEFLAGS clean
862 for T in $TARGETS; do
863 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
865 for T in $BAD_TARGETS; do
866 echo "Warning: discarded invalid client $T."
869 verbose "$SELF" update-maps
872 if [ -n "$WE_HATE_OUR_USERS" ]; then
874 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
875 elif [ x"`uname`" = x"Darwin" ]; then
876 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
877 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
880 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
884 sdl|glx|agl|dedicated)
893 if ! [ -x "darkplaces/darkplaces$client" ]; then
894 if [ -x "darkplaces/darkplaces$client.exe" ]; then
897 echo "Client darkplaces/darkplaces$client not found, aborting"
901 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
903 # if pulseaudio is running: USE IT
904 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
905 if ps -C pulseaudio >/dev/null; then
906 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
907 export SDL_AUDIODRIVER=pulse
914 if [ -n "$USE_GDB" ]; then
915 set -- gdb --args "$@"
916 elif which gdb >/dev/null 2>&1; then
917 set -- gdb --batch -x savecore.gdb --args "$@"
918 elif which catchsegv >/dev/null 2>&1; then
919 set -- catchsegv "$@"
923 if [ -f xonotic.core ]; then
924 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
925 gdb "$binary" xonotic.core
926 #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
927 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
929 # rm -f xonotic.core.tar.gz
931 echo "The core dump can be examined later by"
932 echo " gdb $binary xonotic.core"
938 if [ x"$1" = x"-k" ]; then
943 if verbose cd "$d0/$d"; then
955 patchdir=`mktemp -d -t save-patches.XXXXXX`
957 enter "$d0/$d" verbose
958 git branch -v -v | cut -c 3- | {
960 while read -r BRANCH REV UPSTREAM TEXT; do
963 UPSTREAM=${UPSTREAM#\[}
964 UPSTREAM=${UPSTREAM%\]}
965 UPSTREAM=${UPSTREAM%:*}
969 UPSTREAM=origin/"`repobranch "$d"`"
973 if [ x"$REV" = x"->" ]; then
976 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
977 echo "$d" > "$patchdir/$i/info.txt"
978 echo "$BRANCH" >> "$patchdir/$i/info.txt"
979 echo "$UPSTREAM" >> "$patchdir/$i/info.txt"
980 echo "$TRACK" >> "$patchdir/$i/info.txt"
983 rm -rf "$patchdir/$i"
988 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
993 patchdir=`mktemp -d -t restore-patches.XXXXXX`
994 ( cd "$patchdir" && tar xvzf - ) < "$infile"
996 for P in "$patchdir"/*/info.txt; do
1001 read -r UPSTREAM <&3
1003 verbose git checkout HEAD^0
1004 verbose git branch -D "$BRANCH"
1005 if [ x"$TRACK" = x"true" ]; then
1006 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1008 verbose git branch -b "$BRANCH" "$UPSTREAM"
1020 report=$report"$*$LF"
1025 report=$report" $*$LF"
1030 o=`"$@" | sed 's/^/ /' || true`
1034 enter "$d0/$d" verbose
1035 base="`repobranch "$d"`"
1037 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1038 case "${ref#refs/remotes/origin/}" in
1051 if [ -n "$branch" ]; then
1052 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1061 l0=`git rev-list "$base".."$ref" | wc -l`
1062 l1=`git rev-list master.."$ref" | wc -l`
1063 if [ $l0 -gt $l1 ]; then
1070 reportecho " Branch $ref:"
1071 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1072 logdata=`git log --color "$realbase".."$ref"`
1073 if [ -z "$logdata" ]; then
1074 reportecho4 "--> not merging, no changes vs master"
1075 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1076 git push origin :"${ref#refs/remotes/origin/}"
1077 reportecho4 "--> branch deleted"
1080 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1081 if [ -z "$diffdata" ]; then
1082 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1083 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ echo "$logdata"; } | less -r'; then
1084 git push origin :"${ref#refs/remotes/origin/}"
1085 reportecho4 "--> branch deleted"
1087 elif [ -z "$branch" ] && [ -n "$note" ]; then
1088 reportdo4 echo "$note"
1089 reportecho4 "--> not merging, already had this one rejected before"
1090 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ echo "$logdata"; echo "$diffdata"; } | less -r'; then
1091 git checkout "$realbase"
1092 org=`git rev-parse HEAD`
1093 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1094 git reset --hard "$org"
1095 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1097 reportecho4 "--> merge failed"
1098 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1099 git reset --hard "$org"
1100 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1102 reportecho4 "--> compile failed"
1103 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1104 git reset --hard "$org"
1105 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1106 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1107 if [ x"$note" = x"del" ]; then
1108 git push origin :"${ref#refs/remotes/origin/}"
1109 reportecho4 "--> test failed, branch deleted"
1110 elif [ -n "$note" ]; then
1111 reportdo4 echo "$note"
1112 reportecho4 "--> test failed"
1114 reportecho4 "--> test failed, postponed"
1118 case ",`repoflags "$d"`," in
1120 # we do quite a mess here... luckily we know $org
1121 git fetch # svn needs to be current
1122 git rebase -i --onto origin/master "$org"
1123 git svn dcommit --add-author-from
1124 git reset --hard "$org"
1127 git push origin HEAD
1130 reportecho4 "--> MERGED"
1131 if yesno "Delete original branch \"$ref\"?"; then
1132 git push origin :"${ref#refs/remotes/origin/}"
1133 reportecho4 "--> branch deleted"
1137 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1138 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1139 if [ x"$note" = x"del" ]; then
1140 git push origin :"${ref#refs/remotes/origin/}"
1141 reportecho4 "--> branch deleted"
1142 elif [ -n "$note" ]; then
1143 reportdo4 echo "$note"
1144 reportecho4 "--> rejected"
1146 reportecho4 "--> postponed"
1155 echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1167 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1168 # ./all clean --reclone
1171 if [ x"$X" = x"--reclone" ]; then
1178 elif [ x"$X" = x"-f" ]; then
1180 elif [ x"$X" = x"-u" ]; then
1182 elif [ x"$X" = x"-U" ]; then
1185 elif [ x"$X" = x"-fu" ]; then
1188 elif [ x"$X" = x"-fU" ]; then
1192 elif [ x"$X" = x"-m" ]; then
1194 elif [ x"$X" = x"-r" ]; then
1196 elif [ x"$X" = x"-D" ]; then
1209 if $gotoupstream; then
1211 msg "Must also use -f (delete local changes) when using -u"
1214 if $gotomaster; then
1215 if $fetchupstream; then
1216 verbose git fetch origin
1217 verbose git remote prune origin
1219 verbose git checkout -f "`repobranch "$d"`"
1220 verbose git reset --hard origin/"`repobranch "$d"`"
1222 r=`git symbolic-ref HEAD`
1224 rem=`git config "branch.$r.remote" || echo origin`
1225 bra=`git config "branch.$r.merge" || echo "$r"`
1226 upstream="$rem/${bra#refs/heads/}"
1227 if $fetchupstream; then
1228 verbose git fetch "$rem"
1229 verbose git remote prune "$rem"
1231 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1232 upstream="origin/`repobranch "$d"`"
1234 verbose git reset --hard "$upstream"
1236 elif $gotomaster; then
1238 verbose git checkout -f "`repobranch "$d"`"
1239 verbose git reset --hard
1241 verbose git checkout "`repobranch "$d"`"
1244 verbose git reset --hard
1246 if $rmuntracked; then
1249 verbose git clean -df
1252 verbose git clean -xdf
1256 if $killbranches; then
1257 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1258 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1259 verbose git branch -D "${B#refs/heads/}"
1262 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch -t master origin/master || true
1263 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch -t "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1265 checkself "$cmd" "$@"
1269 # release building goes here
1271 #"$SELF" each git clean -fxd
1272 case "$RELEASETYPE" in
1274 msg "Building a BETA"
1277 msg "Building a RELEASE"
1280 echo >&2 -n "$ESC[2J$ESC[H"
1287 msg " +---------------------------------------------------------.---+"
1289 msg " +---------------------------------------------------------^---+"
1291 msg " | / \ This is the official release build system. |"
1292 msg " | | | If you are not a member of the Xonotic Core Team, |"
1293 msg " | | STOP | you are not supposed to use this script and should |"
1294 msg " | | | instead use ./all compile to compile the engine |"
1295 msg " | \____/ and game code. |"
1297 msg " | [ I understand ] |"
1298 msg " +-------------------------------------------------------------+"
1300 # A LOT of build infrastructure is required:
1303 # - .ssh/config must be configured so the following
1304 # host names are reachable and have a compile
1305 # infrastructure set up:
1306 # - xonotic-build-linux32 (with gcc on x86)
1307 # - xonotic-build-linux64 (with gcc on x86_64)
1308 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1309 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1310 # and x86_64-w64-mingw32-g++)
1311 # - xonotic-build-osx (with Xcode and SDL.framework)
1312 # - AMD Compressonator installed in WINE
1313 # - ResEdit installed in WINE
1314 # - a lot of other requirements you will figure out
1315 # while reading the error messages
1316 # - environment variable RELEASETYPE set
1317 # - optionally, environment variable RELEASEDATE set
1322 verbose rm -rf Xonotic Xonotic*.zip
1323 verbose mkdir -p Xonotic
1324 if [ -n "$RELEASEDATE" ]; then
1325 verbose echo "$RELEASEDATE" > Xonotic/stamp.txt
1327 verbose date +%Y%m%d > Xonotic/stamp.txt
1329 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1331 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1333 verbose rm -rf misc/builddeps
1334 verbose mv misc/buildfiles/win32/* . || true
1335 verbose mv misc/buildfiles/win64 bin64 || true
1336 verbose mv misc/buildfiles/osx/* . || true
1337 verbose rm -rf misc/buildfiles
1338 verbose rm -rf misc/pki
1341 verbose cd darkplaces
1342 verbose git archive --format=tar HEAD
1344 verbose cd Xonotic/source/darkplaces
1349 verbose git archive --format=tar HEAD
1351 verbose cd Xonotic/source/fteqcc
1355 verbose cd data/xonotic-data.pk3dir
1356 verbose git archive --format=tar HEAD -- qcsrc Makefile
1358 verbose cd Xonotic/source
1361 rm -f Xonotic/key_15.d0pk
1363 release-compile-run)
1372 if [ -n "$targetfiles" ]; then
1373 case " $HOSTS_THAT_ARE_DISABLED " in
1378 case " $HOSTS_THAT_ARE_MYSELF " in
1380 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1381 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1382 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1383 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1384 for f in $targetfiles; do
1385 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1389 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1390 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1391 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1392 for f in $targetfiles; do
1393 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1397 # now rebrand the binaries...
1398 for f in $targetfiles; do
1399 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1402 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1404 d=`mktemp -d -t rebrand.XXXXXX`
1406 echo "-mygames" > darkplaces.opt
1407 zip -9r darkplaces.zip darkplaces.opt
1420 fteqcc_maketargets=$3
1422 darkplaces_maketargets=$5
1424 host=xonotic-build-$suffix
1425 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1426 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1428 release-engine-win32)
1429 verbose "$SELF" release-compile win32 \
1430 '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' \
1431 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1433 verbose "$SELF" release-compile win32 \
1434 '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' \
1436 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1438 release-engine-win64)
1439 verbose "$SELF" release-compile win64 \
1440 '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' \
1441 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1442 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1443 verbose "$SELF" release-compile win64 \
1444 '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' \
1446 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1449 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1450 verbose "$SELF" release-compile osx \
1451 '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"' \
1452 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1453 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1454 verbose "$SELF" release-compile osx \
1455 '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"' \
1457 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1459 release-engine-linux32)
1460 verbose "$SELF" release-compile linux32 \
1461 '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' \
1462 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1463 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1465 release-engine-linux64)
1466 verbose "$SELF" release-compile linux64 \
1467 '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' \
1468 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1469 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1472 verbose "$SELF" release-engine-linux32 &
1473 verbose "$SELF" release-engine-linux64 &
1474 verbose "$SELF" release-engine-win32 &
1475 verbose "$SELF" release-engine-win64 &
1476 verbose "$SELF" release-engine-osx &
1485 verbose "$SELF" update-maps
1488 case "$RELEASETYPE" in
1490 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1491 # back out of: source/qcsrc/server
1494 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1497 verbose rm -f Xonotic/source/*/fteqcc.log
1499 release-buildpk3-transform-raw)
1502 release-buildpk3-transform-normal)
1505 # texture: convert to jpeg and dds
1506 verbose export do_jpeg=true
1507 verbose export jpeg_qual_rgb=95
1508 verbose export jpeg_qual_a=99
1509 verbose export do_dds=true
1510 verbose export dds_flags=
1511 verbose export do_ogg=false
1512 verbose export del_src=true
1513 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1515 release-buildpk3-transform-low)
1518 # texture: convert to jpeg and dds
1519 # music: reduce bitrate
1520 verbose export do_jpeg=true
1521 verbose export jpeg_qual_rgb=80
1522 verbose export jpeg_qual_a=99
1523 verbose export do_dds=false
1524 verbose export do_ogg=true
1525 verbose export ogg_qual=1
1526 verbose export del_src=true
1527 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1529 release-buildpk3-transform-lowdds)
1532 # texture: convert to jpeg and dds
1533 # music: reduce bitrate
1534 verbose export do_jpeg=false
1535 verbose export do_jpeg_if_not_dds=true
1536 verbose export jpeg_qual_rgb=80
1537 verbose export jpeg_qual_a=99
1538 verbose export do_dds=true
1539 verbose export dds_flags=
1540 verbose export do_ogg=true
1541 verbose export ogg_qual=1
1542 verbose export del_src=true
1543 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1556 verbose rm -rf Xonotic/temp
1557 verbose mkdir -p Xonotic/temp
1560 verbose git archive --format=tar HEAD
1562 verbose cd Xonotic/temp
1565 verbose cd Xonotic/temp
1566 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1567 verbose cp ../source/progs.dat .
1568 verbose cp ../source/csprogs.dat .
1569 verbose cp ../source/menu.dat .
1570 verbose rm -rf qcsrc
1571 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1572 major=$(($gv / 10000))
1573 minor=$(($gv / 100 - $major * 100))
1574 patch=$(($gv - $major * 10000 - $minor * 100))
1575 versionstr="$major.$minor.$patch"
1576 case "$RELEASETYPE" in
1578 versionstr="$versionstr""beta"
1582 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1583 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1584 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1585 " defaultXonotic.cfg
1587 verbose cd gfx/menu/luminos
1588 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1589 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1590 verbose rm background_l2.svg
1593 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1594 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1595 if [ -f "$X" ]; then
1597 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1601 verbose export git_src_repo="$d0/$src" # skip hash-object
1602 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1603 verbose mkzip "../../$dst" *
1605 verbose rm -rf Xonotic/temp
1608 stamp=`cat Xonotic/stamp.txt`
1614 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1620 while [ "$#" -gt 1 ]; do
1621 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1627 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1628 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1629 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1630 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1631 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1633 release-pack-needsx11)
1636 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1639 verbose "$SELF" release-pack
1644 stamp=`cat Xonotic/stamp.txt`
1645 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1646 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1647 # let's pass crypto import laws of some nasty countries
1648 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1649 if [ -n "$crypto_libs" ]; then
1650 verbose mkzip Xonotic-$stamp-crypto.zip \
1654 # build the archives
1655 verbose mkzip Xonotic-$stamp-engine.zip \
1657 Xonotic/bin64/*.dll \
1660 Xonotic/xonotic.exe \
1661 Xonotic/source/darkplaces/
1662 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1663 verbose mkzip Xonotic-$stamp-common.zip \
1664 Xonotic/source/fteqcc/ \
1665 Xonotic/source/qcsrc/ \
1670 Xonotic/key_0.d0pk \
1671 Xonotic/data/font-nimbussansl-$stamp.pk3
1672 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1673 verbose mkzip0 Xonotic-$stamp.zip \
1674 Xonotic/data/xonotic-$stamp-data.pk3 \
1675 Xonotic/data/xonotic-$stamp-maps.pk3 \
1676 Xonotic/data/xonotic-$stamp-music.pk3 \
1677 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1678 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1679 verbose mkzip0 Xonotic-$stamp-low.zip \
1680 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1681 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1682 Xonotic/data/xonotic-$stamp-music-low.pk3
1683 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1684 # verbose mkzip0 Xonotic-$stamp-high.zip \
1685 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1686 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1687 # Xonotic/data/xonotic-$stamp-music.pk3 \
1688 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1689 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1690 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1691 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1692 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1693 Xonotic/data/xonotic-$stamp-music-low.pk3
1696 verbose "$SELF" release-prepare
1697 verbose "$SELF" release-maps
1698 verbose "$SELF" release-engine
1699 verbose "$SELF" release-qc
1700 verbose "$SELF" release-pack-needsx11
1701 verbose "$SELF" release-zip
1706 echo " $SELF admin-merge [<branch>]"
1707 echo " $SELF branch <branch>"
1708 echo " $SELF branch <remote> <branch> [<srcbranch>]"
1709 echo " $SELF branches"
1710 echo " $SELF checkout|switch <branch>"
1711 echo " $SELF checkout|switch <remote>/<branch>"
1712 echo " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1713 echo " $SELF clean --reclone"
1714 echo " $SELF compile [-c] [-r] [-0]"
1715 echo " $SELF each|foreach [-k] command..."
1716 echo " $SELF fix_upstream_rebase"
1717 echo " $SELF keygen"
1719 echo " $SELF push|commit [-s]"
1720 echo " $SELF release"
1721 echo " $SELF restore-patches"
1722 echo " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1723 echo " $SELF save-patches"
1724 echo " $SELF update-maps"
1725 echo " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"