X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fxonotic.git;a=blobdiff_plain;f=all;h=bf26739679c7141f0ce01f795af49a96b495fcf2;hp=d9b08f962e0b50f395d056810f38beb08c363621;hb=b01ac246fe285f24aac700aa818298877b873f80;hpb=8469bee7c08d7fd494e485c308158e6e67fa0de4 diff --git a/all b/all index d9b08f96..bf267396 100755 --- a/all +++ b/all @@ -3,6 +3,10 @@ set -e +# I use this in EVERY shell script ;) +LF=" +" + d00=`pwd` while ! [ -f ./all ]; do if [ x"`pwd`" = x"/" ]; then @@ -105,6 +109,7 @@ yesno() { yesno= while [ x"$yesno" != x"y" -a x"$yesno" != x"n" ]; do + eval "$2" echo "$1" IFS= read -r yesno done @@ -118,16 +123,16 @@ enter() } repos_urls=" -. | | master -data/xonotic-data.pk3dir | | master -data/xonotic-maps.pk3dir | | master -data/xonotic-music.pk3dir | | master -data/xonotic-nexcompat.pk3dir | | master -mediasource | | 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 +. | | master | +data/xonotic-data.pk3dir | | master | +data/xonotic-maps.pk3dir | | master | +data/xonotic-music.pk3dir | | master | +data/xonotic-nexcompat.pk3dir | | master | +mediasource | | master | +darkplaces | | div0-stable | svn +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 @@ -175,6 +180,12 @@ repobranch() fi } +repoflags() +{ + echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 4 | tr -d ' ' + echo "$t" +} + repos=`for d in $repos; do p="${d%dir}" if [ x"$p" = x"$d" ] || [ -d "$d" ] || ! [ -f "$p" ]; then @@ -241,12 +252,17 @@ case "$cmd" in exists=false for d in $repos; do enter "$d0/$d" verbose - if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then + if [ -z "$branch" ]; then + b=`repobranch "$d"` + else + b=$branch + fi + if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then exists=true - verbose git checkout "$branch" - elif git rev-parse "refs/remotes/$remote/$branch" >/dev/null 2>&1; then + verbose git checkout "$b" + elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then exists=true - verbose git checkout --track -b "$branch" "$remote/$branch" + verbose git checkout --track -b "$b" "$remote/$b" else verbose git checkout "`repobranch "$d"`" fi @@ -611,8 +627,25 @@ case "$cmd" in ;; admin-merge-2) t=`mktemp` + report="" + reportecho() + { + report=$report"$*$LF" + echo "$*" + } + reportecho4() + { + report=$report" $*$LF" + echo " $*" + } + reportdo4() + { + o=`"$@" | sed 's/^/ /' || true` + reportecho "$o" + } for d in $repos; do enter "$d0/$d" verbose + reportecho "In $d:" for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do case "${ref#refs/remotes/origin/}" in "`repobranch "$d"`") @@ -622,33 +655,63 @@ case "$cmd" in continue ;; esac - echo "$ref" - if git notes --ref "refs/notes/admin-merge" show "$ref" 2>/dev/null; then - echo "Not merging, already had this one" - elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ git log HEAD.."$ref"; git diff HEAD.."$ref"; } | less'; then + reportecho " Branch $ref:" + note=`git notes --ref "refs/notes/admin-merge" show "$ref" 2>/dev/null || true` + if [ -n "$note" ]; then + reportdo4 echo "$note" + reportecho4 "--> not merging, already had this one rejected before" + elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ git log HEAD.."$ref"; git diff --color-words --find-copies-harder --ignore-space-change HEAD..."$ref"; } | less'; then + git checkout master org=`git rev-parse HEAD` if ! git merge "$ref" 2>&1 | tee "$t"; then git reset --hard "$org" - git notes --ref "refs/notes/admin-merge" add -m "Merge failed: -`cat "$t"`" "$ref" + git notes --ref "refs/notes/admin-merge" add -m "Merge failed:$LF`cat "$t"`" "$ref" + reportdo4 cat "$t" + reportecho4 "--> merge failed" elif ! "$SELF" compile 2>&1 | tee "$t"; then git reset --hard "$org" - git notes --ref "refs/notes/admin-merge" add -m "Compile failed: -`cat "$t"`" "$ref" + git notes --ref "refs/notes/admin-merge" add -m "Compile failed:$LF`cat "$t"`" "$ref" + reportdo4 cat "$t" + reportecho4 "--> compile failed" elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then - git reset --hard HEAD@{1} + git reset --hard "$org" git notes --ref "refs/notes/admin-merge" add "$ref" + note=`git notes --ref "refs/notes/admin-merge" show "$ref" 2>/dev/null || true` + reportdo4 echo "$note" + reportecho4 "--> test failed" else - git push origin HEAD - git push origin :"${ref#refs/remotes/origin/}" + case ",`repoflags "$d"`," in + *,svn,*) + git pull + git rebase -i "$org" + git svn dcommit --add-author-from + ;; + *) + git push origin HEAD + ;; + esac + reportecho4 "--> MERGED" + if yesno "Delete original branch \"$ref\"?"; then + git push origin :"${ref#refs/remotes/origin/}" + reportecho4 "--> branch deleted" + fi fi else - git reset --hard HEAD@{1} git notes --ref "refs/notes/admin-merge" add "$ref" + note=`git notes --ref "refs/notes/admin-merge" show "$ref" 2>/dev/null || true` + if [ -n "$note" ]; then + reportdo4 echo "$note" + reportecho4 "--> rejected" + else + reportecho4 "--> postponed" + fi fi + reportecho "" done + reportecho "" done rm -f "$t" + echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt ;; *) echo "Usage:"