blob: 962d3abcabebabe751911c8786fa80ad6ca0ca4e [file] [log] [blame]
#!/usr/bin/env python
#
# autoprop_tests.py: testing automatic properties
#
# Subversion is a tool for revision control.
# See http://subversion.apache.org for more information.
#
# ====================================================================
# 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.
######################################################################
# General modules
import os, logging, stat
logger = logging.getLogger()
# Our testing module
import svntest
# (abbreviation)
Skip = svntest.testcase.Skip_deco
SkipUnless = svntest.testcase.SkipUnless_deco
XFail = svntest.testcase.XFail_deco
Issues = svntest.testcase.Issues_deco
Issue = svntest.testcase.Issue_deco
Wimp = svntest.testcase.Wimp_deco
Item = svntest.wc.StateItem
from svntest.main import SVN_PROP_INHERITABLE_AUTOPROPS
# Helper function
def check_proplist(path, exp_out):
"""Verify that property list on PATH has a value of EXP_OUT"""
props = svntest.tree.get_props([path]).get(path, {})
if props != exp_out:
logger.warn("Expected properties: %s", exp_out)
logger.warn("Actual properties: %s", props)
raise svntest.Failure
######################################################################
# Tests
#----------------------------------------------------------------------
def create_config(sbox, enable_flag):
"create config directories and files"
# contents of the file 'config'
config_contents = '''\
[auth]
password-stores =
[miscellany]
enable-auto-props = %s
[auto-props]
*.c = cfile=yes
*.jpg = jpgfile=ja
fubar* = tarfile=si
foobar.lha = lhafile=da;lzhfile=niet
spacetest = abc = def ; ghi = ; = j
escapetest = myval=;;;;val;myprop=p
quotetest = svn:keywords="Author Date Id Rev URL";
* = auto=oui
''' % (enable_flag and 'yes' or 'no')
return sbox.create_config_dir(config_contents)
#----------------------------------------------------------------------
def autoprops_test(sbox, cmd, cfgenable, clienable, subdir):
"""configurable autoprops test.
CMD is the subcommand to test: 'import' or 'add'
if CFGENABLE is true, enable autoprops in the config file, else disable
if CLIENABLE == 1: --auto-props is added to the command line
0: nothing is added
-1: --no-auto-props is added to command line
if string SUBDIR is not empty files are created in that subdir and the
directory is added/imported"""
# Bootstrap
sbox.build()
# some directories
wc_dir = sbox.wc_dir
tmp_dir = os.path.abspath(sbox.add_wc_path('autoprops'))
os.makedirs(tmp_dir)
repos_url = sbox.repo_url
config_dir = create_config(sbox, cfgenable)
# initialize parameters
if cmd == 'import':
parameters = ['import', '-m', 'bla']
files_dir = tmp_dir
else:
parameters = ['add']
files_dir = wc_dir
parameters = parameters + ['--config-dir', config_dir]
# add comandline flags
if clienable == 1:
parameters = parameters + ['--auto-props']
enable_flag = 1
elif clienable == -1:
parameters = parameters + ['--no-auto-props']
enable_flag = 0
else:
enable_flag = cfgenable
# setup subdirectory if needed
if len(subdir) > 0:
files_dir = os.path.join(files_dir, subdir)
files_wc_dir = os.path.join(wc_dir, subdir)
os.makedirs(files_dir)
else:
files_wc_dir = wc_dir
# create test files
filenames = ['foo.h',
'foo.c',
'foo.jpg',
'fubar.tar',
'foobar.lha',
'spacetest',
'escapetest',
'quotetest']
for filename in filenames:
svntest.main.file_write(os.path.join(files_dir, filename),
'foo\nbar\nbaz\n')
if len(subdir) == 0:
# add/import the files
for filename in filenames:
path = os.path.join(files_dir, filename)
if cmd == 'import':
tmp_params = parameters + [path, repos_url + '/' + filename]
else:
tmp_params = parameters + [path]
svntest.main.run_svn(None, *tmp_params)
else:
# add/import subdirectory
if cmd == 'import':
parameters = parameters + [files_dir, repos_url]
else:
parameters = parameters + [files_wc_dir]
svntest.main.run_svn(None, *parameters)
# do an svn co if needed
if cmd == 'import':
svntest.main.run_svn(None, 'checkout', repos_url, files_wc_dir,
'--config-dir', config_dir)
# check the properties
if enable_flag:
filename = os.path.join(files_wc_dir, 'foo.h')
check_proplist(filename, {'auto':'oui'})
filename = os.path.join(files_wc_dir, 'foo.c')
check_proplist(filename, {'auto':'oui', 'cfile':'yes'})
filename = os.path.join(files_wc_dir, 'foo.jpg')
check_proplist(filename, {'auto':'oui', 'jpgfile':'ja'})
filename = os.path.join(files_wc_dir, 'fubar.tar')
check_proplist(filename, {'auto':'oui', 'tarfile':'si'})
filename = os.path.join(files_wc_dir, 'foobar.lha')
check_proplist(filename, {'auto':'oui', 'lhafile':'da', 'lzhfile':'niet'})
filename = os.path.join(files_wc_dir, 'spacetest')
check_proplist(filename, {'auto':'oui', 'abc':'def', 'ghi':''})
filename = os.path.join(files_wc_dir, 'escapetest')
check_proplist(filename, {'auto':'oui', 'myval':';;val', 'myprop':'p'})
filename = os.path.join(files_wc_dir, 'quotetest')
check_proplist(filename, {'auto':'oui',
'svn:keywords': 'Author Date Id Rev URL'})
else:
for filename in filenames:
check_proplist(os.path.join(files_wc_dir, filename), {})
#----------------------------------------------------------------------
def autoprops_add_no_none(sbox):
"add: config=no, commandline=none"
autoprops_test(sbox, 'add', 0, 0, '')
#----------------------------------------------------------------------
def autoprops_add_yes_none(sbox):
"add: config=yes, commandline=none"
autoprops_test(sbox, 'add', 1, 0, '')
#----------------------------------------------------------------------
def autoprops_add_no_yes(sbox):
"add: config=no, commandline=yes"
autoprops_test(sbox, 'add', 0, 1, '')
#----------------------------------------------------------------------
def autoprops_add_yes_yes(sbox):
"add: config=yes, commandline=yes"
autoprops_test(sbox, 'add', 1, 1, '')
#----------------------------------------------------------------------
def autoprops_add_no_no(sbox):
"add: config=no, commandline=no"
autoprops_test(sbox, 'add', 0, -1, '')
#----------------------------------------------------------------------
def autoprops_add_yes_no(sbox):
"add: config=yes, commandline=no"
autoprops_test(sbox, 'add', 1, -1, '')
#----------------------------------------------------------------------
def autoprops_imp_no_none(sbox):
"import: config=no, commandline=none"
autoprops_test(sbox, 'import', 0, 0, '')
#----------------------------------------------------------------------
def autoprops_imp_yes_none(sbox):
"import: config=yes, commandline=none"
autoprops_test(sbox, 'import', 1, 0, '')
#----------------------------------------------------------------------
def autoprops_imp_no_yes(sbox):
"import: config=no, commandline=yes"
autoprops_test(sbox, 'import', 0, 1, '')
#----------------------------------------------------------------------
def autoprops_imp_yes_yes(sbox):
"import: config=yes, commandline=yes"
autoprops_test(sbox, 'import', 1, 1, '')
#----------------------------------------------------------------------
def autoprops_imp_no_no(sbox):
"import: config=no, commandline=no"
autoprops_test(sbox, 'import', 0, -1, '')
#----------------------------------------------------------------------
def autoprops_imp_yes_no(sbox):
"import: config=yes, commandline=no"
autoprops_test(sbox, 'import', 1, -1, '')
#----------------------------------------------------------------------
def autoprops_add_dir(sbox):
"add directory"
autoprops_test(sbox, 'add', 1, 0, 'autodir')
#----------------------------------------------------------------------
def autoprops_imp_dir(sbox):
"import directory"
autoprops_test(sbox, 'import', 1, 0, 'autodir')
#----------------------------------------------------------------------
# Issue #2713: adding a file with an svn:eol-style property, svn should abort
# if the file has mixed EOL style. Previously, svn aborted but had added the
# file anyway.
@Issue(2713)
def fail_add_mixed_eol_style(sbox):
"fail to add a file with mixed EOL style"
from svntest.actions import run_and_verify_svn, run_and_verify_unquiet_status
# Bootstrap
sbox.build()
filename = 'mixed-eol.txt'
filepath = os.path.join(sbox.wc_dir, filename)
parameters = ['--auto-props',
'--config-option=config:auto-props:' + filename
+ '=svn:eol-style=native']
svntest.main.file_write(filepath, 'foo\nbar\r\nbaz\r')
expected_stderr = "svn: E200009: File '.*" + filename + \
"' has inconsistent newlines" + \
"|" + "svn: E135000: Inconsistent line ending style\n"
run_and_verify_svn([], expected_stderr,
'add', filepath, *parameters)
expected_status = svntest.wc.State(sbox.wc_dir,
{filename : Item(status='? ')})
run_and_verify_unquiet_status(filepath, expected_status)
#----------------------------------------------------------------------
def create_inherited_autoprops_config(sbox, enable_flag):
"create config stuffs for inherited autoprops tests"
# contents of the file 'config'
config_contents = '''\
[auth]
password-stores =
[miscellany]
enable-auto-props = %s
[auto-props]
*.c = svn:keywords=Author Date Id Rev URL;svn:eol-style=native;
''' % (enable_flag and 'yes' or 'no')
return sbox.create_config_dir(config_contents)
#----------------------------------------------------------------------
def check_inheritable_autoprops(sbox, auto_props_cfg_enabled,
inheritable_auto_props_enabled):
"""Check that the autoprops added or imported by inheritable_autoprops_test
are as expected based on whether auto props are active or
not, as indicated by AUTO_PROPS_CFG_ENABLED and
INHERITABLE_AUTO_PROPS_ENABLED."""
foo_path = sbox.ospath('foo.c')
bar_path = sbox.ospath('B/bar.c')
baf_path = sbox.ospath('C/baf.c')
qux_path = sbox.ospath('D/qux.c')
rip_path = sbox.ospath('D/rip.bat')
snk_path = sbox.ospath('D/H/snk.py')
sir_path = sbox.ospath('D/H/sir.c')
if auto_props_cfg_enabled:
check_proplist(foo_path, {'svn:eol-style':'CRLF',
'svn:keywords':'Author Date Id Rev URL'})
check_proplist(bar_path, {'svn:eol-style':'CR',
'svn:keywords':'Date'})
check_proplist(baf_path, {'svn:eol-style':'LF',
'svn:keywords':'Rev'})
check_proplist(qux_path, {'svn:eol-style':'CRLF',
'svn:keywords':'Author Date Id Rev URL'})
check_proplist(rip_path, {'svn:executable':'*'})
check_proplist(snk_path, {'svn:mime-type':'text/x-python'})
check_proplist(sir_path, {'svn:eol-style':'CRLF',
'svn:keywords':'Author Date Id Rev URL'})
elif inheritable_auto_props_enabled: # Config auto-props disabled,
# but not svn:auto-props.
check_proplist(foo_path, {'svn:eol-style':'CRLF'})
check_proplist(bar_path, {'svn:eol-style':'CR',
'svn:keywords':'Date'})
check_proplist(baf_path, {'svn:eol-style':'LF',
'svn:keywords':'Rev'})
check_proplist(qux_path, {'svn:eol-style':'CRLF'})
check_proplist(rip_path, {'svn:executable':'*'})
check_proplist(snk_path, {'svn:mime-type':'text/x-python'})
check_proplist(sir_path, {'svn:eol-style':'CRLF'})
else: # No autoprops of any kind.
check_proplist(foo_path, {})
check_proplist(bar_path, {})
check_proplist(baf_path, {})
check_proplist(qux_path, {})
check_proplist(rip_path, {})
check_proplist(snk_path, {})
check_proplist(sir_path, {})
#----------------------------------------------------------------------
def inheritable_autoprops_test(sbox, cmd, cfgenable, clienable, subdir,
do_import_or_add=True):
"""configurable autoprops and svn:auto-props test.
CMD is the subcommand to test: 'import' or 'add'
if CFGENABLE is true, enable autoprops in the config file, else disable
if CLIENABLE == 1: --auto-props is added to the command line
0: nothing is added
-1: --no-auto-props is added to command line
if string SUBDIR is not empty files are created in that subdir and the
directory is added/imported
if DO_IMPORT_OR_ADD is false, setup the test, but don't perform
the actual import or add.
Return the directory where the config dir (if any) is located."""
# Bootstrap
sbox.build()
# some directories
wc_dir = sbox.wc_dir
tmp_dir = os.path.abspath(sbox.add_wc_path('iautoprops'))
os.makedirs(tmp_dir)
repos_url = sbox.repo_url
config_dir = create_inherited_autoprops_config(sbox, cfgenable)
# initialize parameters
if cmd == 'import':
parameters = ['import', '-m', 'importing']
files_dir = tmp_dir
else:
parameters = ['add']
files_dir = wc_dir
parameters = parameters + ['--config-dir', config_dir]
# add comandline flags
inheritable_auto_props_enabled = 1
if clienable == 1:
parameters = parameters + ['--auto-props']
auto_props_cfg_enabled = 1
elif clienable == -1:
parameters = parameters + ['--no-auto-props']
auto_props_cfg_enabled = 0
inheritable_auto_props_enabled = 0
else:
auto_props_cfg_enabled = cfgenable
# setup subdirectory if needed
if len(subdir) > 0:
files_dir = os.path.join(files_dir, subdir)
files_wc_dir = os.path.join(wc_dir, subdir)
os.makedirs(files_dir)
else:
files_wc_dir = wc_dir
# Set differing svn:auto-props properties on various
# directories.
sbox.simple_propset(SVN_PROP_INHERITABLE_AUTOPROPS,
'*.c = svn:eol-style=CRLF\n'
'*.bat = svn:executable',
'.')
sbox.simple_propset(SVN_PROP_INHERITABLE_AUTOPROPS,
'*.c = svn:eol-style=CR;svn:keywords=Date',
'A/B')
sbox.simple_propset(SVN_PROP_INHERITABLE_AUTOPROPS,
'*.c = svn:eol-style=LF;svn:keywords=Rev',
'A/C')
sbox.simple_propset(SVN_PROP_INHERITABLE_AUTOPROPS,
'*.py = svn:mime-type=text/x-python',
'A/D')
svntest.actions.run_and_verify_svn(None, [], 'ci', '-m',
'Add some ' + SVN_PROP_INHERITABLE_AUTOPROPS +
' properties', wc_dir)
# Switch the root of the WC to ^/A.
svntest.main.run_svn(None, 'switch', '--ignore-ancestry',
sbox.repo_url + '/A', wc_dir)
# Array of file names to add or import, their WC locations (relative to the
# WC root) if being added, and their repository locations if being imported.
filenames = [['foo.c', 'foo.c', 'A/foo.c'],
['bar.c', os.path.join('B', 'bar.c'), 'A/B/bar.c'],
['baf.c', os.path.join('C', 'baf.c'), 'A/C/baf.c'],
['qux.c', os.path.join('D', 'qux.c'), 'A/D/qux.c'],
['rip.bat', os.path.join('D', 'rip.bat'), 'A/D/rip.bat'],
['snk.py', os.path.join('D', 'H', 'snk.py'), 'A/D/H/snk.py'],
['ric.c', os.path.join('D', 'H', 'sir.c'), 'A/D/H/sir.c']]
for filename in filenames:
if cmd == 'import':
svntest.main.file_write(os.path.join(files_dir, filename[0]),
'foo\nbar\nbaz\n')
else:
svntest.main.file_write(os.path.join(files_dir, filename[1]),
'foo\nbar\nbaz\n')
if do_import_or_add:
if len(subdir) == 0:
# add/import the files
for filename in filenames:
if cmd == 'import':
path = os.path.join(files_dir, filename[0])
tmp_params = parameters + [path, repos_url + '/' + filename[2]]
else:
path = os.path.join(files_dir, filename[1])
tmp_params = parameters + [path]
svntest.main.run_svn(None, *tmp_params)
else:
# add/import subdirectory
if cmd == 'import':
parameters = parameters + [files_dir, repos_url]
else:
parameters = parameters + [files_wc_dir]
svntest.main.run_svn(None, *parameters)
# do an svn co if needed
if cmd == 'import':
svntest.main.run_svn(None, 'checkout', repos_url + '/A', files_wc_dir,
'--config-dir', config_dir)
check_inheritable_autoprops(sbox, auto_props_cfg_enabled,
inheritable_auto_props_enabled)
return config_dir
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_add_no_none(sbox):
"inherit add: config=no, commandline=none"
inheritable_autoprops_test(sbox, 'add', False, 0, '')
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_add_yes_none(sbox):
"inherit add: config=yes, commandline=none"
inheritable_autoprops_test(sbox, 'add', True, 0, '')
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_add_no_yes(sbox):
"inherit add: config=no, commandline=yes"
inheritable_autoprops_test(sbox, 'add', 0, 1, '')
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_add_yes_yes(sbox):
"inherit add: config=yes, commandline=yes"
inheritable_autoprops_test(sbox, 'add', 1, 1, '')
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_add_no_no(sbox):
"inherit add: config=no, commandline=no"
inheritable_autoprops_test(sbox, 'add', 0, -1, '')
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_add_yes_no(sbox):
"inherit add: config=yes, commandline=no"
inheritable_autoprops_test(sbox, 'add', 1, -1, '')
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_import_no_none(sbox):
"inherit import: config=no, commandline=none"
inheritable_autoprops_test(sbox, 'import', False, 0, '')
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_imp_yes_none(sbox):
"inherit import: config=yes, commandline=none"
inheritable_autoprops_test(sbox, 'import', 1, 0, '')
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_imp_no_yes(sbox):
"inherit import: config=no, commandline=yes"
inheritable_autoprops_test(sbox, 'import', 0, 1, '')
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_imp_yes_yes(sbox):
"inherit import: config=yes, commandline=yes"
inheritable_autoprops_test(sbox, 'import', 1, 1, '')
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_imp_no_no(sbox):
"inherit import: config=no, commandline=no"
inheritable_autoprops_test(sbox, 'import', 0, -1, '')
#----------------------------------------------------------------------
def svn_prop_inheritable_autoprops_imp_yes_no(sbox):
"inherit import: config=yes, commandline=no"
inheritable_autoprops_test(sbox, 'import', 1, -1, '')
#----------------------------------------------------------------------
# Test svn:auto-props when 'svn add' targets an already versioned
# target.
def svn_prop_inheritable_autoprops_add_versioned_target(sbox):
"svn:auto-props and versioned target"
config_dir = inheritable_autoprops_test(sbox, 'add', 1, 0, '', False)
# Perform the add with the --force flag, and check the status.
### Note: You have to be inside the working copy or else Subversion
### will think you're trying to add the working copy to its parent
### directory, and will (possibly, if the parent directory isn't
### versioned) fail -- see also schedule_tests.py 11 "'svn add'
### should traverse already-versioned dirs"
saved_wd = os.getcwd()
os.chdir(sbox.wc_dir)
svntest.main.run_svn(None, 'add', '.', '--force', '--config-dir',
config_dir)
os.chdir(saved_wd)
check_inheritable_autoprops(sbox, True, True)
# Revert additions and try with --no-auto-props
svntest.main.run_svn(None, 'revert', '-R', sbox.wc_dir)
# When the add above sets svn:executable on D/rip.bat, subversion
# also sets the execute bits on the file (on systems that support
# that). The revert above does not return the file to its original
# permissions, so we do so manually now. Otherwise the follwing
# addition will notice the executable bits and set svn:executable
# again, which is not what we are here to test.
if os.name == 'posix':
os.chmod(os.path.join(sbox.wc_dir, 'D', 'rip.bat'),
svntest.main.S_ALL_READ | stat.S_IWUSR | stat.S_IWGRP)
os.chdir(sbox.wc_dir)
svntest.main.run_svn(None, 'add', '.', '--force', '--no-auto-props',
'--config-dir', config_dir)
os.chdir(saved_wd)
check_inheritable_autoprops(sbox, False, False)
# Create a new config with auto-props disabled.
#
# Then revert the previous additions and add again, only the
# svn:auto-props should be applied.
config_dir = create_inherited_autoprops_config(sbox, False)
svntest.main.run_svn(None, 'revert', '-R', sbox.wc_dir)
os.chdir(sbox.wc_dir)
svntest.main.run_svn(None, 'add', '.', '--force',
'--config-dir', config_dir)
os.chdir(saved_wd)
check_inheritable_autoprops(sbox, False, True)
# Revert a final time and add again with the --auto-props switch.
# Both the config defined and svn:auto-props should be applied.
svntest.main.run_svn(None, 'revert', '-R', sbox.wc_dir)
os.chdir(sbox.wc_dir)
svntest.main.run_svn(None, 'add', '.', '--force', '--auto-props',
'--config-dir', config_dir)
os.chdir(saved_wd)
check_inheritable_autoprops(sbox, True, True)
#----------------------------------------------------------------------
# Can't set svn:auto-props on files.
def svn_prop_inheritable_autoprops_propset_file_target(sbox):
"svn:auto-props can't be set on files"
sbox.build()
svntest.actions.run_and_verify_svn(
None,
".*Cannot set '" + SVN_PROP_INHERITABLE_AUTOPROPS + "' on a file.*",
'ps', SVN_PROP_INHERITABLE_AUTOPROPS, '*.c=svn:eol-style=native',
sbox.ospath('iota'))
#----------------------------------------------------------------------
# Multiple unversioned subtrees under a versioned target shouldn't segfault.
def svn_prop_inheritable_autoprops_unversioned_subtrees_versioned_target(sbox):
"versioned target and unversioned subtrees"
sbox.build()
Z_path = sbox.ospath('A/D/Z')
Y_path = sbox.ospath('A/B/Y')
foo_path = sbox.ospath('A/D/Z/foo.c')
bar_path = sbox.ospath('A/B/Y/bar.c')
# Set svn:auto-props properties on two directories.
svntest.main.run_svn(None, 'ps', SVN_PROP_INHERITABLE_AUTOPROPS,
'*.c=svn:eol-style=CR', sbox.ospath('A/B'))
svntest.main.run_svn(None, 'ps', SVN_PROP_INHERITABLE_AUTOPROPS,
'*.c=svn:eol-style=native', sbox.ospath('A/D'))
sbox.simple_commit(message='Add inheritable autoprops')
# Create two subtrees, each with one new file.
os.mkdir(Z_path)
os.mkdir(Y_path)
svntest.main.file_write(foo_path,
'/* Someday there will be code here. */\n')
svntest.main.file_write(bar_path,
'/* Someday there will be code here. */\n')
# Perform the add with the --force flag, targeting the root of the WC.
### Note: You have to be inside the working copy or else Subversion
### will think you're trying to add the working copy to its parent
### directory, and will (possibly, if the parent directory isn't
### versioned) fail -- see also schedule_tests.py 11 "'svn add'
### should traverse already-versioned dirs"
saved_wd = os.getcwd()
os.chdir(sbox.wc_dir)
# This was causing a segfault at one point.
svntest.main.run_svn(None, 'add', '.', '--force')
os.chdir(saved_wd)
# Check the resulting autoprops.
svntest.actions.run_and_verify_svn('native\n', [],
'pg', 'svn:eol-style', foo_path)
svntest.actions.run_and_verify_svn('CR\n', [],
'pg', 'svn:eol-style', bar_path)
########################################################################
# Run the tests
# list all tests here, starting with None:
test_list = [ None,
autoprops_add_no_none,
autoprops_add_yes_none,
autoprops_add_no_yes,
autoprops_add_yes_yes,
autoprops_add_no_no,
autoprops_add_yes_no,
autoprops_imp_no_none,
autoprops_imp_yes_none,
autoprops_imp_no_yes,
autoprops_imp_yes_yes,
autoprops_imp_no_no,
autoprops_imp_yes_no,
autoprops_add_dir,
autoprops_imp_dir,
fail_add_mixed_eol_style,
svn_prop_inheritable_autoprops_add_no_none,
svn_prop_inheritable_autoprops_add_yes_none,
svn_prop_inheritable_autoprops_add_no_yes,
svn_prop_inheritable_autoprops_add_yes_yes,
svn_prop_inheritable_autoprops_add_no_no,
svn_prop_inheritable_autoprops_add_yes_no,
svn_prop_inheritable_autoprops_import_no_none,
svn_prop_inheritable_autoprops_imp_yes_none,
svn_prop_inheritable_autoprops_imp_no_yes,
svn_prop_inheritable_autoprops_imp_yes_yes,
svn_prop_inheritable_autoprops_imp_no_no,
svn_prop_inheritable_autoprops_imp_yes_no,
svn_prop_inheritable_autoprops_add_versioned_target,
svn_prop_inheritable_autoprops_propset_file_target,
svn_prop_inheritable_autoprops_unversioned_subtrees_versioned_target,
]
if __name__ == '__main__':
svntest.main.run_tests(test_list)
# NOTREACHED
### End of file.