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)


Reply via email to