svndumpfilter_tests.py [plain text]
import os
import sys
import warnings
import svntest
from svntest.verify import SVNExpectedStdout, SVNExpectedStderr
from svnadmin_tests import load_and_verify_dumpstream, test_create
Skip = svntest.testcase.Skip
SkipUnless = svntest.testcase.SkipUnless
XFail = svntest.testcase.XFail
Item = svntest.wc.StateItem
def filter_and_return_output(dump, *varargs):
"""Filter the array of lines passed in 'dump' and return the output"""
if type(dump) is type(""):
dump = [ dump ]
exit_code, output, errput = svntest.main.run_command_stdin(
svntest.main.svndumpfilter_binary, None, 1, dump, *varargs)
return output
def reflect_dropped_renumbered_revs(sbox):
"reflect dropped renumbered revs in svn:mergeinfo"
test_create(sbox)
dumpfile_location = os.path.join(os.path.dirname(sys.argv[0]),
'svndumpfilter_tests_data',
'with_merges.dump')
dumpfile = svntest.main.file_read(dumpfile_location)
filtered_out = filter_and_return_output(dumpfile, "include",
"trunk", "branch1",
"--skip-missing-merge-sources",
"--drop-empty-revs",
"--renumber-revs", "--quiet")
load_and_verify_dumpstream(sbox, [], [], None, filtered_out,
"--ignore-uuid")
svntest.actions.run_and_verify_svn(None,
[sbox.repo_url+"/trunk - /branch1:4-5\n"],
[], 'propget', 'svn:mergeinfo', '-R',
sbox.repo_url + '/trunk')
svntest.actions.run_and_verify_svn(None,
[sbox.repo_url+"/branch1 - /trunk:1-2\n"],
[], 'propget', 'svn:mergeinfo', '-R',
sbox.repo_url + '/branch1')
test_create(sbox)
filtered_out = filter_and_return_output(dumpfile, "exclude",
"branch1",
"--skip-missing-merge-sources",
"--drop-empty-revs",
"--renumber-revs", "--quiet")
load_and_verify_dumpstream(sbox, [], [], None, filtered_out,
"--ignore-uuid")
svntest.actions.run_and_verify_svn(None,
[sbox.repo_url+"/trunk - \n"],
[], 'propget', 'svn:mergeinfo', '-R',
sbox.repo_url + '/trunk')
svntest.actions.run_and_verify_svn(None,
[sbox.repo_url+"/branch2 - /trunk:1-2\n"],
[], 'propget', 'svn:mergeinfo', '-R',
sbox.repo_url + '/branch2')
def svndumpfilter_loses_mergeinfo(sbox):
"svndumpfilter loses mergeinfo"
test_create(sbox)
dumpfile_location = os.path.join(os.path.dirname(sys.argv[0]),
'svndumpfilter_tests_data',
'with_merges.dump')
dumpfile = svntest.main.file_read(dumpfile_location)
filtered_out = filter_and_return_output(dumpfile, "include",
"trunk", "branch1", "--quiet")
load_and_verify_dumpstream(sbox, [], [], None, filtered_out)
svntest.actions.run_and_verify_svn(None,
[sbox.repo_url+"/trunk - /branch1:4-8\n"],
[], 'propget', 'svn:mergeinfo', '-R',
sbox.repo_url + '/trunk')
svntest.actions.run_and_verify_svn(None,
[sbox.repo_url+"/branch1 - /trunk:1-2\n"],
[], 'propget', 'svn:mergeinfo', '-R',
sbox.repo_url + '/branch1')
def dumpfilter_with_targets(sbox):
"svndumpfilter --targets blah"
test_create(sbox)
wc_dir = sbox.wc_dir
dumpfile_location = os.path.join(os.path.dirname(sys.argv[0]),
'svndumpfilter_tests_data',
'greek_tree.dump')
dumpfile = svntest.main.file_read(dumpfile_location)
targets_file = os.tempnam(svntest.main.temp_dir, 'tmp')
targets = open(targets_file, 'w')
targets.write('/A/D/H\n')
targets.write('/A/D/G\n')
targets.close()
filtered_output = filter_and_return_output(dumpfile, 'exclude', '/A/B/E',
'--targets', targets_file,
'--quiet')
os.remove(targets_file)
load_and_verify_dumpstream(sbox, [], [], None, filtered_output,
'--ignore-uuid')
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('A/B/E/alpha')
expected_disk.remove('A/B/E/beta')
expected_disk.remove('A/B/E')
expected_disk.remove('A/D/H/chi')
expected_disk.remove('A/D/H/psi')
expected_disk.remove('A/D/H/omega')
expected_disk.remove('A/D/H')
expected_disk.remove('A/D/G/pi')
expected_disk.remove('A/D/G/rho')
expected_disk.remove('A/D/G/tau')
expected_disk.remove('A/D/G')
expected_output = svntest.wc.State(wc_dir, {
'A' : Item(status='A '),
'A/B' : Item(status='A '),
'A/B/lambda' : Item(status='A '),
'A/B/F' : Item(status='A '),
'A/mu' : Item(status='A '),
'A/C' : Item(status='A '),
'A/D' : Item(status='A '),
'A/D/gamma' : Item(status='A '),
'iota' : Item(status='A '),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.remove('A/B/E/alpha')
expected_status.remove('A/B/E/beta')
expected_status.remove('A/B/E')
expected_status.remove('A/D/H/chi')
expected_status.remove('A/D/H/psi')
expected_status.remove('A/D/H/omega')
expected_status.remove('A/D/H')
expected_status.remove('A/D/G/pi')
expected_status.remove('A/D/G/rho')
expected_status.remove('A/D/G/tau')
expected_status.remove('A/D/G')
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status)
test_list = [ None,
reflect_dropped_renumbered_revs,
svndumpfilter_loses_mergeinfo,
dumpfilter_with_targets,
]
if __name__ == '__main__':
warnings.filterwarnings('ignore', 'tempnam', RuntimeWarning)
svntest.main.run_tests(test_list)