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 | git://github.com/divVerent/d0_blind_id.git | master |
121 data/xonotic-maps.pk3dir | | master |
122 mediasource | | master | no
123 fteqcc | git://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`" ]; then
313 verbose git config push.default current # or is tracking better?
322 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
323 7za a -tzip -mx=9 -x@"$ziplist" "$archive" "$@" || true
324 zip -9y -@<"$ziplist" "$archive" || true
336 enter "$d0/$d" verbose
337 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
343 pushurl=`repopushurl "$d"`
344 branch=`repobranch "$d"`
345 if [ -d "$d0/$d" ]; then
347 fix_git_config "$url" "$pushurl"
353 # enable the ssh URL for pushing
356 if [ -f ~/.ssh/id_rsa.pub ]; then
358 msg "A key already exists and no new one will be generated. If you"
359 msg "already have done the procedure for getting your key approved, you"
360 msg "can skip the following paragraph and already use the repository."
362 msg "To get access, your key has to be approved first. For that, visit"
363 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
364 msg "the \"Support\" tracker in the \"Repository\" category where you"
365 msg "apply for access and paste the following output into the issue:"
367 msg "`cat ~/.ssh/id_rsa.pub`"
369 msg "Note that you will only have write access to branches that start"
370 msg "with your user name."
371 elif [ -f ~/.ssh/id_dsa.pub ]; then
373 msg "A key already exists and no new one will be generated. If you"
374 msg "already have done the procedure for getting your key approved, you"
375 msg "can skip the following paragraph and already use the repository."
377 msg "To get access, your key has to be approved first. For that, visit"
378 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
379 msg "the \"Support\" tracker in the \"Repository\" category where you"
380 msg "apply for access and paste the following output into the issue:"
382 msg "`cat ~/.ssh/id_dsa.pub`"
384 msg "Note that you will only have write access to branches that start"
385 msg "with your user name."
388 msg "No key has been generated yet. One will be generated now."
389 msg "If other people are using your computer, it is recommended"
390 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
391 msg "when asked for a passphrase."
393 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
395 msg "To get access, your key has to be approved first. For that, visit"
396 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
397 msg "the \"Support\" tracker in the \"Repository\" category where you"
398 msg "apply for access and paste the following output into the issue:"
400 msg "`cat ~/.ssh/id_rsa.pub`"
402 msg "Note that you will only have write access to branches that start"
403 msg "with your user name."
411 if [ x"$1" = x"-N" ]; then
413 elif [ x"$1" = x"-p" ]; then
415 if [ x"$base" != x"ssh://xonotic@git.xonotic.org/" ]; then
416 pushbase=ssh://xonotic@git.xonotic.org/
418 elif [ x"$1" = x"-s" ]; then
420 base=ssh://xonotic@git.xonotic.org/
422 elif [ x"$1" = x"-g" ]; then
424 base=git://git.xonotic.org/xonotic/
425 elif [ x"$1" = x"-h" ]; then
427 base=http://git.xonotic.org/xonotic/
428 elif [ x"$1" = x"-l" ]; then
433 msg "Invalid location!"
434 msg "Possible locations for the -l option:"
435 msg " nl (Netherlands, run by merlijn)"
436 #msg " de (Germany, run by divVerent)"
454 *://*.git.xonotic.org/*)
455 location=${base%%.git.xonotic.org/*}
456 location=${location##*://}
464 if [ -n "$location" ]; then
465 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
466 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
468 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
469 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
473 pushurl=`repopushurl .`
474 fix_git_config "$url" "$pushurl"
476 if $allow_pull || $fix_config; then
481 pushurl=`repopushurl "$d"`
482 branch=`repobranch "$d"`
483 if [ -d "$d0/$d" ]; then
485 enter "$d0/$d" verbose
486 r=`git symbolic-ref HEAD`
488 if git config branch.$r.remote >/dev/null 2>&1; then
489 if ! verbose git pull; then
490 fix_upstream_rebase_mergefail || true
491 check_mergeconflict "$d"
492 echo "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
495 fix_upstream_rebase_mergeok || true
500 checkself "$cmd" "$@"
502 verbose git remote prune origin
506 verbose git clone "$url" "$d0/$d"
507 enter "$d0/$d" verbose
508 fix_git_config "$url" "$pushurl"
509 if [ "$branch" != "master" ]; then
510 verbose git checkout --track -b "$branch" origin/"$branch"
517 misc/tools/xonotic-map-compiler-autobuild download
521 if [ x"$1" = x"-f" ]; then
527 if [ -z "$branch" ]; then
530 branch=${remote#origin/}
541 enter "$d0/$d" verbose
543 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
545 verbose git checkout $checkoutflags "$b"
546 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
548 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
551 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
553 verbose git checkout $checkoutflags "$b"
554 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
556 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
558 echo "WTF? Not even branch $b doesn't exist in $d"
563 checkself "$cmd" "$@"
567 echo "The requested branch was not found in any repository."
575 if [ -z "$branch" ]; then
579 if [ -z "$branch" ]; then
582 r=`git symbolic-ref HEAD`
589 dv=`visible_repo_name "$d"`
590 enter "$d0/$d" verbose
591 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
592 echo "Already having this branch in $dv."
594 if yesno "Branch in $dv?"; then
595 if [ -n "$srcbranch" ]; then
598 b=origin/"`repobranch "$d"`"
599 verbose git fetch origin || true
601 # TODO do this without pushing
602 verbose git checkout -b "$branch" "$b"
603 verbose git config "branch.$branch.remote" "$remote"
604 verbose git config "branch.$branch.merge" "refs/heads/$branch"
614 cd "$d0/$d" # am in a pipe, shouldn't use enter
615 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
620 while read -r d BRANCH REV TEXT; do
621 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
624 if [ x"$REV" = x"->" ]; then
627 BRANCH=${BRANCH#remotes/}
628 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
629 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
630 eval "r=\$branches_repos_$ID"
632 eval "branches_repos_$ID=\$r"
634 echo -n "$branches_list" | xargs -n 1 echo | sort -u | while IFS= read -r BRANCH; do
635 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
636 eval "r=\$branches_repos_$ID"
637 printf "%-60s %s\n" "$BRANCH" "$r"
644 dv=`visible_repo_name "$d"`
645 enter "$d0/$d" verbose
646 r=`git symbolic-ref HEAD`
648 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
649 # we have uncommitted changes
650 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
651 if ! verbose git merge origin/"`repobranch "$d"`"; then
652 check_mergeconflict "$d"
653 exit 1 # this should ALWAYS be fatal
663 dv=`visible_repo_name "$d"`
664 enter "$d0/$d" verbose
665 r=`git symbolic-ref HEAD`
667 diffdata=`git diff --color HEAD`
668 if [ -n "$diffdata" ]; then
669 # we have uncommitted changes
670 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" 'echo "$diffdata" | less -r'; then
671 verbose git commit -a
674 rem=`git config "branch.$r.remote" || echo origin`
675 bra=`git config "branch.$r.merge" || echo "$r"`
676 upstream="$rem/${bra#refs/heads/}"
677 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
678 upstream="origin/`repobranch "$d"`"
680 logdata=`git log --color "$upstream".."$r"`
681 if [ -n "$logdata" ]; then
682 if yesno "Push \"$r\" in $dv?" 'echo "$logdata" | less -r'; then
683 verbose git push "$rem" HEAD
686 if [ x"$submit" = x"-s" ]; then
689 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
703 if [ -z "$CC" ]; then
704 export CC="gcc -DSUPPORTIPV6"
720 export CC="$CC -g -mtune=native -march=native"
728 if [ -n "$WE_HATE_OUR_USERS" ]; then
729 TARGETS="sv-$debug cl-$debug"
730 elif [ x"`uname`" = x"Darwin" ]; then
733 TARGETS="sv-$debug cl-$debug sdl-$debug"
736 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
737 TARGETS="sv-$debug sdl-$debug"
740 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"
742 TARGETS="sv-$debug cl-$debug sdl-$debug"
744 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
745 # if we give the command make the arg "", it will surely fail (invalid filename),
746 # so better handle it as an empty client option
749 elif [ -n "$1" ]; then
751 TARGETS_SAVE=$TARGETS
756 TARGETS="$TARGETS sdl-debug"
759 TARGETS="$TARGETS cl-debug"
762 TARGETS="$TARGETS sv-debug"
765 BAD_TARGETS="$BAD_TARGETS $X"
769 if [ -n "$TARGETS" ]; then # at least a valid client
771 else # no valid client, let's assume this option is not meant to be a client then
772 TARGETS=$TARGETS_SAVE
776 if [ -z "$MAKEFLAGS" ]; then
777 if [ -f /proc/cpuinfo ]; then
778 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
779 if [ $ncpus -gt 1 ]; then
783 if [ -n "$WE_HATE_OUR_USERS" ]; then
784 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
788 enter "$d0/d0_blind_id" verbose
789 if ! $compiled0; then
790 # compilation of crypto library failed
791 # use binaries then, if we can...
793 if [ -n "$WE_HATE_OUR_USERS" ]; then
794 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
795 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
801 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
802 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
803 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
806 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
807 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
808 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
816 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
826 if [ -f Makefile ]; then
827 verbose make $MAKEFLAGS distclean
830 if ! [ -f Makefile ]; then
831 verbose sh autogen.sh
834 verbose make $MAKEFLAGS
837 enter "$d0/fteqcc" verbose
839 verbose make $MAKEFLAGS clean
841 verbose make $MAKEFLAGS
843 enter "$d0/data/xonotic-data.pk3dir" verbose
845 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
847 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
848 # 4 levels up: data, xonotic-data, qcsrc, server
850 enter "$d0/darkplaces" verbose
851 if [ x"$BAD_TARGETS" = x" " ]; then
852 echo "Warning: invalid empty client, default clients will be used."
855 verbose make $MAKEFLAGS clean
857 for T in $TARGETS; do
858 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
860 for T in $BAD_TARGETS; do
861 echo "Warning: discarded invalid client $T."
864 verbose "$SELF" update-maps
867 if [ -n "$WE_HATE_OUR_USERS" ]; then
869 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
870 elif [ x"`uname`" = x"Darwin" ]; then
871 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
872 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
875 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
879 sdl|glx|agl|dedicated)
888 if ! [ -x "darkplaces/darkplaces$client" ]; then
889 if [ -x "darkplaces/darkplaces$client.exe" ]; then
892 echo "Client darkplaces/darkplaces$client not found, aborting"
896 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
898 # if pulseaudio is running: USE IT
899 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
900 if ps -C pulseaudio >/dev/null; then
901 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
902 export SDL_AUDIODRIVER=pulse
909 if [ -n "$USE_GDB" ]; then
910 set -- gdb --args "$@"
911 elif which gdb >/dev/null 2>&1; then
912 set -- gdb --batch -x savecore.gdb --args "$@"
913 elif which catchsegv >/dev/null 2>&1; then
914 set -- catchsegv "$@"
918 if [ -f xonotic.core ]; then
919 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
920 gdb "$binary" xonotic.core
921 #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
922 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
924 # rm -f xonotic.core.tar.gz
926 echo "The core dump can be examined later by"
927 echo " gdb $binary xonotic.core"
933 if [ x"$1" = x"-k" ]; then
938 if verbose cd "$d0/$d"; then
950 patchdir=`mktemp -d -t save-patches.XXXXXX`
952 enter "$d0/$d" verbose
953 git branch -v -v | cut -c 3- | {
955 while read -r BRANCH REV UPSTREAM TEXT; do
958 UPSTREAM=${UPSTREAM#\[}
959 UPSTREAM=${UPSTREAM%\]}
960 UPSTREAM=${UPSTREAM%:*}
964 UPSTREAM=origin/"`repobranch "$d"`"
968 if [ x"$REV" = x"->" ]; then
971 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
972 echo "$d" > "$patchdir/$i/info.txt"
973 echo "$BRANCH" >> "$patchdir/$i/info.txt"
974 echo "$UPSTREAM" >> "$patchdir/$i/info.txt"
975 echo "$TRACK" >> "$patchdir/$i/info.txt"
978 rm -rf "$patchdir/$i"
983 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
988 patchdir=`mktemp -d -t restore-patches.XXXXXX`
989 ( cd "$patchdir" && tar xvzf - ) < "$infile"
991 for P in "$patchdir"/*/info.txt; do
998 verbose git checkout HEAD^0
999 verbose git branch -D "$BRANCH"
1000 if [ x"$TRACK" = x"true" ]; then
1001 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1003 verbose git branch -b "$BRANCH" "$UPSTREAM"
1015 report=$report"$*$LF"
1020 report=$report" $*$LF"
1025 o=`"$@" | sed 's/^/ /' || true`
1029 enter "$d0/$d" verbose
1030 base="`repobranch "$d"`"
1032 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1033 case "${ref#refs/remotes/origin/}" in
1046 if [ -n "$branch" ]; then
1047 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1056 l0=`git rev-list "$base".."$ref" | wc -l`
1057 l1=`git rev-list master.."$ref" | wc -l`
1058 if [ $l0 -gt $l1 ]; then
1065 reportecho " Branch $ref:"
1066 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1067 logdata=`git log --color "$realbase".."$ref"`
1068 if [ -z "$logdata" ]; then
1069 reportecho4 "--> not merging, no changes vs master"
1070 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1071 git push origin :"${ref#refs/remotes/origin/}"
1072 reportecho4 "--> branch deleted"
1075 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1076 if [ -z "$diffdata" ]; then
1077 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1078 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ echo "$logdata"; } | less -r'; then
1079 git push origin :"${ref#refs/remotes/origin/}"
1080 reportecho4 "--> branch deleted"
1082 elif [ -z "$branch" ] && [ -n "$note" ]; then
1083 reportdo4 echo "$note"
1084 reportecho4 "--> not merging, already had this one rejected before"
1085 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ echo "$logdata"; echo "$diffdata"; } | less -r'; then
1086 git checkout "$realbase"
1087 org=`git rev-parse HEAD`
1088 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1089 git reset --hard "$org"
1090 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1092 reportecho4 "--> merge failed"
1093 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1094 git reset --hard "$org"
1095 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1097 reportecho4 "--> compile failed"
1098 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1099 git reset --hard "$org"
1100 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1101 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1102 if [ x"$note" = x"del" ]; then
1103 git push origin :"${ref#refs/remotes/origin/}"
1104 reportecho4 "--> test failed, branch deleted"
1105 elif [ -n "$note" ]; then
1106 reportdo4 echo "$note"
1107 reportecho4 "--> test failed"
1109 reportecho4 "--> test failed, postponed"
1113 case ",`repoflags "$d"`," in
1115 # we do quite a mess here... luckily we know $org
1116 git fetch # svn needs to be current
1117 git rebase -i --onto origin/master "$org"
1118 git svn dcommit --add-author-from
1119 git reset --hard "$org"
1122 git push origin HEAD
1125 reportecho4 "--> MERGED"
1126 if yesno "Delete original branch \"$ref\"?"; then
1127 git push origin :"${ref#refs/remotes/origin/}"
1128 reportecho4 "--> branch deleted"
1132 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1133 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1134 if [ x"$note" = x"del" ]; then
1135 git push origin :"${ref#refs/remotes/origin/}"
1136 reportecho4 "--> branch deleted"
1137 elif [ -n "$note" ]; then
1138 reportdo4 echo "$note"
1139 reportecho4 "--> rejected"
1141 reportecho4 "--> postponed"
1150 echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1162 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1163 # ./all clean --reclone
1166 if [ x"$1" = x"--reclone" ]; then
1173 elif [ x"$1" = x"-f" ]; then
1175 elif [ x"$1" = x"-u" ]; then
1177 elif [ x"$1" = x"-U" ]; then
1180 elif [ x"$1" = x"-fu" ]; then
1183 elif [ x"$1" = x"-fU" ]; then
1187 elif [ x"$1" = x"-m" ]; then
1189 elif [ x"$1" = x"-r" ]; then
1191 elif [ x"$1" = x"-D" ]; then
1204 if $gotoupstream; then
1206 msg "Must also use -f (delete local changes) when using -u"
1209 if $gotomaster; then
1210 if $fetchupstream; then
1211 verbose git fetch origin
1212 verbose git remote prune origin
1214 verbose git checkout -f "`repobranch "$d"`"
1215 verbose git reset --hard origin/"`repobranch "$d"`"
1217 r=`git symbolic-ref HEAD`
1219 rem=`git config "branch.$r.remote" || echo origin`
1220 bra=`git config "branch.$r.merge" || echo "$r"`
1221 upstream="$rem/${bra#refs/heads/}"
1222 if $fetchupstream; then
1223 verbose git fetch "$rem"
1224 verbose git remote prune "$rem"
1226 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1227 upstream="origin/`repobranch "$d"`"
1229 verbose git reset --hard "$upstream"
1231 elif $gotomaster; then
1233 verbose git checkout -f "`repobranch "$d"`"
1234 verbose git reset --hard
1236 verbose git checkout "`repobranch "$d"`"
1239 verbose git reset --hard
1241 if $rmuntracked; then
1244 verbose git clean -df
1247 verbose git clean -xdf
1251 if $killbranches; then
1252 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1253 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1254 verbose git branch -D "${B#refs/heads/}"
1257 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch -t master origin/master || true
1258 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch -t "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1263 # release building goes here
1265 #"$SELF" each git clean -fxd
1266 case "$RELEASETYPE" in
1268 msg "Building a BETA"
1271 msg "Building a RELEASE"
1274 echo >&2 -n "$ESC[2J$ESC[H"
1281 msg " +---------------------------------------------------------.---+"
1283 msg " +---------------------------------------------------------^---+"
1285 msg " | / \ This is the official release build system. |"
1286 msg " | | | If you are not a member of the Xonotic Core Team, |"
1287 msg " | | STOP | you are not supposed to use this script and should |"
1288 msg " | | | instead use ./all compile to compile the engine |"
1289 msg " | \____/ and game code. |"
1291 msg " | [ I understand ] |"
1292 msg " +-------------------------------------------------------------+"
1294 # A LOT of build infrastructure is required:
1297 # - .ssh/config must be configured so the following
1298 # host names are reachable and have a compile
1299 # infrastructure set up:
1300 # - xonotic-build-linux32 (with gcc on x86)
1301 # - xonotic-build-linux64 (with gcc on x86_64)
1302 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1303 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1304 # and x86_64-w64-mingw32-g++)
1305 # - xonotic-build-osx (with Xcode and SDL.framework)
1306 # - AMD Compressonator installed in WINE
1307 # - ResEdit installed in WINE
1308 # - a lot of other requirements you will figure out
1309 # while reading the error messages
1310 # - environment variable RELEASETYPE set
1311 # - optionally, environment variable RELEASEDATE set
1316 verbose rm -rf Xonotic Xonotic*.zip
1317 verbose mkdir -p Xonotic
1318 if [ -n "$RELEASEDATE" ]; then
1319 verbose echo "$RELEASEDATE" > Xonotic/stamp.txt
1321 verbose date +%Y%m%d > Xonotic/stamp.txt
1323 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1325 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1327 verbose rm -rf misc/builddeps
1328 verbose mv misc/buildfiles/win32/* . || true
1329 verbose mv misc/buildfiles/win64 bin64 || true
1330 verbose mv misc/buildfiles/osx/* . || true
1331 verbose rm -rf misc/buildfiles
1332 verbose rm -rf misc/pki
1335 verbose cd darkplaces
1336 verbose git archive --format=tar HEAD
1338 verbose cd Xonotic/source/darkplaces
1343 verbose git archive --format=tar HEAD
1345 verbose cd Xonotic/source/fteqcc
1349 verbose cd data/xonotic-data.pk3dir
1350 verbose git archive --format=tar HEAD -- qcsrc Makefile
1352 verbose cd Xonotic/source
1355 rm -f Xonotic/key_15.d0pk
1357 release-compile-run)
1366 if [ -n "$targetfiles" ]; then
1367 case " $HOSTS_THAT_ARE_DISABLED " in
1372 case " $HOSTS_THAT_ARE_MYSELF " in
1374 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1375 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1376 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1377 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1378 for f in $targetfiles; do
1379 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1383 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1384 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1385 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1386 for f in $targetfiles; do
1387 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1391 # now rebrand the binaries...
1392 for f in $targetfiles; do
1393 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1396 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "$f"
1398 d=`mktemp -d -t rebrand.XXXXXX`
1400 echo "-mygames" > darkplaces.opt
1401 zip -9r darkplaces.zip darkplaces.opt
1414 fteqcc_maketargets=$3
1416 darkplaces_maketargets=$5
1418 host=xonotic-build-$suffix
1419 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1420 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1422 release-engine-win32)
1423 verbose "$SELF" release-compile win32 \
1424 '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' \
1425 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1427 verbose "$SELF" release-compile win32 \
1428 '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' \
1430 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1432 release-engine-win64)
1433 verbose "$SELF" release-compile win64 \
1434 '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' \
1435 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1436 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1437 verbose "$SELF" release-compile win64 \
1438 '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' \
1440 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1443 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1444 verbose "$SELF" release-compile osx \
1445 '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"' \
1446 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1447 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1448 verbose "$SELF" release-compile osx \
1449 '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"' \
1451 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1453 release-engine-linux32)
1454 verbose "$SELF" release-compile linux32 \
1455 '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' \
1456 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1457 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1459 release-engine-linux64)
1460 verbose "$SELF" release-compile linux64 \
1461 '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' \
1462 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1463 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1466 verbose "$SELF" release-engine-linux32 &
1467 verbose "$SELF" release-engine-linux64 &
1468 verbose "$SELF" release-engine-win32 &
1469 verbose "$SELF" release-engine-win64 &
1470 verbose "$SELF" release-engine-osx &
1479 verbose "$SELF" update-maps
1482 case "$RELEASETYPE" in
1484 verbose make -C Xonotic/source FTEQCC="../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1487 verbose make -C Xonotic/source FTEQCC="../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1490 verbose rm -f Xonotic/source/*/fteqcc.log
1492 release-buildpk3-transform-raw)
1495 release-buildpk3-transform-normal)
1498 # texture: convert to jpeg and dds
1499 verbose export do_jpeg=true
1500 verbose export jpeg_qual_rgb=95
1501 verbose export jpeg_qual_a=99
1502 verbose export do_dds=true
1503 verbose export dds_flags=
1504 verbose export do_ogg=false
1505 verbose export del_src=true
1506 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1508 release-buildpk3-transform-low)
1511 # texture: convert to jpeg and dds
1512 # music: reduce bitrate
1513 verbose export do_jpeg=true
1514 verbose export jpeg_qual_rgb=80
1515 verbose export jpeg_qual_a=95
1516 verbose export do_dds=false
1517 verbose export do_ogg=true
1518 verbose export ogg_qual=1
1519 verbose export del_src=true
1520 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1522 release-buildpk3-transform-lowdds)
1525 # texture: convert to jpeg and dds
1526 # music: reduce bitrate
1527 verbose export do_jpeg=false
1528 verbose export do_jpeg_if_not_dds=true
1529 verbose export jpeg_qual_rgb=80
1530 verbose export jpeg_qual_a=95
1531 verbose export do_dds=true
1532 verbose export dds_flags=
1533 verbose export do_ogg=true
1534 verbose export ogg_qual=1
1535 verbose export del_src=true
1536 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1549 verbose rm -rf Xonotic/temp
1550 verbose mkdir -p Xonotic/temp
1553 verbose git archive --format=tar HEAD
1555 verbose cd Xonotic/temp
1558 verbose cd Xonotic/temp
1559 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1560 verbose cp ../source/progs.dat .
1561 verbose cp ../source/csprogs.dat .
1562 verbose cp ../source/menu.dat .
1563 verbose rm -rf qcsrc
1564 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1565 major=$(($gv / 10000))
1566 minor=$(($gv / 100 - $major * 100))
1567 patch=$(($gv - $major * 10000 - $minor * 100))
1568 versionstr="$major.$minor.$patch"
1569 case "$RELEASETYPE" in
1571 versionstr="$versionstr""beta"
1575 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1576 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1577 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1578 " defaultXonotic.cfg
1580 verbose cd gfx/menu/luminos
1581 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1582 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1583 verbose rm background_l2.svg
1586 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1587 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1588 if [ -f "$X" ]; then
1590 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1594 verbose export git_src_repo="$d0/$src" # skip hash-object
1595 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1596 verbose mkzip "../../$dst" *
1598 verbose rm -rf Xonotic/temp
1601 stamp=`cat Xonotic/stamp.txt`
1607 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1613 while [ "$#" -gt 1 ]; do
1614 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1620 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1621 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' raw '-raw' low '-low' lowdds '-lowdds'
1622 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' raw '-raw' low '-low' lowdds '-lowdds'
1623 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1624 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1626 release-pack-needsx11)
1629 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1632 verbose "$SELF" release-pack
1637 stamp=`cat Xonotic/stamp.txt`
1638 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1639 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1640 # let's pass crypto import laws of some nasty countries
1641 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1642 if [ -n "$crypto_libs" ]; then
1643 verbose mkzip Xonotic-$stamp-crypto.zip \
1647 # build the archives
1648 verbose mkzip Xonotic-$stamp-engine.zip \
1650 Xonotic/bin64/*.dll \
1653 Xonotic/xonotic.exe \
1654 Xonotic/source/darkplaces/
1655 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1656 verbose mkzip Xonotic-$stamp-common.zip \
1657 Xonotic/source/fteqcc/ \
1658 Xonotic/source/qcsrc/ \
1663 Xonotic/key_0.d0pk \
1664 Xonotic/data/font-nimbussansl-$stamp.pk3
1665 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1666 verbose mkzip0 Xonotic-$stamp.zip \
1667 Xonotic/data/xonotic-$stamp-data.pk3 \
1668 Xonotic/data/xonotic-$stamp-maps.pk3 \
1669 Xonotic/data/xonotic-$stamp-music.pk3 \
1670 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1671 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1672 verbose mkzip0 Xonotic-$stamp-low.zip \
1673 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1674 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1675 Xonotic/data/xonotic-$stamp-music-low.pk3
1676 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1677 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1678 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1679 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1680 Xonotic/data/xonotic-$stamp-music-low.pk3
1681 verbose mv 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
1689 verbose "$SELF" release-prepare
1690 verbose "$SELF" release-maps
1691 verbose "$SELF" release-engine
1692 verbose "$SELF" release-qc
1693 verbose "$SELF" release-pack-needsx11
1694 verbose "$SELF" release-zip
1699 echo " $SELF admin-merge [<branch>]"
1700 echo " $SELF branch <branch>"
1701 echo " $SELF branch <remote> <branch> [<srcbranch>]"
1702 echo " $SELF branches"
1703 echo " $SELF checkout|switch <branch>"
1704 echo " $SELF checkout|switch <remote>/<branch>"
1705 echo " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1706 echo " $SELF clean --reclone"
1707 echo " $SELF compile [-c] [-r] [-0]"
1708 echo " $SELF each|foreach [-k] command..."
1709 echo " $SELF fix_upstream_rebase"
1710 echo " $SELF keygen"
1712 echo " $SELF push|commit [-s]"
1713 echo " $SELF release"
1714 echo " $SELF restore-patches"
1715 echo " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1716 echo " $SELF save-patches"
1717 echo " $SELF update-maps"
1718 echo " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l country]"