| 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() |
|---|