📄 prop_tests.py
字号:
svntest.actions.run_and_verify_svn("Error in property commit", None, [], 'ci', '-m', 'logmsg', wc_dir) # Schedule both files for deletion svntest.main.run_svn(None, 'rm', iota_path, lambda_path) # Now recreate the files, and schedule them for addition. # Poof, the 'new' files don't have any properties at birth. svntest.main.file_append (iota_path, 'iota TNG') svntest.main.file_append (lambda_path, 'lambda TNG') svntest.main.run_svn(None, 'add', iota_path, lambda_path) # Sanity check: the two files should be scheduled for (R)eplacement. expected_status = svntest.actions.get_virginal_state(wc_dir, 1) expected_status.tweak('iota', wc_rev=2, status='R ') expected_status.tweak('A/B/lambda', wc_rev=2, status='R ') svntest.actions.run_and_verify_status(wc_dir, expected_status) # Now add a property to lambda. Iota still doesn't have any. svntest.main.run_svn(None, 'propset', 'capacitor', 'flux', lambda_path) # Commit, with careful output checking. We're actually going to # scan the working copy for props after the commit. expected_output = svntest.wc.State(wc_dir, { 'iota' : Item(verb='Replacing'), 'A/B/lambda' : Item(verb='Replacing'), }) # Expected status tree: lambda has one prop, iota doesn't. expected_status = svntest.actions.get_virginal_state(wc_dir, 1) expected_status.tweak('iota', wc_rev=3) expected_status.tweak('A/B/lambda', wc_rev=3, status=' ') svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, wc_dir)#----------------------------------------------------------------------def revert_replacement_props(sbox): "props work when reverting a replacement" # Bootstrap sbox.build() wc_dir = sbox.wc_dir # Add a property to two files iota_path = os.path.join(wc_dir, 'iota') lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda') svntest.main.run_svn(None, 'propset', 'cash-sound', 'cha-ching!', iota_path) svntest.main.run_svn(None, 'propset', 'boson', 'W', lambda_path) # Commit rev 2. (### someday use run_and_verify_commit for better coverage) svntest.actions.run_and_verify_svn("Error in property commit", None, [], 'ci', '-m', 'logmsg', wc_dir) # Schedule both files for deletion svntest.main.run_svn(None, 'rm', iota_path, lambda_path) # Now recreate the files, and schedule them for addition. # Poof, the 'new' files don't have any properties at birth. svntest.main.file_append (iota_path, 'iota TNG') svntest.main.file_append (lambda_path, 'lambda TNG') svntest.main.run_svn(None, 'add', iota_path, lambda_path) # Sanity check: the two files should be scheduled for (R)eplacement. expected_status = svntest.actions.get_virginal_state(wc_dir, 1) expected_status.tweak('iota', wc_rev=2, status='R ') expected_status.tweak('A/B/lambda', wc_rev=2, status='R ') svntest.actions.run_and_verify_status(wc_dir, expected_status) # Now add a property to lambda. Iota still doesn't have any. svntest.main.run_svn(None, 'propset', 'capacitor', 'flux', lambda_path) # Now revert both files. svntest.main.run_svn(None, 'revert', iota_path, lambda_path) # Do an update; even though the update is really a no-op, # run_and_verify_update has the nice feature of scanning disk as # well as running status. We want to verify that we truly have a # *pristine* revision 2 tree, with the original rev 2 props, and no # local mods at all. expected_output = svntest.wc.State(wc_dir, { }) expected_status = svntest.actions.get_virginal_state(wc_dir, 2) expected_status.tweak('iota', status=' ') expected_status.tweak('A/B/lambda', status=' ') expected_disk = svntest.main.greek_state.copy() expected_disk.tweak('iota', props={'cash-sound' : 'cha-ching!'}) expected_disk.tweak('A/B/lambda', props={'boson' : 'W'}) # scan disk for props too. svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status, None, None, None, None, None, 1)#----------------------------------------------------------------------def inappropriate_props(sbox): "try to set inappropriate props" # Bootstrap sbox.build() wc_dir = sbox.wc_dir A_path = os.path.join(wc_dir, 'A') E_path = os.path.join(wc_dir, 'A', 'B', 'E') iota_path = os.path.join(wc_dir, 'iota') expected_status = svntest.actions.get_virginal_state(wc_dir, 1) svntest.actions.run_and_verify_status(wc_dir, expected_status) # These should produce an error svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:executable', 'on', A_path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:keywords', 'LastChangedDate', A_path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:eol-style', 'native', A_path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:mime-type', 'image/png', A_path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:ignore', '*.o', iota_path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:externals', 'foo http://host.com/repos', iota_path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:author', 'socrates', iota_path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:log', 'log message', iota_path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:date', 'Tue Jan 19 04:14:07 2038', iota_path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:original-date', 'Thu Jan 1 01:00:00 1970', iota_path) # Status unchanged svntest.actions.run_and_verify_status(wc_dir, expected_status) # Recursive setting of inappropriate dir prop should work on files svntest.actions.run_and_verify_svn(None, None, [], 'propset', '-R', 'svn:executable', 'on', E_path) expected_status.tweak('A/B/E/alpha', 'A/B/E/beta', status=' M') svntest.actions.run_and_verify_status(wc_dir, expected_status)# Issue #920. Don't allow setting of svn:eol-style on binary files or files # with inconsistent eol types. path = os.path.join(wc_dir, 'binary') svntest.main.file_append(path, "binary") svntest.main.run_svn(None, 'add', path) svntest.main.run_svn(None, 'propset', 'svn:mime-type', 'application/octet-stream', path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:eol-style', 'CRLF', path) path = os.path.join(wc_dir, 'multi-eol') svntest.main.file_append(path, "line1\rline2\n") svntest.main.run_svn(None, 'add', path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:eol-style', 'LF', path) path = os.path.join(wc_dir, 'backwards-eol') svntest.main.file_append(path, "line1\n\r") svntest.main.run_svn(None, 'add', path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:eol-style', 'native', path) path = os.path.join(wc_dir, 'incomplete-eol') svntest.main.file_append(path, "line1\r\n\r") svntest.main.run_svn(None, 'add', path) svntest.actions.run_and_verify_svn('Illegal target', None, svntest.SVNAnyOutput, 'propset', 'svn:eol-style', 'CR', path) # Issue #2065. Do allow setting of svn:eol-style on binary files or files # with inconsistent eol types if --force is passed. path = os.path.join(wc_dir, 'binary') svntest.main.file_append(path, "binary") svntest.actions.run_and_verify_svn(None, None, [], 'propset', '--force', 'svn:eol-style', 'CRLF', path) path = os.path.join(wc_dir, 'multi-eol') svntest.actions.run_and_verify_svn(None, None, [], 'propset', '--force', 'svn:eol-style', 'LF', path) path = os.path.join(wc_dir, 'backwards-eol') svntest.actions.run_and_verify_svn(None, None, [], 'propset', '--force', 'svn:eol-style', 'native', path) path = os.path.join(wc_dir, 'incomplete-eol') svntest.actions.run_and_verify_svn(None, None, [], 'propset', '--force', 'svn:eol-style', 'CR', path) #----------------------------------------------------------------------# Issue #976. When copying a file, do not determine svn:executable# and svn:mime-type values as though the file is brand new, instead# use the copied file's property values.def copy_inherits_special_props(sbox): "file copies inherit (not re-derive) special props" # Bootstrap sbox.build() wc_dir = sbox.wc_dir orig_mime_type = 'image/fake_image' # Create two paths new_path1 = os.path.join(wc_dir, 'new_file1.bin') new_path2 = os.path.join(wc_dir, 'new_file2.bin') # Create the first path as a binary file. To have svn treat the # file as binary, have a 0x00 in the file. svntest.main.file_append(new_path1, "binary file\000") svntest.main.run_svn(None, 'add', new_path1) # Add initial svn:mime-type to the file svntest.main.run_svn(None, 'propset', 'svn:mime-type', orig_mime_type, new_path1) # Set the svn:executable property on the file if this is a system # that can handle chmod, in which case svn will turn on the # executable bits on the file. Then remove the executable bits # manually on the file and see the value of svn:executable in the # copied file. if os.name == 'posix': svntest.main.run_svn(None, 'propset', 'svn:executable', 'on', new_path1) os.chmod(new_path1, 0644) # Commit the file svntest.main.run_svn(None, 'ci', '-m', 'create file and set svn:mime-type', wc_dir) # Copy the file svntest.main.run_svn(None, 'cp', new_path1, new_path2) # Check the svn:mime-type actual_stdout, actual_stderr = svntest.main.run_svn(None, 'pg', 'svn:mime-type', new_path2) expected_stdout = [orig_mime_type + '\n'] if actual_stdout != expected_stdout: print "svn pg svn:mime-type output does not match expected." print "Expected standard output: ", expected_stdout, "\n" print "Actual standard output: ", actual_stdout, "\n" raise svntest.actions.SVNUnexpectedOutput # Check the svn:executable value. # The value of the svn:executable property is now always forced to '*' if os.name == 'posix': actual_stdout, actual_stderr = svntest.main.run_svn(None, 'pg', 'svn:executable', new_path2) expected_stdout = ['*\n'] if actual_stdout != expected_stdout: print "svn pg svn:executable output does not match expected." print "Expected standard output: ", expected_stdout, "\n" print "Actual standard output: ", actual_stdout, "\n" raise svntest.actions.SVNUnexpectedOutput#----------------------------------------------------------------------def revprop_change(sbox): "set, get, and delete a revprop change" sbox.build() # Create the revprop-change hook for this test svntest.actions.enable_revprop_changes(svntest.main.current_repo_dir) svntest.actions.run_and_verify_svn(None, None, [], 'propset', '--revprop', '-r', '0', 'cash-sound', 'cha-ching!', sbox.wc_dir) svntest.actions.run_and_verify_svn(None, None, [], 'propget', '--revprop', '-r', '0', 'cash-sound', sbox.wc_dir) svntest.actions.run_and_verify_svn(None, None, [], 'propdel', '--revprop', '-r', '0', 'cash-sound', sbox.wc_dir) actual_stdout, actual_stderr = svntest.main.run_svn(None, 'pg', '--revprop', '-r', '0', 'cash-sound', sbox.wc_dir) # The property should have been deleted. regex = 'cha-ching' for line in actual_stdout: if re.match(regex, line): raise svntest.Failure#----------------------------------------------------------------------def prop_value_conversions(sbox): "some svn: properties should be converted" # Bootstrap sbox.build() wc_dir = sbox.wc_dir A_path = os.path.join(wc_dir, 'A') B_path = os.path.join(wc_dir, 'A', 'B') iota_path = os.path.join(wc_dir, 'iota') lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda') mu_path = os.path.join(wc_dir, 'A', 'mu') # We'll use a file to set the prop values, so that weird characters # in the props don't confuse the shell. propval_path = os.path.join(wc_dir, 'propval.tmp') propval_file = open(propval_path, 'wb') def set_prop(name, value, path, valf=propval_file, valp=propval_path): valf.seek(0) valf.truncate(0) valf.write(value) valf.flush() svntest.main.run_svn(None, 'propset', '-F', valp, name, path) # Leading and trailing whitespace should be stripped set_prop('svn:mime-type', ' text/html\n\n', iota_path) set_prop('svn:mime-type', 'text/html', mu_path) # Leading and trailing whitespace should be stripped set_prop('svn:eol-style', '\nnative\n', iota_path) set_prop('svn:eol-style', 'native', mu_path) # A trailing newline should be added set_prop('svn:ignore', '*.o\nfoo.c', A_path)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -