blob: 745604ef235563dbedad16d0f37f518010f72082 [file] [log] [blame]
#!/usr/bin/env python
# ====================================================================
# Copyright (c) 2004-2005 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
import os
import os.path
from svn import repos, fs, delta, core
### DEAR USER: Please populate the test_props() and test_path_change()
### to do your bidding.
def test_props(props):
"""Validate the PROPS (a dictionary mapping property names to
values) set on the transaction. Return 0 if all is well, non-zero
otherwise."""
### Test the transaction (revision-to-be) properties. If there is
### bogosity, write to sys.stderr and return non-zero.
return 0
def test_path_change(path, change):
"""Validate the CHANGE made to PATH in the transaction. Return 0
if all is well, non-zero otherwise."""
# The svn_node_kind of the path.
item_kind = change.item_kind
# Non-zero iff properties of this path were changed.
prop_changes = change.prop_changes
# Non-zero iff path is a file, and its text was changed.
text_changed = change.text_changed
# The location of the previous revision of this resource, if any.
base_path = change.base_path
base_rev = change.base_rev
# Non-zero iff this change represents an addition (see
# base_path/base_rev for whether it was an addition with history).
added = change.added
### Test the path change as you see fit. If there is bogosity,
### write to sys.stderr and return non-zero.
return 1
def main(pool, repos_dir, txn):
# Construct a ChangeCollector to fetch our changes.
fs_ptr = repos.svn_repos_fs(repos.svn_repos_open(repos_dir, pool))
root = fs.txn_root(fs.open_txn(fs_ptr, txn, pool), pool)
cc = repos.ChangeCollector(fs_ptr, root, pool)
# Call the transaction property validator. Might as well get the
# cheap checks outta the way first.
retval = test_props(cc.get_root_props())
if retval:
return retval
# Generate the path-based changes list.
e_ptr, e_baton = delta.make_editor(cc, pool)
repos.svn_repos_replay(root, e_ptr, e_baton, pool)
# Call the path change validator.
changes = cc.get_changes()
paths = changes.keys()
paths.sort(lambda a, b: core.svn_path_compare_paths(a, b))
for path in paths:
change = changes[path]
retval = test_path_change(path, change)
if retval:
return retval
return 0
def _usage_and_exit():
sys.stderr.write("USAGE: %s REPOS-DIR TXN-NAME\n" % (sys.argv[0]))
sys.exit(1)
if __name__ == '__main__':
if len(sys.argv) < 3:
_usage_and_exit()
sys.exit(core.run_app(main, sys.argv[1], sys.argv[2]))