Ticket #2209: post-commit.trac-create-version

File post-commit.trac-create-version, 1.7 kB (added by anarcat@koumbit.org, 6 months ago)

our current version of the script

Line 
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 #
4 # This script should be invoked from the subversion post-commit hook like this:
5 #
6 #  REPOS="$1"
7 #  REV="$2"
8 #  $REPOS/hooks/post-commit.trac-create-version "$REPOS" "$REV"
9 #
10 # Daniel Serodio <dserodio gmail>
11
12 import re
13 import sys
14 import os
15
16 TRAC_ENV_ROOT = '/var/lib/trac'
17 versions_re = re.compile(r'^A\W*([\w-]+)/tags/([^/]+)')
18
19 def main():
20     if len(sys.argv) != 3:
21         print >> sys.stderr, 'Usage: %s <repository> <revision>' % sys.argv[0]
22         sys.exit(1)
23
24     repos = sys.argv[1]
25     rev = sys.argv[2]
26     changed_files = os.popen("svnlook changed -r %s %s" % (rev, repos)).readlines()
27
28     for file in changed_files:
29         match = versions_re.search(file)
30         if match: # we found a new tag
31             project = match.group(1)
32             version = match.group(2)
33             version_full = "%s-%s" % ( project, version )
34             repo = os.path.basename(repos)
35             trac_env = os.path.join(TRAC_ENV_ROOT, repo)
36             # create the version
37             os.popen("trac-admin %s version add %s now" % (trac_env, version_full))
38             # close the milestone
39             os.popen("trac-admin %s milestone completed %s now" % (trac_env, version_full))
40             # guess the next version
41             groups = re.match(r'([0-9]+)(([-.][0-9]+)*)?([-.][0-9]+)|([0-9]+)', version).groups()
42             if groups[-1]:
43                 versioninc = str(int(groups[-1]) + 1)
44             else:
45                 last = groups[-2]
46                 g = re.match(r'([-.])([0-9]+)', last).groups()
47                 lastinc = int(g[1]) + 1
48                 versioninc = groups[0] + groups[1] + g[0] + str(lastinc)
49             # create the next milestone
50             os.popen("trac-admin %s milestone add %s" % (trac_env, versioninc))
51
52     sys.exit(0)
53
54 if __name__ == '__main__':
55     main()