You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by vm...@apache.org on 2012/12/23 07:44:13 UTC
svn commit: r1425423 [6/6] - in /subversion/branches/javahl-ra: ./ build/
build/ac-macros/ build/generator/ build/generator/templates/
contrib/client-side/emacs/ contrib/client-side/svn-push/
contrib/client-side/svnmerge/ contrib/hook-scripts/enforcer/...
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)