blob: 1b52144ad44132935aebce26ecb7ef06dff68d98 [file] [log] [blame]
#!/usr/bin/env python
#
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#
"""\
Usage:
persist-ephemeral-txnprops.py REPOS_PATH TXN_NAME [PREFIX]
Duplicate ephemeral transaction properties so that the information
they carry may persist as properties of the revision created once the
transaction is committed. This is intended to be used as a Subversion
pre-commit hook script.
REPOS_PATH is the on-disk path of the repository whose transaction
properties are being examined/modified. TXN_NAME is the name of the
transaction.
By default, ephemeral transaction properties will be copied to new
properties whose names lack the "svn:" prefix. "svn:txn-user-agent"
will, then, persist as "txn-user-agent". If, however, the optional
PREFIX string argument is provided, it will be prepended to the base
property name in place of the "svn:" namespace. For example, a prefix
of "acme" will cause the "svn:txn-user-agent" property to be copied
to "acme:txn-user-agent".
"""
import sys
import os
from svn import repos, fs, core
def duplicate_ephemeral_txnprops(repos_path, txn_name, prefix=None):
prefix = prefix.rstrip(':')
fs_ptr = repos.fs(repos.open(repos_path))
txn_t = fs.open_txn(fs_ptr, txn_name)
for name, value in fs.txn_proplist(txn_t).items():
if name.startswith('svn:txn-'):
name = name[4:]
if prefix:
name = prefix + ':' + name
fs.change_txn_prop(txn_t, name, value)
def usage_and_exit(errmsg=None):
stream = errmsg and sys.stderr or sys.stdout
stream.write(__doc__)
if errmsg:
stream.write("ERROR: " + errmsg + "\n")
sys.exit(errmsg and 1 or 0)
def main():
argc = len(sys.argv)
if argc < 3:
usage_and_exit("Not enough arguments.")
if argc > 4:
usage_and_exit("Too many arguments.")
repos_path = sys.argv[1]
txn_name = sys.argv[2]
prefix = (argc == 4) and sys.argv[3] or ''
duplicate_ephemeral_txnprops(repos_path, txn_name, prefix)
if __name__ == "__main__":
main()