s...@apache.org writes: > Author: stsp > Date: Mon Nov 28 22:34:49 2011 > New Revision: 1207663
> +def patch_target_no_eol_at_eof(sbox): > + "patch target with no eol at eof" > + > + sbox.build() > + wc_dir = sbox.wc_dir > + > + patch_file_path = make_patch_path(sbox) > + iota_path = os.path.join(wc_dir, 'iota') > + > + iota_contents = [ > + "This is the file iota." > + ] > + > + svntest.main.file_write(iota_path, ''.join(iota_contents)) > + expected_output = svntest.wc.State(wc_dir, { > + 'iota' : Item(verb='Sending'), > + }) > + expected_status = svntest.actions.get_virginal_state(wc_dir, 1) > + expected_status.tweak('iota', wc_rev=2) > + svntest.actions.run_and_verify_commit(wc_dir, expected_output, > + expected_status, None, wc_dir) > + unidiff_patch = [ > + "--- iota\t(revision 1)\n", > + "+++ iota\t(working copy)\n", > + "@@ -1,7 +1,7 @@\n", > + "-This is the file iota.\n" > + "\\ No newline at end of file\n", > + "+It is the file 'iota'.\n", > + "\\ No newline at end of file\n", > + ] > + > + svntest.main.file_write(patch_file_path, ''.join(unidiff_patch)) > + > + iota_contents = [ > + "It is the file 'iota'." > + ] > + expected_output = [ > + 'U %s\n' % os.path.join(wc_dir, 'iota'), > + ] > + > + expected_disk = svntest.main.greek_state.copy() > + expected_disk.tweak('iota', contents=''.join(iota_contents)) > + > + expected_status = svntest.actions.get_virginal_state(wc_dir, 1) > + expected_status.tweak('iota', status='M ', wc_rev=2) > + > + expected_skip = wc.State('', { }) > + > + svntest.actions.run_and_verify_patch(wc_dir, > os.path.abspath(patch_file_path), > + expected_output, > + expected_disk, > + expected_status, > + expected_skip, > + None, # expected err > + 1, # check-props > + 1) # dry-run This test failed on the buildbot: 'iota' not showing status 'M'. I believe this is because there is no sleep between the commit allowing the patching to be fast enough that the file's timestamp doesn't change and the file shows as unmodified. I can demonstrate that it is a timestamp problem using: Index: subversion/tests/cmdline/patch_tests.py =================================================================== --- subversion/tests/cmdline/patch_tests.py (revision 1207719) +++ subversion/tests/cmdline/patch_tests.py (working copy) @@ -34,6 +34,7 @@ import textwrap import zlib import posixpath +import time # Our testing module import svntest @@ -4036,6 +4037,10 @@ expected_skip = wc.State('', { }) + svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r', '1', wc_dir) + svntest.actions.run_and_verify_svn(None, None, [], 'up', sbox.ospath('iota')) + time.sleep(0.1) + svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path), expected_output, expected_disk, We need to sleep whenever a test relies on timestamp changes and in this test there are two places: between the initial checkout and the file_write, and between the commit and the patch. Looking at the rest of the file I don't see do_sleep_for_timestamps or explicit sleeps in any of the tests. I suspect some of the others are vulnerable to similar races. -- Philip