> -----Original Message-----
> From: Alfred von Campe [mailto:alf...@von-campe.com] 
> Sent: Monday, December 02, 2013 3:44 PM
> To: users@subversion.apache.org
> Subject: Help with post-commit script
>
> I need to implement a post-commit hook that does the following in a 
> "standard" Subversion repository (with trunk, branches, and tags at the top 
> level):
>
>   1. Checks for existence of a certain property in the top-level directory of 
> the trunk or branch
>   2. If property exists, check if any files listed in said property's value 
> has been modified
>   3. Send an email with all diffs from step 2 to the recipients listed in 
> another property
>
> What makes it tricky is that in all steps above I need to be able to handle 
> trunk as well as any branches.  In addition, since it is possible to submit 
> to both trunk and/or one or more branches in the same commit, and the 
> property > may exist in one but not the other, I need to walk through all 
> files affected in the commit.  I think this means I cannot use just svnlook 
> and will have to parse the output of svn log.  My questions are:
>
>   1. Is parsing the output of svn log the best approach?
>   2. If not, what is a better approach?
>   3. I would prefer to write this in bash or perl, but would appreciate any 
> examples in other languages before I go re-inventing the wheel.
>
> Thanks,
> Alfred
>
> P.S.  Please CC me as I am not on the list.

1.  Probably not.
2.  Ssee below
3.  See below

Pseudocode.  You'll need to fill in the gaps, i.e. the ellipses.  And you'll 
probably want to delete the temp files with a trap (google on: bash delete temp 
dir)


#!/bin/bash

set -o pipefail

REPOS_PATH=$1
REV=$2  # or is it the other way around?

RECIPIENT_LIST=$(svnlook propget ... my:email_list_prop)
if [[ -z "$RECIPIENT_LIST" ]]
then
        exit 0
fi


CHANGED_LIST=$(mktemp ...)
FILES_TO_REPORT_ON=$(mktemp ...)

svnlook changed ... > $CHANGED_LIST || exit 1
cat $CHANGED_LIST | sed 's/^....//g' | perl -ne 'print "$1$2\n" if 
/^(trunk)\/|^(branches\/[^\/]*)\//' | sort -u | xargs -n 1 -i svnlook propget 
$REPOS_PATH my:filelist_prop "{}" > $FILES_TO_REPORT_ON  || exit 1

cat $CHANGED_LIST | while read i
do
        grep -q "$i" "$FILES_TO_REPORT_ON"
        if [[ $? -eq 0 ]]
        then
                sendmail -s " $i was touched in an impure manner" 
$RECIPIENT_LIST < svnlook diff -r ...
        fi
done



Also, do NOT have any blank links in the "my:filelist_prop". Or does that only 
apply when using 'grep -v'?




Reply via email to