代码
# Copyright 2009 Corey Trager
# Distributed under the terms of the GNU General Public License
import sys
import subprocess
import re
import urllib
import os
#######################################################################
#
# See svn documentation for how to install a hook script.
#
#######################################################################
#######################################################################
#
# !!! Start of stuff you need to change
#
########################################################################
# BugTracker.NET username and password. The username needs to match
# a setting in Web.config.
btnet_username = "wxy"
btnet_password = "wxy"
# The path to the svn executable
# 下面这一行,不能依照官方模板的格式来,,这一行花了我整整一个晚上
svn_path = "C:\\Program Files\\CollabNet\\Subversion Server\\svn.exe"
# The URL needs to be reachable from the machine where this script is
# running. (I have a virtual directory named "btnet"). Don't
# use IIS windows security on svn_hook.aspx.
btnet_url = "http://10.129.250.99/BugTracker/svn_hook.aspx"
# The repository URL. BugTracker.NET web pages will use this URL to
# interact with this repository. If you need a username and password
# to access this repo, you configure that in Web.config. See
# Web.config for more info.
this_repository_url = "http://10.129.250.99:81/svn/TeacherManager"
bDebug = True
#######################################################################
#
# !!! End of stuff you need to change
#
#######################################################################
#######################################################################
# for debugging, display info and keep a log
#######################################################################
def debug_out(s):
if (bDebug):
f = open((os.environ["TEMP"]) + '\\btnet_svn_hook_log.txt', 'a')
f.write(s)
f.write('\n')
f.close
print s
repo = sys.argv[1]
rev = sys.argv[2]
debug_out(repo)
debug_out(rev)
#######################################################################
#
# This is where this script keeps track of previously processed
# revisions. If you delete this file, this script will send log info
# for ALL revisions to BugTracker.NET. You might want to do that to
# reload the svn_revisions and svn_affected_paths tables.
#
#######################################################################
prev_revision_file = repo + "\\hooks\\btnet_prev_revision.txt"
debug_out(prev_revision_file)
#######################################################################
# Get the log info from svn
# If we've already fetched info in the past, just fetch the info
# since the last revision
#######################################################################
# get the previous revision
try:
most_recent_revision_file = open(prev_revision_file,"r")
prev_revision = most_recent_revision_file.read(40)
most_recent_revision_file.close()
except:
prev_revision = ""
debug_out("prev_revision")
debug_out(prev_revision)
# just since previously processed revision
file_url = " file:///" + repo.replace("\\","/")
subcommand = " log --verbose --xml "
if prev_revision != "":
cmd = svn_path + subcommand + " -r " + prev_revision + ":" + rev + file_url
else:
cmd = svn_path + subcommand + file_url
debug_out(cmd)
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
debug_out("log stdout:")
log_string = process.stdout.read()
debug_out(log_string)
debug_out("stderr:")
debug_out(process.stderr.read())
# remember that we already processed this revision
most_recent_revision_file = open(prev_revision_file,"w")
most_recent_revision_file.write(rev)
most_recent_revision_file.close()
# get the first revision in the log string and save it to the file.
#######################################################################
# send an http request to BugTracker.NET, the svn_hook.aspx page.
#######################################################################
params = urllib.urlencode({
'svn_log': log_string,
'repo': this_repository_url,
'username': btnet_username,
'password': btnet_password})
response = urllib.urlopen(btnet_url, params)
data = response.read()
debug_out(data)
# Distributed under the terms of the GNU General Public License
import sys
import subprocess
import re
import urllib
import os
#######################################################################
#
# See svn documentation for how to install a hook script.
#
#######################################################################
#######################################################################
#
# !!! Start of stuff you need to change
#
########################################################################
# BugTracker.NET username and password. The username needs to match
# a setting in Web.config.
btnet_username = "wxy"
btnet_password = "wxy"
# The path to the svn executable
# 下面这一行,不能依照官方模板的格式来,,这一行花了我整整一个晚上
svn_path = "C:\\Program Files\\CollabNet\\Subversion Server\\svn.exe"
# The URL needs to be reachable from the machine where this script is
# running. (I have a virtual directory named "btnet"). Don't
# use IIS windows security on svn_hook.aspx.
btnet_url = "http://10.129.250.99/BugTracker/svn_hook.aspx"
# The repository URL. BugTracker.NET web pages will use this URL to
# interact with this repository. If you need a username and password
# to access this repo, you configure that in Web.config. See
# Web.config for more info.
this_repository_url = "http://10.129.250.99:81/svn/TeacherManager"
bDebug = True
#######################################################################
#
# !!! End of stuff you need to change
#
#######################################################################
#######################################################################
# for debugging, display info and keep a log
#######################################################################
def debug_out(s):
if (bDebug):
f = open((os.environ["TEMP"]) + '\\btnet_svn_hook_log.txt', 'a')
f.write(s)
f.write('\n')
f.close
print s
repo = sys.argv[1]
rev = sys.argv[2]
debug_out(repo)
debug_out(rev)
#######################################################################
#
# This is where this script keeps track of previously processed
# revisions. If you delete this file, this script will send log info
# for ALL revisions to BugTracker.NET. You might want to do that to
# reload the svn_revisions and svn_affected_paths tables.
#
#######################################################################
prev_revision_file = repo + "\\hooks\\btnet_prev_revision.txt"
debug_out(prev_revision_file)
#######################################################################
# Get the log info from svn
# If we've already fetched info in the past, just fetch the info
# since the last revision
#######################################################################
# get the previous revision
try:
most_recent_revision_file = open(prev_revision_file,"r")
prev_revision = most_recent_revision_file.read(40)
most_recent_revision_file.close()
except:
prev_revision = ""
debug_out("prev_revision")
debug_out(prev_revision)
# just since previously processed revision
file_url = " file:///" + repo.replace("\\","/")
subcommand = " log --verbose --xml "
if prev_revision != "":
cmd = svn_path + subcommand + " -r " + prev_revision + ":" + rev + file_url
else:
cmd = svn_path + subcommand + file_url
debug_out(cmd)
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
debug_out("log stdout:")
log_string = process.stdout.read()
debug_out(log_string)
debug_out("stderr:")
debug_out(process.stderr.read())
# remember that we already processed this revision
most_recent_revision_file = open(prev_revision_file,"w")
most_recent_revision_file.write(rev)
most_recent_revision_file.close()
# get the first revision in the log string and save it to the file.
#######################################################################
# send an http request to BugTracker.NET, the svn_hook.aspx page.
#######################################################################
params = urllib.urlencode({
'svn_log': log_string,
'repo': this_repository_url,
'username': btnet_username,
'password': btnet_password})
response = urllib.urlopen(btnet_url, params)
data = response.read()
debug_out(data)