#!/bin/sh set -e action=$1 outdir=$2 repodir=$3 branches() { git for-each-ref 'refs/remotes' | grep -vE ' refs/remotes/([^/]*/HEAD|.*/archived/.*)$' } escape_html() { sed -e 's/&/\&/g; s//>/g' } to_rss() { outdir=$1 name=$2 masterhash=$3 hash=$4 branch=$5 repo=$6 if [ -n "$repo" ]; then repo=" in $repo" fi filename=`echo -n "$name" | tr -c 'A-Za-z0-9' '_'`.rss outfilename="$outdir/$filename" branch=`echo -n "$branch" | escape_html` repo=`echo -n "$repo" | escape_html` if ! [ -f "$outfilename" ]; then datetime=`date --rfc-2822` cat >"$outfilename" < Merge conflicts for $name http://git.xonotic.org/ ... 3600 $datetime EOF fi cat >>"$outfilename" < $branch$repo ($hash) http://git.xonotic.org/?p=xonotic/netradiant.git;a=shortlog;h=refs/heads/$name/$branch http://de.git.xonotic.org/conflicts/$filename#$hash-$masterhash " >>"$outfilename" escape_html >>"$outfilename" echo "" >>"$outfilename" cat >>"$outfilename" < EOF } clear_rss() { datetime=`date --rfc-2822` sed -i -e '//,$d' "$1" cat <"$1" $datetime EOF } finish_rss() { cat <>"$1" EOF } if [ -z "$outdir" ]; then set -- fi case "$action" in --init) mkdir -p "$outdir" for f in "$outdir"/*; do [ -f "$f" ] || continue clear_rss "$f" done ;; --finish) for f in "$outdir"/*; do [ -f "$f" ] || continue finish_rss "$f" done ;; --add) masterhash=$( ( if [ -n "$repodir" ]; then cd "$repodir" fi git rev-parse HEAD ) ) ( if [ -n "$repodir" ]; then cd "$repodir" fi branches ) | while read -r HASH TYPE REFNAME; do echo >&2 -n "$repodir $REFNAME..." out=$( ( if [ -n "$repodir" ]; then cd "$repodir" fi git reset --hard "$masterhash" >/dev/null 2>&1 if out=`git merge --no-commit -- "$REFNAME" 2>&1`; then good=true else good=false echo "$out" fi git reset --hard "$masterhash" >/dev/null 2>&1 ) ) if [ -n "$out" ]; then b=${REFNAME#refs/remotes/[^/]*/} case "$b" in */*) n=${b%%/*} ;; *) n=divVerent ;; esac echo "$out" | to_rss "$outdir" "$n" "$masterhash" "$HASH" "$b" "$repodir" echo >&2 " CONFLICT" else echo >&2 " ok" fi done ;; *) echo "Usage: $0 --init OUTDIR" echo " $0 --add OUTDIR [REPODIR]" echo " $0 --finish OUTDIR" exit 1 ;; esac