2008-09-29 5 views

Répondre

2

La valeur par défaut est appelée commit-email.pl et est incluse lorsque vous installez Subversion. Mais here est un en rubis:

#!/usr/bin/ruby -w 

# A Subversion post-commit hook. Edit the configurable stuff below, and 
# copy into your repository's hooks/ directory as "post-commit". Don't 
# forget to "chmod a+x post-commit". 

# ------------------------------------------------------------------------ 

# You *will* need to change these. 

address="[email protected]_DOMAIN.com" 
sendmail="/usr/sbin/sendmail" 
svnlook="/usr/bin/svnlook" 

# ------------------------------------------------------------------------ 

require 'cgi' 

# Subversion's commit-email.pl suggests that svnlook might create files. 
Dir.chdir("/tmp") 

# What revision in what repository? 
repo = ARGV.shift() 
rev = ARGV.shift() 

# Get the overview information. 
info=`#{svnlook} info #{repo} -r #{rev}` 
info_lines=info.split("\n") 
author=info_lines.shift 
date=info_lines.shift 
info_lines.shift 
comment=info_lines 

# Output the overview. 
body = "<p><b>#{author}</b> #{date}</p>" 
body << "<p>" 
comment.each { |line| body << "#{CGI.escapeHTML(line)}<br/>\n" } 
body << "</p>" 
body << "<hr noshade>" 

# Get and output the patch. 
changes=`#{svnlook} diff #{repo} -r #{rev}` 
body << "<pre>" 
changes.each do |top_line| 
    top_line.split("\n").each do |line| 
    color = case 
     when line =~ /^Modified:/|| line =~ /^=+$/ || line =~ /^@@ /: "gray" 
     when line =~ /^-/: "red" 
     when line =~ /^\+/: "blue" 
     else "black" 
    end 
    body << %Q{<font style="color:#{color}">#{CGI.escapeHTML(line)}</font><br/>\n} 
end 
end 
body << "</pre>" 

# Write the header. 
header = "" 
header << "To: #{address}\n" 
header << "From: #{address}\n" 
header << "Subject: [SVN] #{repo} revision #{rev}\n" 
header << "Reply-to: #{address}\n" 
header << "MIME-Version: 1.0\n" 
header << "Content-Type: text/html; charset=UTF-8\n" 
header << "Content-Transfer-Encoding: 8bit\n" 
header << "\n" 

# Send the mail. 
begin 
    fd = open("|#{sendmail} #{address}", "w") 
    fd.print(header) 
    fd.print(body) 
rescue 
    exit(1) 
end 
fd.close 

# We're done. 
exit(0) 
1

Dans le répertoire des crochets dans votre dépôt svn, vous trouverez un script de post-commit.tmpl. Copiez-le pour qu'il soit nommé "post-commit" et modifiez-le en conséquence. Habituellement, il va exécuter le script commit-email.pl fourni avec subversion; cela exigera également d'éditer pour définir les choses comme vous voulez.

2

Pour une raison quelconque, le script ruby ​​et le script de crochet par défaut ne fonctionnaient pas pour moi. Cela peut être dû à quelques bizarreries avec notre serveur de messagerie, mais je vais inclure la partie importante ici de toute façon:

#!/bin/sh 

REPOS="$1" 
REV="$2" 

svnnotify --repos-path "$REPOS" --revision "$REV" --with-diff --to [email protected] --smtp mailserver.domain --from [email protected] -VVVVVVVVV -P "[repository_name]" 

La partie -VVVVVVV affiche des messages très verbeux si vous voulez tester la commande en dehors du script. Il devrait être supprimé dans le script actuel.

Bien sûr, pour que cela fonctionne, vous devez installer svnnotify. Vous pouvez l'installer en installant d'abord cpan, qui devrait venir avec perl. Ensuite, vous devez lancer cpan et installer la bibliothèque SVN :: Notify.

$ cpan 
cpan> install SVN::Notify 

Notez que le « $ » et les « CPAN> » parties sont simplement invites, vous n'avez pas besoin de les taper.

Cette solution était beaucoup plus attrayante pour moi, car elle donnait un message d'erreur détaillé qui contribuait à résoudre ces problèmes avec le serveur de messagerie que j'ai mentionné. Nous avons également plusieurs référentiels, donc la copie d'un programme/script entier dans chaque répertoire aurait été redondante. Votre kilométrage peut varier.

Le texte dans le bloc de code en haut doit être placé dans un fichier texte nommé "post-commit". Ce fichier doit se trouver dans/path/to/svn/repos/repository_name/hooks et être marqué comme exécutable.

+0

Je devais aussi faire 'CPAN> install Net :: SMTP_auth' après avoir obtenu "Impossible de localiser Net/SMTP_auth.pm dans @INC" – philfreo

+0

Notez également cela ne fonctionnera pas par défaut pour envoyer à Gmail. Voir http://cpanforum.com/posts/10541 et 'cpan> install Net :: SMTP :: SSL' – philfreo

1
#!/bin/ksh 
# 
# This is a custom post-commit for sending email 
# when an svn repo is changed. 
# 

rcpts="[email protected], [email protected]" 

repodir=$1 
revision=$2 

author=`/usr/bin/svnlook author -r $revision $repodir` 
date=`/usr/bin/svnlook date -r $revision $repodir` 
log=`/usr/bin/svnlook log  -r $revision $repodir` 
info=`/usr/bin/svnlook changed -r $revision $repodir` 

repo=${repodir##*/} 

subject="$repo svn updated by $author" 

url="https://myserver.bar.edu/svn/$repo" 

/usr/bin/mail -s "$subject" "$rcpts"<<EOM 
repository: $url 
date:  $date 
username: $author 
revision: $revision 
comment: $log 

$info 
EOM 
0

Essayez cette

/usr/bin/svnnotify --revision "$REV" --repos-path "$REPOS" \ --subject-cx --subject-prefix "[Project:commit] " --max-sub-length 128 \ --with-diff --handler Alternative --alt HTML::ColorDiff \ --to '[email protected]' --from '[email protected]' --set-sender

Questions connexes