HowTo setup automatic refresh of repositories in Redmine on commit » History » Version 10

Maxim Strukov, 2010-10-13 16:40

1 1 Etienne Massip
h1. HowTo setup automatic refresh of repositories in Redmine on commit
2 4 Mischa The Evil
3 4 Mischa The Evil
{{>toc}}
4 1 Etienne Massip
5 3 Etienne Massip
Since of version 0.9.0, you can use an HTTP submission, either GET or POST, to automatically refresh Redmine after you committed your modification in your repository.
6 1 Etienne Massip
7 10 Maxim Strukov
Examples:
8 1 Etienne Massip
9 1 Etienne Massip
* _/sys/fetch_changesets?key=<your service key>_ fetches changesets for all active projects
10 7 Felix Schäfer
* _/sys/fetch_changesets?id=<project identifier>&key=<your service key>_ fetches changesets from the repository of a specific project
11 1 Etienne Massip
12 1 Etienne Massip
See #2925 for original feature request.
13 1 Etienne Massip
14 1 Etienne Massip
h2. Step 1 : configure Redmine to accept the request
15 1 Etienne Massip
16 1 Etienne Massip
Web service for repositories must by activated in the Administration menu and the generated key will have to be used by the caller in Step 2.
17 1 Etienne Massip
18 1 Etienne Massip
h2. Step 2 : setup a post-commit script on the SCM server
19 1 Etienne Massip
20 1 Etienne Massip
You have to setup a post-commit script which will call the previous URL.
21 1 Etienne Massip
22 1 Etienne Massip
h3. Subversion
23 1 Etienne Massip
24 8 Etienne Massip
Simply add a @post-commit@ (or @post-commit.cmd@ on a Windows system) script file in the hooks sub-directory which contains the HTTP request call :
25 8 Etienne Massip
<pre><code class="sh">
26 1 Etienne Massip
#!/bin/sh
27 1 Etienne Massip
28 6 Jürgen Hörmann
curl "http://<redmine url>/sys/fetch_changesets?key=<your service key>"
29 8 Etienne Massip
</code></pre>
30 1 Etienne Massip
31 1 Etienne Massip
Or, on a Windows system (2 files) :
32 1 Etienne Massip
33 8 Etienne Massip
* @post-commit.cmd@ :
34 8 Etienne Massip
<pre><code class="cmd">
35 2 Etienne Massip
cscript "%~dp0refresh_redmine.vbs" //Nologo >> "%~dp0refresh_redmine.log" 2>&1
36 8 Etienne Massip
</code></pre>
37 1 Etienne Massip
38 8 Etienne Massip
* @refresh_redmine.vbs@ :
39 8 Etienne Massip
<pre><code class="vbs">
40 1 Etienne Massip
private const REDMINE_SERVICE_KEY = "<your service key>"
41 1 Etienne Massip
42 1 Etienne Massip
Call HTTPPost("http://<redmine url>/sys/fetch_changesets", "key=" & REDMINE_SERVICE_KEY)
43 1 Etienne Massip
44 1 Etienne Massip
Private Function HTTPPost(sUrl, sRequest)
45 1 Etienne Massip
  set oHTTP = CreateObject("Microsoft.XMLHTTP")
46 1 Etienne Massip
  oHTTP.open "POST", sUrl,false
47 1 Etienne Massip
  oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
48 1 Etienne Massip
  oHTTP.setRequestHeader "Content-Length", Len(sRequest)
49 1 Etienne Massip
  oHTTP.send sRequest
50 1 Etienne Massip
  HTTPPost = oHTTP.responseText
51 1 Etienne Massip
End Function
52 8 Etienne Massip
</code></pre>
53 9 András Veres-Szentkirályi
54 9 András Veres-Szentkirályi
h3. Git
55 9 András Veres-Szentkirályi
56 9 András Veres-Szentkirályi
Simply add a @post-receive@ (even on a Windows system, no extension is required) script file in the hooks sub-directory which contains the HTTP request call:
57 9 András Veres-Szentkirályi
58 9 András Veres-Szentkirályi
<pre><code class="sh">
59 9 András Veres-Szentkirályi
#!/bin/sh
60 9 András Veres-Szentkirályi
61 9 András Veres-Szentkirályi
curl "http://<redmine url>/sys/fetch_changesets?key=<your service key>"
62 9 András Veres-Szentkirályi
</code></pre>
63 9 András Veres-Szentkirályi
64 9 András Veres-Szentkirályi
This setup works in the "usual" case, where Redmine's repository is set to a bare Git repository, so no commits can happen directly in there. If you have a rare setup with a non-bare repository linked to Redmine, you need to add the script as a @post-commit@ hook as well.
65 9 András Veres-Szentkirályi
66 9 András Veres-Szentkirályi
Don't forget to make the file(s) executable on UNIXish systems, more information about Git hooks can be found in the "githooks":http://www.kernel.org/pub/software/scm/git/docs/githooks.html man page.