Modified: subversion/branches/javahl-ra/subversion/tests/cmdline/davautocheck.sh URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/tests/cmdline/davautocheck.sh?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/tests/cmdline/davautocheck.sh (original) +++ subversion/branches/javahl-ra/subversion/tests/cmdline/davautocheck.sh Sun Dec 23 06:44:10 2012 @@ -323,44 +323,48 @@ say "Using directory '$HTTPD_ROOT'..." if [ ${USE_SSL:+set} ]; then say "Setting up SSL" BASE_URL="https://localhost:$HTTPD_PORT" -# A self-signed certifcate for localhost generated via: -# openssl req -new -x509 -nodes -out cert.pem -keyout cert-key.pem +# A self-signed certifcate for localhost that expires after 2039-12-30 +# generated via: +# openssl req -new -x509 -nodes -days 10000 -out cert.pem -keyout cert-key.pem +# This is embedded, rather than generated on-the-fly, to avoid consuming +# system entropy. SSL_CERTIFICATE_FILE="$HTTPD_ROOT/cert.pem" cat > "$SSL_CERTIFICATE_FILE" <<__EOF__ -----BEGIN CERTIFICATE----- -MIICrTCCAhagAwIBAgIJAN/ks6HqqeVKMA0GCSqGSIb3DQEBBQUAMEQxGjAYBgNV -BAoTEUFwYWNoZSBTdWJ2ZXJzaW9uMRIwEAYDVQQLEwl0ZXN0c3VpdGUxEjAQBgNV -BAMTCWxvY2FsaG9zdDAeFw0xMjA2MTIyMTIyNDlaFw0xMjA3MTIyMTIyNDlaMEQx -GjAYBgNVBAoTEUFwYWNoZSBTdWJ2ZXJzaW9uMRIwEAYDVQQLEwl0ZXN0c3VpdGUx -EjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA -pAIkUHZbKgb6n75AZu7YG3skAeFZRVCiu9K/KwLKxDlhDuXhAjrGUOyfwtvj0Ezw -F6J1Ke6NJFNOMw9FKcp9BegUyWHQ0hTxQSbgIGCgZGG74LUO5kdHQBU9bu/3daF+ -TC0e08OO90RLAoNr/CADZOTDDPD1QYFS3Au49GZPtI8CAwEAAaOBpjCBozAdBgNV -HQ4EFgQUKgls7+vC/CGZKNJUczUSo+ZL2wAwdAYDVR0jBG0wa4AUKgls7+vC/CGZ -KNJUczUSo+ZL2wChSKRGMEQxGjAYBgNVBAoTEUFwYWNoZSBTdWJ2ZXJzaW9uMRIw -EAYDVQQLEwl0ZXN0c3VpdGUxEjAQBgNVBAMTCWxvY2FsaG9zdIIJAN/ks6HqqeVK -MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAFMkecdq3XuJaRaC+4G38 -RNzUFR5Mnv/Ue/43J5CEJ5g2RTxro8DnGcYw2Qbv8lCUDBhkQ8L/lwnLe5jd204D -Ad9t+1LXNyrYYncOmoZyzKupbfR0m6qz2Q45tqEztHokVWLnchiBaOL0nnGY0rPM -zyc9CVIgp7ivvAud6ja++CQ= +MIIC7zCCAligAwIBAgIJALP1pLDiJRtuMA0GCSqGSIb3DQEBBQUAMFkxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMjA4MTMxNDA5 +MDRaFw0zOTEyMzAxNDA5MDRaMFkxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21l +LVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEjAQBgNV +BAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA9kBx6trU +WQnFNDrW+dU159zEbSWGts3ScITIMTLE4EclMh50SP2BnJDnetkNO8JhPXOm4KZi +XdJugWAk0NmpawhAk3xVxHh5N8wwyPk3IMx7+Yu+sgcsd0Dj9YK1fIazgTUp/Dsk +VGJvqu+kgNYxPvzWi/OsBLW/ZNp+spTzoAcCAwEAAaOBvjCBuzAdBgNVHQ4EFgQU +f7OIDackB7zzPm10aiQgq9WzRdQwgYsGA1UdIwSBgzCBgIAUf7OIDackB7zzPm10 +aiQgq9WzRdShXaRbMFkxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRl +MSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMTCWxv +Y2FsaG9zdIIJALP1pLDiJRtuMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +gYEAD2rdgeVYCSEeseEfFCTNte//rDsT3coO9SbGOpmlCJ5TfbmXjs2YaQZH7NST +mla3hw2Bf9ppTUw1ZWvOVgD3mpxAbYNBA/4HaxmK4GlS2kZsKiMr0xgcVGjmEIW/ +HS9q+PHwStDKNSyYc1+m+bUmeRGUKLgC4kuBF7JDK8A2WYc= -----END CERTIFICATE----- __EOF__ SSL_CERTIFICATE_KEY_FILE="$HTTPD_ROOT/cert-key.pem" cat > "$SSL_CERTIFICATE_KEY_FILE" <<__EOF__ - -----BEGIN RSA PRIVATE KEY----- -MIICXAIBAAKBgQCkAiRQdlsqBvqfvkBm7tgbeyQB4VlFUKK70r8rAsrEOWEO5eEC -OsZQ7J/C2+PQTPAXonUp7o0kU04zD0Upyn0F6BTJYdDSFPFBJuAgYKBkYbvgtQ7m -R0dAFT1u7/d1oX5MLR7Tw473REsCg2v8IANk5MMM8PVBgVLcC7j0Zk+0jwIDAQAB -AoGAFU0x6kF1FcBSTO0o8DWVW/xicNwT/Cy89igpLCzwqQvKz2SMFP4NQ/V3ypdE -v4k+pdMz5H5XVqB7R6Z0FTl3g1ecfZoxYuMYWgzaaS6nx1xWJUqMTUqHArt9Sl/K -/k6H5cNPC3JxGv7Blz87a3ypi93ZgSOJZDixG0BoRClGegECQQDVLTMqH5pVeBH1 -kfY2O8initMhi1lluM7yREbvZtxm844P11m7V4sOX9XQtBaaW3qLjzIru0TBJCL6 -F1JF7mYlAkEAxPRsJuFtBtWpQvnFzX3uXtaJtKtBIHbyBhmzo4f+ed/JU4Kzu1Pk -CMnKgglg8rzU8/0HIU0AiaV2ItlQwb6PowJATZkWds7qLxJ19x4ascMxV0uBb0R6 -Vjzfl/CioaKfuBoQLFQHpdpIFANuoXnsgGOsSADoEmMos+WjlcXHfQ06wQJBAJTe -79Tftephm+QtKc9urbvvy/zNKZghcEUeLkOgqsByYBoIhFRHT+k4piJudmJkS071 -ZetM6eghMk+bFcisgqMCQDD3kQ8gYOS9GbHPuTF4dfFSBx51nvd+hWNna1wi3rl+ -7nYzmrRWOp4ZMUG7i6GwqYHZ9stwJ/xRup5oink5VoQ= +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQD2QHHq2tRZCcU0Otb51TXn3MRtJYa2zdJwhMgxMsTgRyUyHnRI +/YGckOd62Q07wmE9c6bgpmJd0m6BYCTQ2alrCECTfFXEeHk3zDDI+TcgzHv5i76y +Byx3QOP1grV8hrOBNSn8OyRUYm+q76SA1jE+/NaL86wEtb9k2n6ylPOgBwIDAQAB +AoGBAJBzhV+rNl10qcXVrj2noJN+oYsVNE0Pt55hhb22dl7J3TvlOXmHm/xn1CHw +KR8hC0GtEfs+Hv3CbyhdabtJs2L7QxO5VjgLO+onBmAOw1iPF9DjbMcAlFJnoOWI +HYwANOWGp2jRxL5cHUfrBVCgUISen3VUZEnQkr4n/Zty/QEBAkEA/XIZ3oh5MiFA +o4IaFaFQpBc6K/e6fnM0217scaPvfZiYS1k9Fx/UQTAGsxJOnhnsi04WgHPMS5wB +RP4/PiIGIQJBAPi7yIKKS4E8hWBZL+79TI8Zm2uehGCB8V6m9k7e3I82To9Tgcow +qZHsAPtN50fg85I94L3REg2FSQlDlzbMkScCQQC2pweLv/EQNrS94eJomkRirban +vzYxMVfzjRp737iWXGXNT7feNXsjq7f4UAZGnMpDrvg6hLnD999WWKE9ZwnhAkBl +c9p9/EB9zxyrxtT5StGuUIiHJdnirz2vGLTASMB3nXP/m9UFjkGr5jIkTos2Uzel +/50qbxtI7oNyxuHnlRrjAkASfQ51kaBcABYRiacesQi94W/kE3MkgHWkCXNb6//u +gxk/ezALZ8neJzJudzRkX3auGwH1ne9vCM1ED5dkM54H -----END RSA PRIVATE KEY----- __EOF__ SSL_MAKE_VAR="SSL_CERT=$SSL_CERTIFICATE_FILE"
Modified: subversion/branches/javahl-ra/subversion/tests/cmdline/merge_reintegrate_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/tests/cmdline/merge_reintegrate_tests.py?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/tests/cmdline/merge_reintegrate_tests.py (original) +++ subversion/branches/javahl-ra/subversion/tests/cmdline/merge_reintegrate_tests.py Sun Dec 23 06:44:10 2012 @@ -1503,7 +1503,7 @@ def multiple_reintegrates_from_the_same_ # r12 - Do a --record-only merge from 'A' to the feature branch so we # don't try to merge r11 from trunk during the next sync merge. svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir) - svntest.actions.run_and_verify_svn(None, None, [], 'merge', + svntest.actions.run_and_verify_svn(None, None, [], 'merge', '-c11', '--record-only', sbox.repo_url + '/A', Feature_branch_path) Modified: subversion/branches/javahl-ra/subversion/tests/cmdline/merge_symmetric_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/tests/cmdline/merge_symmetric_tests.py?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/tests/cmdline/merge_symmetric_tests.py (original) +++ subversion/branches/javahl-ra/subversion/tests/cmdline/merge_symmetric_tests.py Sun Dec 23 06:44:10 2012 @@ -301,7 +301,7 @@ def symmetric_merge(sbox, source, target exp_out = expected_symmetric_merge_output(target, expect_3ways) exit, out, err = svntest.actions.run_and_verify_svn(None, exp_out, [], - 'merge', '--symmetric', + 'merge', '^/' + source, target, *args) @@ -783,8 +783,10 @@ def subtree_to_and_fro(sbox): # r8 - Do a subtree sync merge from ^/A/D to A_COPY/D. # Note that among other things this changes A_COPY/D/H/psi. svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir) - svntest.actions.run_and_verify_svn(None, None, [], 'merge', '--symmetric', + svntest.actions.run_and_verify_svn(None, None, [], 'merge', sbox.repo_url + '/A/D', A_COPY_D_path) + svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir, + '-m', 'Symmetric subtree merge') # r9 - Make an edit to A/D/H/psi. svntest.main.file_write(psi_path, "Trunk Edit to 'psi'.\n") @@ -798,7 +800,6 @@ def subtree_to_and_fro(sbox): # # C:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\ # working_copies\merge_symmetric_tests-18>svn merge ^^/A_COPY A - # --symmetric # DBG: merge.c:11461: base on source: file:///C:/SVN/src-trunk/Debug/ # subversion/tests/cmdline/svn-test-work/repositories/ # merge_symmetric_tests-18/A@1 @@ -816,17 +817,17 @@ def subtree_to_and_fro(sbox): # Select: (p) postpone, (df) diff-full, (e) edit, # (mc) mine-conflict, (tc) theirs-conflict, # (s) show all options: p - # --- Merging r2 through r8 into 'A': + # --- Merging r2 through r9 into 'A': # C A\D\H\psi # U A\D\gamma - # --- Recording mergeinfo for merge of r2 through r8 into 'A': + # --- Recording mergeinfo for merge of r2 through r9 into 'A': # U A # Summary of conflicts: # Text conflicts: 1 svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir) exit_code, out, err = svntest.actions.run_and_verify_svn( None, [], svntest.verify.AnyOutput, - 'merge', '--symmetric', sbox.repo_url + '/A_COPY', A_path) + 'merge', sbox.repo_url + '/A_COPY', A_path) # The 'old' merge produced a warning that reintegrate could not be used. # Not claiming this is perfect, but it's better(?) than a conflict: @@ -834,7 +835,7 @@ def subtree_to_and_fro(sbox): "in the way expected", err, None, "(svn: E195016: Reintegrate can only be used if " - "revisions 2 through 8 were previously " + "revisions 2 through 9 were previously " "merged from .*/A to the reintegrate source, " "but this is not the case:\n)" "|( A_COPY\n)" @@ -880,7 +881,7 @@ def merge_to_reverse_cherry_subtree_to_m # svn:mergeinfo # /A/B:2-4,6 svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir) - svntest.actions.run_and_verify_svn(None, None, [], 'merge', '--symmetric', + svntest.actions.run_and_verify_svn(None, None, [], 'merge', sbox.repo_url + '/A', A_COPY_path) svntest.actions.run_and_verify_svn(None, None, [], 'merge', '-c-5', sbox.repo_url + '/A/B', @@ -902,11 +903,11 @@ def merge_to_reverse_cherry_subtree_to_m # --- Eliding mergeinfo from 'A_COPY\B': # U A_COPY\B # - # But the --symmetric merge ignores the subtree mergeinfo and considers + # But the merge ignores the subtree mergeinfo and considers # only the mergeinfo on the target itself (and thus is a no-op but for # the mergeinfo change on the root of the merge target): # - # >svn merge ^/A A_COPY --symmetric + # >svn merge ^/A A_COPY # --- Recording mergeinfo for merge of r7 into 'A_COPY': # U A_COPY # @@ -984,7 +985,7 @@ def merge_to_reverse_cherry_subtree_to_m expected_status, expected_skip, None, None, None, None, - None, 1, 0, '--symmetric', A_COPY_path) + None, 1, 0, A_COPY_path) ######################################################################## # Run the tests Modified: subversion/branches/javahl-ra/subversion/tests/cmdline/merge_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/tests/cmdline/merge_tests.py?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/tests/cmdline/merge_tests.py (original) +++ subversion/branches/javahl-ra/subversion/tests/cmdline/merge_tests.py Sun Dec 23 06:44:10 2012 @@ -4501,6 +4501,12 @@ def set_up_branch(sbox, branch_only = Fa r(5 + NBR_OF_BRANCHES) - A/D/H/omega Return (expected_disk, expected_status).''' + # With the default parameters, the branching looks like this: + # + # A -1-----3-4-5-6-- + # \ + # A_COPY 2----------- + wc_dir = sbox.wc_dir expected_status = svntest.actions.get_virginal_state(wc_dir, 1) @@ -6535,7 +6541,7 @@ def avoid_reflected_revs(sbox): bfile2_content = "This is bfile2\n" # We'll consider A as the trunk and A_COPY as the feature branch - # Create a tfile1 in A + # r3 - Create a tfile1 in A svntest.main.file_write(tfile1_path, tfile1_content) svntest.actions.run_and_verify_svn(None, None, [], 'add', tfile1_path) expected_output = wc.State(wc_dir, {'A/tfile1' : Item(verb='Adding')}) @@ -6543,7 +6549,7 @@ def avoid_reflected_revs(sbox): svntest.actions.run_and_verify_commit(wc_dir, expected_output, wc_status, None, wc_dir) - # Create a bfile1 in A_COPY + # r4 - Create a bfile1 in A_COPY svntest.main.file_write(bfile1_path, bfile1_content) svntest.actions.run_and_verify_svn(None, None, [], 'add', bfile1_path) expected_output = wc.State(wc_dir, {'A_COPY/bfile1' : Item(verb='Adding')}) @@ -6551,7 +6557,7 @@ def avoid_reflected_revs(sbox): svntest.actions.run_and_verify_commit(wc_dir, expected_output, wc_status, None, wc_dir) - # Create one more file in A + # r5 - Create one more file in A svntest.main.file_write(tfile2_path, tfile2_content) svntest.actions.run_and_verify_svn(None, None, [], 'add', tfile2_path) expected_output = wc.State(wc_dir, {'A/tfile2' : Item(verb='Adding')}) @@ -6628,7 +6634,6 @@ def avoid_reflected_revs(sbox): None, A_COPY_path, '--allow-mixed-revisions') - # Sync up with the trunk ie., A svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir) expected_output = wc.State(wc_dir, { 'A_COPY' : Item(verb='Sending'), @@ -6669,7 +6674,6 @@ def avoid_reflected_revs(sbox): None, A_COPY_path, '--allow-mixed-revisions') - svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir) expected_output = wc.State(wc_dir, { 'A_COPY' : Item(verb='Sending'), @@ -6678,7 +6682,7 @@ def avoid_reflected_revs(sbox): svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None, wc_dir) - # Add bfile2 to A_COPY + # r8 - Add bfile2 to A_COPY svntest.main.file_write(bfile2_path, bfile2_content) svntest.actions.run_and_verify_svn(None, None, [], 'add', bfile2_path) expected_output = wc.State(wc_dir, {'A_COPY/bfile2' : Item(verb='Adding')}) @@ -6694,7 +6698,6 @@ def avoid_reflected_revs(sbox): # Merge 2:8 from A_COPY(feature branch) to A(trunk). expected_output = wc.State(A_path, { - '' : Item(status='C '), 'bfile2' : Item(status='A '), 'bfile1' : Item(status='A '), }) @@ -6704,7 +6707,7 @@ def avoid_reflected_revs(sbox): expected_elision_output = wc.State(A_path, { }) expected_status = wc.State(A_path, { - '' : Item(status='CM', wc_rev=6), + '' : Item(status=' M', wc_rev=6), 'bfile2' : Item(status='A ', wc_rev='-', copied='+'), 'bfile1' : Item(status='A ', wc_rev='-', copied='+'), 'tfile2' : Item(status=' ', wc_rev=6), @@ -8016,7 +8019,9 @@ def merge_to_sparse_directories(sbox): def merge_old_and_new_revs_from_renamed_dir(sbox): "merge -rold(before rename):head renamed dir" - ## See http://svn.haxx.se/dev/archive-2007-09/0706.shtml ## + # See the email on dev@ from Paul Burba, 2007-09-27, "RE: svn commit: + # r26803 - [...]", <http://svn.haxx.se/dev/archive-2007-09/0706.shtml> or + # <http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=927127>. # Create a WC with a single branch sbox.build() @@ -11057,10 +11062,22 @@ def reverse_merge_away_all_mergeinfo(sbo # merge'. Specifically see # http://subversion.tigris.org/issues/show_bug.cgi?id=3067#desc5 @SkipUnless(server_has_mergeinfo) -@Issues(3138,3067) +@Issues(3138,3067,4217) def dont_merge_revs_into_subtree_that_predate_it(sbox): "dont merge revs into a subtree that predate it" + # +-> merge -c7 A/D/H/nu@7 H_COPY/nu + # | +-> merge -c2 A/D/H H_COPY + # | | +-> merge A/D/H H_COPY + # | | | + # A/D/H A---------------------- + # +-psi +-M-------------M------ + # +-nu A-D C---M-D + # H_COPY C---------G-G + # +-psi +---------+-. + # +-nu +-------G---. + # 1 2 3 4 5 6 7 8 9 w w w + # Create our good 'ole greek tree. sbox.build() wc_dir = sbox.wc_dir @@ -11175,13 +11192,12 @@ def dont_merge_revs_into_subtree_that_pr H_COPY_path) # H_COPY needs r6-9 applied while H_COPY/nu needs only 6,8-9. - # This means r6 will be done as a separate editor drive targeted - # on H_COPY. But r6 was only the copy of A/D/H to H_COPY and - # so is a no-op and there will no notification for r6. svntest.actions.run_and_verify_svn( None, expected_merge_output( - [[6,9]], ['U ' + os.path.join(H_COPY_path, "psi") + '\n', + [[7,9], # Merge notification + [6,9]], # Mergeinfo notification + ['U ' + os.path.join(H_COPY_path, "psi") + '\n', 'D ' + os.path.join(H_COPY_path, "nu") + '\n', ' U ' + H_COPY_path + '\n',]), [], 'merge', sbox.repo_url + '/A/D/H', H_COPY_path, '--force') Modified: subversion/branches/javahl-ra/subversion/tests/cmdline/prop_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/tests/cmdline/prop_tests.py?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/tests/cmdline/prop_tests.py (original) +++ subversion/branches/javahl-ra/subversion/tests/cmdline/prop_tests.py Sun Dec 23 06:44:10 2012 @@ -2268,7 +2268,7 @@ def propget_redirection(sbox): # Run propget -vR svn:mergeinfo, redirecting the stdout to a file. arglist = [svntest.main.svn_binary, 'propget', SVN_PROP_MERGEINFO, '-vR', - wc_dir] + '--config-dir', svntest.main.default_config_dir, wc_dir] redir_file = open(redirect_file, 'wb') pg_proc = subprocess.Popen(arglist, stdout=redir_file) pg_proc.wait() Modified: subversion/branches/javahl-ra/subversion/tests/cmdline/svnadmin_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/tests/cmdline/svnadmin_tests.py?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/tests/cmdline/svnadmin_tests.py (original) +++ subversion/branches/javahl-ra/subversion/tests/cmdline/svnadmin_tests.py Sun Dec 23 06:44:10 2012 @@ -1821,6 +1821,11 @@ def mergeinfo_race(sbox): raise svntest.Failure("one or both commits failed") +@Issue(4213) +def recover_old(sbox): + "recover --pre-1.4-compatible" + sbox.build(create_wc=False) + svntest.main.run_svnadmin("recover", sbox.repo_dir) ######################################################################## @@ -1858,6 +1863,7 @@ test_list = [ None, hotcopy_incremental_packed, locking, mergeinfo_race, + recover_old, ] if __name__ == '__main__': Modified: subversion/branches/javahl-ra/subversion/tests/libsvn_subr/dirent_uri-test.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/tests/libsvn_subr/dirent_uri-test.c?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/subversion/tests/libsvn_subr/dirent_uri-test.c (original) +++ subversion/branches/javahl-ra/subversion/tests/libsvn_subr/dirent_uri-test.c Sun Dec 23 06:44:10 2012 @@ -1364,6 +1364,9 @@ static const testcase_ancestor_t dirent_ { "foo.", "foo./.bar", ".bar" }, { "X:foo", "X:bar", NULL }, { "../foo", "..", NULL }, + { "/foo/bar/zig", "/foo", NULL }, + { "/foo/bar/zig", "/foo/ba", NULL }, + { "/foo/bar/zig", "/foo/bar/zi", NULL }, #ifdef SVN_USE_DOS_PATHS { "", "C:", NULL }, { "", "C:foo", NULL }, @@ -1384,6 +1387,9 @@ static const testcase_ancestor_t dirent_ { "X:/foo", "X:/", NULL }, { "A:/foo", "A:/foo/bar", "bar" }, { "A:/foo", "A:/foot", NULL }, + { "A:/foo/bar/zig", "A:/foo", NULL }, + { "A:/foo/bar/zig", "A:/foo/ba", NULL }, + { "A:/foo/bar/zig", "A:/foo/bar/zi", NULL }, { "//srv", "//srv/share", NULL }, { "//srv", "//srv/shr/fld", NULL }, { "//srv/shr", "//srv", NULL }, @@ -1393,6 +1399,7 @@ static const testcase_ancestor_t dirent_ { "//srv/s r", "//srv/s r/fld", "fld" }, { "//srv/shr/fld", "//srv/shr", NULL }, { "//srv/shr/fld", "//srv2/shr/fld", NULL }, + { "//srv/shr/fld", "//srv/shr/f", NULL }, { "/", "//srv/share", NULL }, #else /* !SVN_USE_DOS_PATHS */ { "", "C:", "C:" }, @@ -1458,6 +1465,8 @@ static const testcase_ancestor_t uri_anc { "http://", "http://test", NULL }, { "http://server", "http://server/q", "q" }, { "svn://server", "http://server/q", NULL }, + { "http://foo/bar", "http://foo", NULL }, + { "http://foo/bar", "http://foo/ba", NULL }, }; static svn_error_t * Modified: subversion/branches/javahl-ra/tools/dev/gdb-py/svndbg/printers.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/tools/dev/gdb-py/svndbg/printers.py?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/tools/dev/gdb-py/svndbg/printers.py (original) +++ subversion/branches/javahl-ra/tools/dev/gdb-py/svndbg/printers.py Sun Dec 23 06:44:10 2012 @@ -28,38 +28,92 @@ from gdb.printing import RegexpCollectio class TypedefRegexCollectionPrettyPrinter(RegexpCollectionPrettyPrinter): - """Class for implementing a collection of regular-expression based - pretty-printers, matching on the type name at the point of use, such - as (but not necessarily) a 'typedef' name, ignoring 'const' or - 'volatile' qualifiers. - - This is modeled on RegexpCollectionPrettyPrinter, which (in GDB 7.3) - matches on the base type's tag name and can't match a pointer type or - any other type that doesn't have a tag name.""" + """Class for implementing a collection of pretty-printers, matching the + type name to a regular expression. + + A pretty-printer in this collection will be used if the type of the + value to be printed matches the printer's regular expression, or if + the value is a pointer to and/or typedef to a type name that matches + its regular expression. The variations are tried in this order: + + 1. the type name as known to the debugger (could be a 'typedef'); + 2. the type after stripping off any number of layers of 'typedef'; + 3. if it is a pointer, the pointed-to type; + 4. if it is a pointer, the pointed-to type minus some 'typedef's. + + In all cases, ignore 'const' and 'volatile' qualifiers. When + matching the pointed-to type, dereference the value or use 'None' if + the value was a null pointer. + + This class is modeled on RegexpCollectionPrettyPrinter, which (in GDB + 7.3) matches on the base type's tag name and can't match a pointer + type or any other type that doesn't have a tag name. + """ def __init__(self, name): super(TypedefRegexCollectionPrettyPrinter, self).__init__(name) def __call__(self, val): - """Lookup the pretty-printer for the provided value.""" + """Find and return an instantiation of a printer for VAL. + """ + + def lookup_type(type, val): + """Return the first printer whose regular expression matches the + name (tag name for struct/union/enum types) of TYPE, ignoring + any 'const' or 'volatile' qualifiers. + + VAL is a gdb.Value, or may be None to indicate a dereferenced + null pointer. TYPE is the associated gdb.Type. + """ + if type.code in [gdb.TYPE_CODE_STRUCT, gdb.TYPE_CODE_UNION, + gdb.TYPE_CODE_ENUM]: + typename = type.tag + else: + typename = str(type.unqualified()) + for printer in self.subprinters: + if printer.enabled and printer.compiled_re.search(typename): + return printer.gen_printer(val) + + def lookup_type_or_alias(type, val): + """Return the first printer matching TYPE, or else if TYPE is a + typedef then the first printer matching the aliased type. + + VAL is a gdb.Value, or may be None to indicate a dereferenced + null pointer. TYPE is the associated gdb.Type. + """ + # First, look for a printer for the given (but unqualified) type. + printer = lookup_type(type, val) + if printer: + return printer + + # If it's a typedef, look for a printer for the aliased type ... + while type.code == gdb.TYPE_CODE_TYPEDEF: + type = type.target() + printer = lookup_type(type, val) + if printer: + return printer + + # First, look for a printer for the given (but unqualified) type, or + # its aliased type if it's a typedef. + printer = lookup_type_or_alias(val.type, val) + if printer: + return printer - # Get the type name, without 'const' or 'volatile' qualifiers. - typename = str(val.type.unqualified()) - if not typename: - return None - - # Iterate over table of type regexps to find an enabled printer for - # that type. Return an instantiation of the printer if found. - for printer in self.subprinters: - if printer.enabled and printer.compiled_re.search(typename): - return printer.gen_printer(val) + # If it's a pointer, look for a printer for the pointed-to type. + if val.type.code == gdb.TYPE_CODE_PTR: + type = val.type.target() + printer = lookup_type_or_alias( + type, val and val.dereference() or None) + if printer: + return printer - # Cannot find a pretty printer. Return None. + # Cannot find a matching pretty printer in this collection. return None class InferiorFunction: """A class whose instances are callable functions on the inferior - process.""" + process. + """ def __init__(self, function_name): self.function_name = function_name self.func = None @@ -71,7 +125,8 @@ class InferiorFunction: def children_as_map(children_iterator): """Convert an iteration of (key, value) pairs into the form required for - a pretty-printer 'children' method when the display-hint is 'map'.""" + a pretty-printer 'children' method when the display-hint is 'map'. + """ for k, v in children_iterator: yield 'key', k yield 'val', v @@ -97,7 +152,8 @@ def children_of_apr_hash(hash_p, value_t """Iterate over an 'apr_hash_t *' GDB value, in the way required for a pretty-printer 'children' method when the display-hint is 'map'. Cast the value pointers to VALUE_TYPE, or return values as '...' if - VALUE_TYPE is None.""" + VALUE_TYPE is None. + """ hi = apr_hash_first(0, hash_p) while (hi): k = svn__apr_hash_index_key(hi).reinterpret_cast(cstringType) @@ -115,14 +171,15 @@ def children_of_apr_hash(hash_p, value_t class AprHashPrinter: """for 'apr_hash_t' of 'char *' keys and unknown values""" def __init__(self, val): - if val.type.code == gdb.TYPE_CODE_PTR: - self.hash_p = val - else: + if val: self.hash_p = val.address + else: + self.hash_p = val def to_string(self): """Return a string to be displayed before children are displayed, or - return None if we don't want any such.""" + return None if we don't want any such. + """ if not self.hash_p: return 'NULL' return 'hash of ' + str(apr_hash_count(self.hash_p)) + ' items' @@ -135,13 +192,20 @@ class AprHashPrinter: def display_hint(self): return 'map' +def children_of_apr_array(array, value_type): + """Iterate over an 'apr_array_header_t' GDB value, in the way required for + a pretty-printer 'children' method when the display-hint is 'array'. + Cast the values to VALUE_TYPE. + """ + nelts = int(array['nelts']) + elts = array['elts'].reinterpret_cast(value_type.pointer()) + for i in range(nelts): + yield str(i), elts[i] + class AprArrayPrinter: """for 'apr_array_header_t' of unknown elements""" def __init__(self, val): - if val.type.code == gdb.TYPE_CODE_PTR and val: - self.array = val.dereference() - else: - self.array = val + self.array = val def to_string(self): if not self.array: @@ -156,25 +220,27 @@ class AprArrayPrinter: def display_hint(self): return 'array' -def children_of_apr_array(array, value_type): - """Iterate over an 'apr_array_header_t' GDB value, in the way required for - a pretty-printer 'children' method when the display-hint is 'array'. - Cast the value pointers to VALUE_TYPE.""" - nelts = int(array['nelts']) - elts = array['elts'].reinterpret_cast(value_type.pointer()) - for i in range(nelts): - yield str(i), elts[i] - ######################################################################## # Pretty-printing for Subversion libsvn_subr types. -class SvnStringPrinter: +class SvnBooleanPrinter: + """for svn_boolean_t""" def __init__(self, val): - if val.type.code == gdb.TYPE_CODE_PTR and val: - self.val = val.dereference() + self.val = val + + def to_string(self): + if self.val is None: + return '(NULL)' + if self.val: + return 'TRUE' else: - self.val = val + return 'FALSE' + +class SvnStringPrinter: + """for svn_string_t""" + def __init__(self, val): + self.val = val def to_string(self): if not self.val: @@ -185,34 +251,45 @@ class SvnStringPrinter: return data.string(length=len) def display_hint(self): - return 'string' + if self.val: + return 'string' class SvnMergeRangePrinter: + """for svn_merge_range_t""" def __init__(self, val): - if val.type.code == gdb.TYPE_CODE_PTR and val: - self.val = val.dereference() - else: - self.val = val + self.val = val def to_string(self): if not self.val: return 'NULL' r = self.val - rs = str(r['start']) + '-' + str(r['end']) + start = int(r['start']) + end = int(r['end']) + if start >= 0 and start < end: + if start + 1 == end: + rs = str(end) + else: + rs = str(start + 1) + '-' + str(end) + elif end >= 0 and end < start: + if start == end + 1: + rs = '-' + str(start) + else: + rs = str(start) + '-' + str(end + 1) + else: + rs = '(INVALID: s=%d, e=%d)' % (start, end) if not r['inheritable']: - rs += '*' + rs += '*' return rs def display_hint(self): - return 'string' + if self.val: + return 'string' class SvnRangelistPrinter: + """for svn_rangelist_t""" def __init__(self, val): - if val.type.code == gdb.TYPE_CODE_PTR and val: - self.array = val.dereference() - else: - self.array = val + self.array = val self.svn_merge_range_t = gdb.lookup_type('svn_merge_range_t') def to_string(self): @@ -221,21 +298,21 @@ class SvnRangelistPrinter: s = '' for key, val in children_of_apr_array(self.array, - self.svn_merge_range_t.pointer()): + self.svn_merge_range_t.pointer()): if s: - s += ',' + s += ',' s += SvnMergeRangePrinter(val).to_string() return s def display_hint(self): - return 'string' + if self.array: + return 'string' class SvnMergeinfoPrinter: """for svn_mergeinfo_t""" def __init__(self, val): self.hash_p = val - # We don't actually have an svn_rangelist_t in Subversion... - self.svn_rangelist_t = gdb.lookup_type('apr_array_header_t') + self.svn_rangelist_t = gdb.lookup_type('svn_rangelist_t') def to_string(self): if self.hash_p == 0: @@ -245,7 +322,7 @@ class SvnMergeinfoPrinter: for key, val in children_of_apr_hash(self.hash_p, self.svn_rangelist_t.pointer()): if s: - s += '; ' + s += '; ' s += key + ':' + SvnRangelistPrinter(val).to_string() return '{ ' + s + ' }' @@ -263,7 +340,7 @@ class SvnMergeinfoCatalogPrinter: for key, val in children_of_apr_hash(self.hash_p, self.svn_mergeinfo_t): if s: - s += ',\n ' + s += ',\n ' s += "'" + key + "': " + SvnMergeinfoPrinter(val).to_string() return '{ ' + s + ' }' @@ -272,10 +349,14 @@ class SvnMergeinfoCatalogPrinter: # Pretty-printing for Subversion libsvn_client types. class SvnPathrevPrinter: + """for svn_client__pathrev_t""" def __init__(self, val): self.val = val def to_string(self): + if not self.val: + return 'NULL' + rev = int(self.val['rev']) url = self.val['url'].string() repos_root_url = self.val['repos_root_url'].string() @@ -283,86 +364,51 @@ class SvnPathrevPrinter: return "%s@%d" % (relpath, rev) def display_hint(self): - return 'string' + if self.val: + return 'string' ######################################################################## libapr_printer = None -libapr_printer2 = None libsvn_printer = None -libsvn_printer2 = None def build_libsvn_printers(): """Construct the pretty-printer objects.""" - global libapr_printer, libapr_printer2, libsvn_printer, libsvn_printer2 + global libapr_printer, libsvn_printer - # These sub-printers match a struct's (or union)'s tag name, - # after stripping typedefs, references and const/volatile qualifiers. - libapr_printer = RegexpCollectionPrettyPrinter("libapr") + libapr_printer = TypedefRegexCollectionPrettyPrinter("libapr") libapr_printer.add_printer('apr_hash_t', r'^apr_hash_t$', AprHashPrinter) libapr_printer.add_printer('apr_array_header_t', r'^apr_array_header_t$', AprArrayPrinter) - # These sub-printers match a type name at the point of use, - # after stripping const/volatile qualifiers. - # - # TODO: The "apr_foo_t *" entries are in this collection merely because - # the collection above can't match any pointer type (because the - # pointer itself has no tag-name). Ideally we'd improve that - # matching so that for example the 'apr_hash_t *' entry would - # match both - # any typedef that resolves to pointer-to-apr_hash_t - # and - # pointer to any typedef that resolves to apr_hash_t - # for any typedef that doesn't have its own specific pretty-printer - # registered. - libapr_printer2 = TypedefRegexCollectionPrettyPrinter("libapr2") - libapr_printer2.add_printer('apr_hash_t *', r'^apr_hash_t \*$', - AprHashPrinter) - libapr_printer2.add_printer('apr_array_header_t *', r'^apr_array_header_t \*$', - AprArrayPrinter) - - # These sub-printers match a struct's (or union)'s tag name, - # after stripping typedefs, references and const/volatile qualifiers. - libsvn_printer = RegexpCollectionPrettyPrinter("libsvn") + libsvn_printer = TypedefRegexCollectionPrettyPrinter("libsvn") + libsvn_printer.add_printer('svn_boolean_t', r'^svn_boolean_t$', + SvnBooleanPrinter) libsvn_printer.add_printer('svn_string_t', r'^svn_string_t$', SvnStringPrinter) - - # These sub-printers match a type name at the point of use, - # after stripping const/volatile qualifiers. - libsvn_printer2 = TypedefRegexCollectionPrettyPrinter("libsvn2") - libsvn_printer2.add_printer('svn_string_t *', r'^svn_string_t \*$', - SvnStringPrinter) - libsvn_printer2.add_printer('svn_client__pathrev_t', r'^svn_client__pathrev_t$', - SvnPathrevPrinter) - libsvn_printer2.add_printer('svn_merge_range_t', r'^svn_merge_range_t$', - SvnMergeRangePrinter) - libsvn_printer2.add_printer('svn_merge_range_t *', r'^svn_merge_range_t \*$', - SvnMergeRangePrinter) - # If we define an 'svn_rangelist_t' type in Subversion, we'll want these: - #libsvn_printer2.add_printer('svn_rangelist_t', r'^svn_rangelist_t$', - # SvnRangelistPrinter) - #libsvn_printer2.add_printer('svn_rangelist_t *', r'^svn_rangelist_t \*$', - # SvnRangelistPrinter) - libsvn_printer2.add_printer('svn_mergeinfo_t', r'^svn_mergeinfo_t$', - SvnMergeinfoPrinter) - libsvn_printer2.add_printer('svn_mergeinfo_catalog_t', r'^svn_mergeinfo_catalog_t$', - SvnMergeinfoCatalogPrinter) + libsvn_printer.add_printer('svn_client__pathrev_t', r'^svn_client__pathrev_t$', + SvnPathrevPrinter) + libsvn_printer.add_printer('svn_merge_range_t', r'^svn_merge_range_t$', + SvnMergeRangePrinter) + libsvn_printer.add_printer('svn_rangelist_t', r'^svn_rangelist_t$', + SvnRangelistPrinter) + libsvn_printer.add_printer('svn_mergeinfo_t', r'^svn_mergeinfo_t$', + SvnMergeinfoPrinter) + libsvn_printer.add_printer('svn_mergeinfo_catalog_t', r'^svn_mergeinfo_catalog_t$', + SvnMergeinfoCatalogPrinter) def register_libsvn_printers(obj): """Register the pretty-printers for the object file OBJ.""" - global libapr_printer, libapr_printer2, libsvn_printer, libsvn_printer2 + global libapr_printer, libsvn_printer # Printers registered later take precedence. gdb.printing.register_pretty_printer(obj, libapr_printer) - gdb.printing.register_pretty_printer(obj, libapr_printer2) gdb.printing.register_pretty_printer(obj, libsvn_printer) - gdb.printing.register_pretty_printer(obj, libsvn_printer2) # Construct the pretty-printer objects, once, at GDB start-up time when this Modified: subversion/branches/javahl-ra/tools/dev/svnraisetreeconflict/main.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/tools/dev/svnraisetreeconflict/main.c?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/tools/dev/svnraisetreeconflict/main.c (original) +++ subversion/branches/javahl-ra/tools/dev/svnraisetreeconflict/main.c Sun Dec 23 06:44:10 2012 @@ -67,8 +67,8 @@ static svn_error_t * version(apr_pool_t *pool) { - return svn_opt_print_help3(NULL, "svnraisetreeconflict", TRUE, FALSE, NULL, - NULL, NULL, NULL, NULL, NULL, pool); + return svn_opt_print_help4(NULL, "svnraisetreeconflict", TRUE, FALSE, FALSE, + NULL, NULL, NULL, NULL, NULL, NULL, pool); } static void @@ -308,8 +308,8 @@ check_lib_versions(void) { "svn_wc", svn_wc_version }, { NULL, NULL } }; - SVN_VERSION_DEFINE(my_version); + return svn_ver_check_list(&my_version, checklist); } Modified: subversion/branches/javahl-ra/tools/server-side/svn-rep-sharing-stats.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/tools/server-side/svn-rep-sharing-stats.c?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/tools/server-side/svn-rep-sharing-stats.c (original) +++ subversion/branches/javahl-ra/tools/server-side/svn-rep-sharing-stats.c Sun Dec 23 06:44:10 2012 @@ -42,8 +42,8 @@ static svn_error_t * version(apr_pool_t *pool) { - return svn_opt_print_help3(NULL, "svn-rep-sharing-stats", TRUE, FALSE, NULL, - NULL, NULL, NULL, NULL, NULL, pool); + return svn_opt_print_help4(NULL, "svn-rep-sharing-stats", TRUE, FALSE, FALSE, + NULL, NULL, NULL, NULL, NULL, NULL, pool); } static void @@ -91,8 +91,8 @@ check_lib_versions(void) { "svn_fs", svn_fs_version }, { NULL, NULL } }; - SVN_VERSION_DEFINE(my_version); + return svn_error_trace(svn_ver_check_list(&my_version, checklist)); } Modified: subversion/branches/javahl-ra/tools/server-side/svnpubsub/README.txt URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/tools/server-side/svnpubsub/README.txt?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/tools/server-side/svnpubsub/README.txt (original) +++ subversion/branches/javahl-ra/tools/server-side/svnpubsub/README.txt Sun Dec 23 06:44:10 2012 @@ -14,3 +14,36 @@ TODO: - add support for SIGHUP to reread the config and reinitialize working copies - joes will write documentation for svnpubsub as these items become fulfilled - make LOGLEVEL configurable + + +Installation instructions: + +1. Set up an svnpubsub service. + + This directory should be checked out to /usr/local/svnpubsub (or /opt/svnpubsub + on Debian). + + There are init scripts for several OSes in the rc.d/ directory; add them + to your OS boot process in the usual way for your OS. (For example, via + rc.conf(5) or update-rc.d(8).) + +2. Run "commit-hook.py $REPOS $REV" from your post-commit hook. + + (As of 1.7, these are the same ordered arguments the post-commmit hook + itself receives, so you can just symlink commit-hook.py as hooks/post-commit + hook if you don't need any other hooks to run in the server process. (This + isn't as insane as it sounds --- post-commit email hooks could also feed of + svnpubsub, and thus not be run within the committing server thread, but on + any other process or box that listens to the svnpubsub stream!)) + +3. Set up svnpubsub clients. + + (eg svnwcsub.py, svnpubsub/client.py, + 'curl -i http://${hostname}:2069/commits/json') + + +Other notes: + +- svnwcsub.py will create a file called ".revision" in the root of the working + copy it updates. That file will contain + `svn info ./ | sed -ne s/^Revision:.//p`. Modified: subversion/branches/javahl-ra/tools/server-side/svnpubsub/rc.d/svnpubsub.debian URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/tools/server-side/svnpubsub/rc.d/svnpubsub.debian?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/tools/server-side/svnpubsub/rc.d/svnpubsub.debian (original) +++ subversion/branches/javahl-ra/tools/server-side/svnpubsub/rc.d/svnpubsub.debian Sun Dec 23 06:44:10 2012 @@ -19,7 +19,7 @@ svnpubsub_pidfile=${svnpubsub_pidfile-"/ pidfile="${svnpubsub_pidfile}" TWSITD_CMD="/usr/bin/twistd -y /opt/svnpubsub/svnpubsub.tac \ - --logfile=/var/bwlog/svnpubsub/svnpubsub.log \ + --logfile=/var/log/svnpubsub/svnpubsub.log \ --pidfile=${pidfile} \ --uid=${svnpubsub_user} --gid=${svnpubsub_user} \ -r${svnpubsub_reactor}" Modified: subversion/branches/javahl-ra/tools/server-side/svnpubsub/rc.d/svnwcsub.debian URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/tools/server-side/svnpubsub/rc.d/svnwcsub.debian?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/tools/server-side/svnpubsub/rc.d/svnwcsub.debian (original) +++ subversion/branches/javahl-ra/tools/server-side/svnpubsub/rc.d/svnwcsub.debian Sun Dec 23 06:44:10 2012 @@ -16,7 +16,7 @@ svnwcsub_user=${svnwcsub_user-"svnwc"} svnwcsub_group=${svnwcsub_group-"svnwc"} svnwcsub_pidfile=${svnwcsub_pidfile-"/var/run/svnwcsub.pid"} svnwcsub_config=${svnwcsub_config-"/etc/svnwcsub.conf"} -svnwcsub_logfile=${svnwcsub_logfile-"/var/bwlog/svnwcsub/svnwcsub.log"} +svnwcsub_logfile=${svnwcsub_logfile-"/var/log/svnwcsub/svnwcsub.log"} pidfile="${svnwcsub_pidfile}" SVNWCSUB_CMD="/opt/svnpubsub/svnwcsub.py \ Modified: subversion/branches/javahl-ra/tools/server-side/svnpubsub/svnwcsub.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/tools/server-side/svnpubsub/svnwcsub.py?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/tools/server-side/svnpubsub/svnwcsub.py (original) +++ subversion/branches/javahl-ra/tools/server-side/svnpubsub/svnwcsub.py Sun Dec 23 06:44:10 2012 @@ -29,6 +29,7 @@ # See svnwcsub.conf for more information on its contents. # +import errno import subprocess import threading import sys @@ -253,6 +254,15 @@ class BackgroundWorker(threading.Thread) info = svn_info(self.svnbin, self.env, wc.path) logging.info("updated: %s now at r%s", wc.path, info['Revision']) + ### update the .revision file + dotrevision = os.path.join(wc.path, '.revision') + try: + os.unlink(dotrevision) + except IOError, e: + if e.errno != errno.ENOENT: + raise + open(dotrevision, 'w').write(info['Revision']) + def _cleanup(self, wc): "Run a cleanup on the specified working copy." Modified: subversion/branches/javahl-ra/win-tests.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/win-tests.py?rev=1425423&r1=1425422&r2=1425423&view=diff ============================================================================== --- subversion/branches/javahl-ra/win-tests.py (original) +++ subversion/branches/javahl-ra/win-tests.py Sun Dec 23 06:44:10 2012 @@ -81,6 +81,7 @@ def _usage_exit(): print(" --http-short-circuit : Use SVNPathAuthz short_circuit on HTTP server") print(" --disable-http-v2 : Do not advertise support for HTTPv2 on server") print(" --disable-bulk-updates : Disable bulk updates on HTTP server") + print(" --ssl-cert : Path to SSL server certificate to trust.") print(" --javahl : Run the javahl tests instead of the normal tests") print(" --list : print test doc strings only") print(" --milestone-filter=RE : RE is a regular expression pattern that (when") @@ -131,7 +132,8 @@ opts, args = my_getopt(sys.argv[1:], 'hr 'fsfs-packing', 'fsfs-sharding=', 'javahl', 'list', 'enable-sasl', 'bin=', 'parallel', 'config-file=', 'server-minor-version=', 'log-level=', - 'log-to-stdout', 'mode-filter=', 'milestone-filter=']) + 'log-to-stdout', 'mode-filter=', 'milestone-filter=', + 'ssl-cert=']) if len(args) > 1: print('Warning: non-option arguments after the first one will be ignored') @@ -163,6 +165,7 @@ log_to_stdout = None mode_filter=None tests_to_run = [] log_level = None +ssl_cert = None for opt, val in opts: if opt in ('-h', '--help'): @@ -230,6 +233,8 @@ for opt, val in opts: log_to_stdout = 1 elif opt == '--log-level': log_level = val + elif opt == '--ssl-cert': + ssl_cert = val # Calculate the source and test directory names abs_srcdir = os.path.abspath("") @@ -742,7 +747,7 @@ if not test_javahl: fsfs_sharding, fsfs_packing, list_tests, svn_bin, mode_filter, milestone_filter, - set_log_level=log_level) + set_log_level=log_level, ssl_cert=ssl_cert) old_cwd = os.getcwd() try: os.chdir(abs_builddir)
