# Windows hates users. So this script has to copy itself elsewhere first...
tname=
cp "$SELF" ../all.xonotic.sh
+ export WE_HATE_OUR_USERS=1
exec ../all.xonotic.sh "$@"
;;
esac
}
repos_urls="
- .
- data/xonotic-data.pk3dir
- data/xonotic-maps.pk3dir
- data/xonotic-music.pk3dir
- data/xonotic-nexcompat.pk3dir
- darkplaces
- fteqcc@git://github.com/Blub/qclib.git
- div0-gittools@git://git.icculus.org/divverent/div0-gittools.git
- netradiant
+. | | master
+data/xonotic-data.pk3dir | | master
+data/xonotic-maps.pk3dir | | master
+data/xonotic-music.pk3dir | | master
+data/xonotic-nexcompat.pk3dir | | master
+darkplaces | | div0-stable
+fteqcc | git://github.com/Blub/qclib.git | master
+div0-gittools | git://git.icculus.org/divverent/div0-gittools.git | master
+netradiant | | master
"
+# todo: in darkplaces, change repobranch to div0-stable
-repos=`for X in $repos_urls; do echo "${X%%@*}"; done`
+repos=`echo "$repos_urls" | grep . | cut -d '|' -f 1 | tr -d ' '`
+
+base=`git config remote.origin.url`
+base=${base%xonotic.git}
+
+repourl()
+{
+ t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
+ if [ -n "$t" ]; then
+ echo "$t"
+ else
+ if [ x"$1" = x"." ]; then
+ echo "$base""xonotic.git"
+ else
+ echo "$base${1##*/}.git"
+ fi
+ fi
+}
+
+repobranch()
+{
+ t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 3 | tr -d ' '`
+ if [ -n "$t" ]; then
+ echo "$t"
+ else
+ echo "master"
+ fi
+}
+
+repos=`for d in $repos; do
+ p="${d%dir}"
+ if [ x"$p" = x"$d" ] || [ -d "$d" ] || ! [ -f "$p" ]; then
+ echo "$d"
+ fi
+done`
if [ "$#" = 0 ]; then
set -- help
case "$cmd" in
update|pull)
- base=`git config remote.origin.url`
- base=${base%xonotic.git}
- for dcomplete in $repos_urls; do
- case "$dcomplete" in
- *@*)
- d=${dcomplete%%@*}
- url=${dcomplete#*@}
- switch=false
- ;;
- *)
- d=${dcomplete%%@*}
- url=$base${d##*/}.git
- switch=true
- ;;
- esac
+ for d in $repos; do
+ url=`repourl "$d"`
+ branch=`repobranch "$d"`
if [ -d "$d0/$d" ]; then
enter "$d0/$d" verbose
- case "$d" in
- .)
- ;;
- *)
- if $switch; then
- verbose git config remote.origin.url "$url"
- fi
- ;;
- esac
+ verbose git config remote.origin.url "$url"
verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
# TODO remove this line later
- verbose git config core.autocrlf input
- verbose git config core.safecrlf true
+ verbose git config core.autocrlf false
+ verbose git config core.safecrlf false # we don't NEED that...
r=`git symbolic-ref HEAD`
r=${r#refs/heads/}
if git config branch.$r.remote >/dev/null 2>&1; then
if ! verbose git pull; then
check_mergeconflict "$d"
- exit 1 # FATAL
+ echo "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
+ read -r DUMMY
fi
fi
cd "$d0"
else
verbose git clone "$url" "$d0/$d"
+ enter "$d0/$d" verbose
+ verbose git checkout "$branch"
+ cd "$d0"
fi
done
;;
exists=true
verbose git checkout --track -b "$branch" "$remote/$branch"
else
- verbose git checkout master
+ verbose git checkout "`repobranch "$d"`"
fi
cd "$d00"
checkself "$cmd" "$@"
branch=$remote
remote=origin
fi
- if [ -z "$srcbranch" ]; then
- srcbranch=master
- fi
if [ -z "$branch" ]; then
for d in $repos; do
enter "$d0/$d"
dv=`visible_repo_name "$d"`
enter "$d0/$d" verbose
a=
- while [ x"$a" != x"y" -a x"$a" != x"n" ]; do
- echo "Branch in $dv?"
- read -r a
- done
- if [ x"$a" = x"y" ]; then
- verbose git push "$remote" "$srcbranch":"$branch"
- verbose git checkout --track -b "$branch" "$remote/$branch"
+ if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
+ echo "Already having this branch in $dv."
+ else
+ while [ x"$a" != x"y" -a x"$a" != x"n" ]; do
+ echo "Branch in $dv?"
+ read -r a
+ done
+ if [ x"$a" = x"y" ]; then
+ if [ -n "$srcbranch" ]; then
+ b=$srcbranch
+ else
+ b="`repobranch "$d"`"
+ fi
+ verbose git push "$remote" "$b":"$branch"
+ verbose git checkout --track -b "$branch" "$remote/$branch"
+ fi
fi
cd "$d0"
done
enter "$d0/$d" verbose
r=`git symbolic-ref HEAD`
r=${r#refs/heads/}
- if git log HEAD..origin/master | grep .; then
+ if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
# we have uncommitted changes
a=
while [ x"$a" != x"y" -a x"$a" != x"n" ]; do
- echo "Could merge from \"master\" into \"$r\" in $dv. Do it?"
+ echo "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"
read -r a
done
if [ x"$a" = x"y" ]; then
- if ! verbose git merge origin/master; then
+ if ! verbose git merge origin/"`repobranch "$d"`"; then
check_mergeconflict "$d"
exit 1 # this should ALWAYS be fatal
fi
fi
fi
rem=`git config "branch.$r.remote" || echo origin`
- if git log "$rem/$r".."$r" | grep .; then
+ if { git log "$rem/$r".."$r" || git log origin/"`repobranch "$d"`".."$r"; } | grep .; then
a=
while [ x"$a" != x"y" -a x"$a" != x"n" ]; do
echo "Push \"$r\" in $dv?"
done
;;
compile)
+ if [ -n "$WE_HATE_OUR_USERS" ]; then
+ TARGETS="sv-debug cl-debug"
+ else
+ TARGETS="sv-debug cl-debug sdl-debug"
+ fi
+ case "$1" in
+ sdl)
+ TARGETS="sdl-debug"
+ shift
+ ;;
+ glx|agl|wgl)
+ TARGETS="cl-debug"
+ shift
+ ;;
+ dedicated)
+ TARGETS="sv-debug"
+ shift
+ ;;
+ esac
if [ -z "$MAKEFLAGS" ]; then
if [ -f /proc/cpuinfo ]; then
ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
enter "$d0/data/xonotic-data.pk3dir" verbose
verbose make FTEQCC="$d0/fteqcc/fteqcc.bin" $MAKEFLAGS
enter "$d0/darkplaces" verbose
- verbose make $MAKEFLAGS sv-debug
- verbose make $MAKEFLAGS cl-debug
- verbose make $MAKEFLAGS sdl-debug
+ for T in $TARGETS; do
+ verbose make $MAKEFLAGS "$T"
+ done
;;
run)
- client=-sdl
+ if [ -n "$WE_HATE_OUR_USERS" ]; then
+ client=
+ export PATH="$d0/misc/buildfiles/w32:$PATH"
+ else
+ client=-sdl
+ fi
case "$1" in
sdl|glx|agl|dedicated)
client=-$1
exit 1
fi
fi
- #verbose "darkplaces/darkplaces$client" -xonotic "$@"
- verbose "darkplaces/darkplaces$client" -nexuiz -customgamename Xonotic -customgamedirname1 data -customgamedirname2 "" -customgamescreenshotname xonotic -customgameuserdirname xonotic "$@"
+ set -- "darkplaces/darkplaces$client" -nexuiz -customgamename Xonotic -customgamedirname1 data -customgamedirname2 "" -customgamescreenshotname xonotic -customgameuserdirname xonotic "$@"
+ if [ -n "$USE_GDB" ]; then
+ set -- gdb --args "$@"
+ fi
+ "$@"
;;
each|foreach)
for d in $repos; do
TRACK=true
;;
*)
- UPSTREAM=origin/master
+ UPSTREAM=origin/"`repobranch "$d"`"
TRACK=false
;;
esac
done
rm -rf "$patchdir"
;;
+ admin-merge)
+ for d in $repos; do
+ enter "$d0/$d" verbose
+ git rev-parse "$1/$2" || continue
+ # 1. review
+ {
+ git log HEAD.."$1/$2"
+ git diff HEAD..."$1/$2"
+ } | less
+ a=
+ while [ x"$a" != x"y" -a x"$a" != x"n" ]; do
+ echo "Merge \"$1/$2\" into `git symbolic-ref HEAD` of $d?"
+ read -r a
+ done
+ if [ x"$a" = x"y" ]; then
+ git merge "$1/$2"
+ cd "$d0"
+ a=
+ if ! "$SELF" compile; then
+ a=n
+ fi
+ cd "$d0/$d"
+ while [ x"$a" != x"y" -a x"$a" != x"n" ]; do
+ echo "Still merge \"$1/$2\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."
+ read -r a
+ done
+ if [ x"$a" = x"y" ]; then
+ git push origin HEAD
+ git push "$1" :"$2"
+ else
+ git reset --hard HEAD@{1}
+ fi
+ fi
+ done
+ ;;
*)
echo "Usage:"
echo " $SELF pull"