151 lines
5.2 KiB
Bash
Executable file
151 lines
5.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# POST-COMMIT HOOK
|
|
#
|
|
# The post-commit hook is invoked after a commit. Subversion runs
|
|
# this hook by invoking a program (script, executable, binary, etc.)
|
|
# named 'post-commit' (for which this file is a template) with the
|
|
# following ordered arguments:
|
|
#
|
|
# [1] REPOS-PATH (the path to this repository)
|
|
# [2] REV (the number of the revision just committed)
|
|
#
|
|
# The default working directory for the invocation is undefined, so
|
|
# the program should set one explicitly if it cares.
|
|
#
|
|
# Because the commit has already completed and cannot be undone,
|
|
# the exit code of the hook program is ignored. The hook program
|
|
# can use the 'svnlook' utility to help it examine the
|
|
# newly-committed tree.
|
|
#
|
|
# On a Unix system, the normal procedure is to have 'post-commit'
|
|
# invoke other programs to do the real work, though it may do the
|
|
# work itself too.
|
|
#
|
|
# Note that 'post-commit' must be executable by the user(s) who will
|
|
# invoke it (typically the user httpd runs as), and that user must
|
|
# have filesystem-level permission to access the repository.
|
|
#
|
|
# On a Windows system, you should name the hook program
|
|
# 'post-commit.bat' or 'post-commit.exe',
|
|
# but the basic idea is the same.
|
|
#
|
|
# The hook program typically does not inherit the environment of
|
|
# its parent process. For example, a common problem is for the
|
|
# PATH environment variable to not be set to its usual value, so
|
|
# that subprograms fail to launch unless invoked via absolute path.
|
|
# If you're having unexpected problems with a hook program, the
|
|
# culprit may be unusual (or missing) environment variables.
|
|
#
|
|
# Here is an example hook script, for a Unix /bin/sh interpreter.
|
|
# For more examples and pre-written hooks, see those in
|
|
# the Subversion repository at
|
|
# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
|
|
# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/
|
|
|
|
# Log everything for debug, otherwise use explicit logging (further down)
|
|
#[ "$LOGGING" ] || LOGGING=1 { exec $0 "$@" 2>&1 | logger -p user.info -t "commit"; }
|
|
|
|
logger -p user.info -t "hook" "${0##*/} $*"
|
|
|
|
repo="$1"
|
|
rev="$2"
|
|
|
|
# Settings
|
|
program=${0##*/}
|
|
progdir=${0%/*}
|
|
thishost="$(/bin/hostname)"
|
|
thishost="${thishost%%.*}"
|
|
svnpath="/a/svn/tools/ietfdb"
|
|
trac="/a/www/www6s/trac/ietfdb/"
|
|
svn_url="https://svn.ietf.org/svn/tools/ietfdb"
|
|
trac_url="https://trac.ietf.org/trac/ietfdb"
|
|
|
|
# Do a local backup
|
|
#relpath=${repo#$svnpath/}
|
|
#bckpath="$svnpath/.backup/$thishost/$relpath"
|
|
#[ -d $bckpath ] || mkdir -p $bckpath
|
|
#/usr/bin/svn-fast-backup -q $repo $bckpath
|
|
|
|
# Inform trac about a new changeset
|
|
trac-admin $trac changeset added ietfdb $rev
|
|
|
|
committer=$(/usr/bin/svnlook author $repo -r $rev)
|
|
comments=$(/usr/bin/svnlook log $repo -r $rev)
|
|
files=$(/usr/bin/svnlook changed $repo -r $rev)
|
|
|
|
dirs=$(/usr/bin/svnlook dirs-changed -r$rev $repo)
|
|
logger -p user.info -t "commit" "dirs '$dirs'"
|
|
|
|
# Look for 'requirements.txt' above the committed change. Looking only for
|
|
# filechanges, not for dirchanges, filters out commits which are just tree
|
|
# copies, such as when creating new dev branches for the code sprint.
|
|
branch=$($progdir/svnfind --filechange --dirpath $repo $rev "requirements.txt")
|
|
|
|
if [ -n "$branch" ]; then
|
|
# Update trac tickets
|
|
/usr/bin/python2.7 $progdir/trac-post-commit-hook -p "$trac" -r "$rev" 2>&1 | logger -t "svn post-commit" -p "user.error" -i
|
|
|
|
# Notify buildbot
|
|
# filenames=$(/usr/bin/svnlook changed $repo -r $rev | sed -r -e 's/^ *[^ ]+ +//' -e "s|$branch/||")
|
|
# # Notify local build master
|
|
/usr/local/bin/buildbot sendchange \
|
|
# --master="zinfandel.tools.ietf.org:9989" --auth="ietfdb:BRiR6XcT7x3$" \
|
|
# --who="$committer" --repository="https://svn.tools.ietf.org/svn/tools/ietfdb/" \
|
|
# --vc=svn --branch="$branch" --revision=$rev \
|
|
# --revlink="https://trac.tools.ietf.org/tools/ietfdb/changeset/$rev" \
|
|
# --comments="$comments" $filenames > /dev/null
|
|
# Notify remote build master (must use the remote buildbot binary to match version)
|
|
# ssh henrik@dunkelfelder.tools.ietf.org /usr/local/bin/buildbot sendchange \
|
|
# --master="dunkelfelder.tools.ietf.org:9989" --auth="ietfdb:BRiR6XcT7x3$" \
|
|
# --who="$committer" --repository="https://svn.tools.ietf.org/svn/tools/ietfdb/" \
|
|
# --vc=svn --branch="$branch" --revision=$rev \
|
|
# --revlink="https://trac.tools.ietf.org/tools/ietfdb/changeset/$rev" \
|
|
# --comments="$comments" $filenames > /dev/null
|
|
|
|
fi
|
|
|
|
|
|
# Log the commit
|
|
logger -p user.info -t "commit" "$relpath r$rev $committer"
|
|
logger -p user.info -t "commit" "branch: $branch"
|
|
|
|
# Notify committers
|
|
|
|
if [[ $comments =~ ready.(for|to).merge ]]; then
|
|
mail $(< $progdir/notify-email.txt) -s "[svnhook] Svn commit ready for merge: $relpath | $committer: ${comments:0:42}..." <<-EOF | logger -p user.info -t "ready for merge email"
|
|
|
|
$committer has a commit ready for merge:
|
|
$relpath/$branch [$rev]:
|
|
|
|
$comments
|
|
|
|
Svn: $svn_url/$branch
|
|
Trac: $trac_url/changeset/$rev/$branch
|
|
|
|
Files:
|
|
|
|
$files
|
|
|
|
EOF
|
|
|
|
else
|
|
|
|
mail $(< $progdir/notify-email.txt) -s "[svnhook] Svn commit to $relpath | $committer: ${comments:0:42}..." <<-EOF | logger -p user.info -t "commit email"
|
|
|
|
$committer has made a new SVN commit in
|
|
$relpath/$branch [$rev]:
|
|
|
|
$comments
|
|
|
|
Svn: $svn_url/$branch
|
|
Trac: $trac_url/changeset/$rev/$branch
|
|
|
|
Files:
|
|
|
|
$files
|
|
|
|
EOF
|
|
|
|
fi
|