blob: e4a2b35514e459a11d8b93f9ead0e07131e03d89 [file] [log] [blame]
#!/usr/bin/env python
# ====================================================================
# Copyright (c) 2004 CollabNet. All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://subversion.tigris.org/license.html.
# If newer versions of this license are posted there, you may use a
# newer version instead, at your option.
#
# This software consists of voluntary contributions made by many
# individuals. For exact contribution history, see the revision
# history and logs, available at http://subversion.tigris.org/.
# ====================================================================
import sys, os, string
SVNLOOK='/usr/local/bin/svnlook'
MESSAGE="""
Dear {AUTHOR}:
We're sorry, but we just couldn't allow you to have the
revision {REVISION} commit.
-- Love, Your Administrator(s).
"""
if len(sys.argv) < 5:
sys.stderr.write(
"Usage: %s REPOS AUTHOR BLOCKED_REV BLOCKED_AUTHOR [...]\n"
"\n"
"Disallow a set BLOCKED_AUTHORS from committing the revision\n"
"expected to bring REPOS to a youngest revision of BLOCKED_REV.\n"
"Written as a prank for use as a start-commit hook (which provides\n"
"REPOS and AUTHOR for you).\n"
"\n"
"NOTE: There is a small chance that while HEAD is BLOCKED_REV - 2,\n"
"a commit could slip in between the time we query the youngest\n"
"revision and the time this commit-in-progress actually occurs.\n"
"\n"
% sys.argv[0])
sys.exit(1)
repos = sys.argv[1]
author = sys.argv[2]
blocked_rev = sys.argv[3]
blocked_authors = sys.argv[4:]
if author in blocked_authors:
youngest_cmd = '%s youngest %s' % (SVNLOOK, repos)
youngest = os.popen(youngest_cmd, 'r').readline().rstrip('\n')
# See if this is the blocked revision
if int(youngest) == int(blocked_rev) - 1:
MESSAGE = MESSAGE.replace('{AUTHOR}', author)
MESSAGE = MESSAGE.replace('{REVISION}', blocked_rev)
sys.stderr.write(MESSAGE)
sys.exit(1)
sys.exit(0)