"$@"
}
+visible_repo_name()
+{
+ case "$1" in
+ .)
+ echo "the root directory"
+ ;;
+ *)
+ echo "\"$1\""
+ ;;
+ esac
+}
+
+check_mergeconflict()
+{
+ if git ls-files -u | grep ' 1 '; then
+ echo
+ echo "MERGE CONFLICT."
+ echo "change into the \"$1\" project directory, and then:"
+ echo "- edit the files mentioned above with your favorite editor,"
+ echo " and fix the conflicts (marked with <<<<<<< blocks)"
+ echo "- for binary files, you can select the files using"
+ echo " git checkout --ours or git checkout --theirs"
+ echo "- when done with a file, 'git add' the file"
+ echo "- when done, 'git commit'"
+ echo
+ exit 1
+ fi
+}
+
+enter()
+{
+ verbose cd "$1"
+ check_mergeconflict "$1"
+}
+
repos_urls="
.
data/xonotic-data.pk3dir
;;
esac
if [ -d "$d0/$d" ]; then
- verbose cd "$d0/$d"
+ enter "$d0/$d"
case "$d" in
.)
;;
fi
;;
esac
- verbose git pull || true # errors if the branch is not tracking anything
+ if ! verbose git pull; then
+ check_mergeconflict "$d"
+ # do not exit, as this may also mean we are tracking something else
+ fi
cd "$d00"
- checkself "$SELF" "$@"
+ checkself "$cmd" "$@"
cd "$d0/$d"
verbose git remote prune origin
cd "$d0"
fi
exists=false
for d in $repos; do
- verbose cd "$d0/$d"
+ enter "$d0/$d"
if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
exists=true
verbose git checkout "$branch"
verbose git checkout master
fi
cd "$d00"
- checkself "$SELF" "$@"
+ checkself "$cmd" "$@"
cd "$d0"
done
if ! $exists; then
fi
if [ -z "$branch" ]; then
for d in $repos; do
- cd "$d0/$d"
+ enter "$d0/$d"
r=`git symbolic-ref HEAD`
r=${r#refs/heads/}
echo "$d is at $r"
done
else
for d in $repos; do
- cd "$d0/$d"
+ dv=`visible_repo_name "$d"`
+ enter "$d0/$d"
a=
while [ x"$a" != x"y" -a x"$a" != x"n" ]; do
- echo "Branch in \"$d\"?"
+ echo "Branch in $dv?"
read -r a
done
if [ x"$a" = x"y" ]; then
;;
branches)
for d in $repos; do
- cd "$d0/$d"
+ enter "$d0/$d"
echo "In $d:"
git branch -a | sed 's/^/ /; /->/d'
cd "$d0"
;;
merge)
for d in $repos; do
- cd "$d0/$d"
+ dv=`visible_repo_name "$d"`
+ enter "$d0/$d"
r=`git symbolic-ref HEAD`
r=${r#refs/heads/}
if git log HEAD..origin/master | 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 \"$d\". Do it?"
+ echo "Could merge from \"master\" into \"$r\" in $dv. Do it?"
read -r a
done
if [ x"$a" = x"y" ]; then
if ! verbose git merge origin/master; then
- echo
- echo "MERGE CONFLICT."
- echo "change into the \"$d\" project directory, and then:"
- echo "- edit the files mentioned above with your favorite editor,"
- echo " and fix the conflicts (marked with <<<<<<< blocks)"
- echo "- when done with a file, 'git add' the file"
- echo "- when done, 'git commit'"
- exit 1
+ check_mergeconflict "$d"
+ exit 1 # this should ALWAYS be fatal
fi
fi
fi
;;
push)
for d in $repos; do
- cd "$d0/$d"
+ dv=`visible_repo_name "$d"`
+ enter "$d0/$d"
r=`git symbolic-ref HEAD`
r=${r#refs/heads/}
if git diff HEAD | grep .; then
# we have uncommitted changes
a=
while [ x"$a" != x"y" -a x"$a" != x"n" ]; do
- echo "Uncommitted changes in \"$r\" in \"$d\". Commit?"
+ echo "Uncommitted changes in \"$r\" in $dv. Commit?"
read -r a
done
if [ x"$a" = x"y" ]; then
if git log "origin/$r".."$r" | grep .; then
a=
while [ x"$a" != x"y" -a x"$a" != x"n" ]; do
- echo "Push \"$r\" in \"$d\"?"
+ echo "Push \"$r\" in $dv?"
read -r a
done
if [ x"$a" = x"y" ]; then
fi
fi
fi
- verbose cd "$d0/fteqcc"
+ enter "$d0/fteqcc"
verbose make $MAKEFLAGS
- verbose cd "$d0/data/xonotic-data.pk3dir"
+ enter "$d0/data/xonotic-data.pk3dir"
verbose make FTEQCC="$d0/fteqcc/fteqcc.bin" $MAKEFLAGS
- verbose cd "$d0/darkplaces"
+ enter "$d0/darkplaces"
verbose make $MAKEFLAGS sv-debug
verbose make $MAKEFLAGS cl-debug
verbose make $MAKEFLAGS sdl-debug
;;
each|foreach)
for d in $repos; do
- verbose cd "$d0/$d"
+ enter "$d0/$d"
verbose "$@"
cd "$d0"
done