You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2013/07/07 07:06:51 UTC

svn commit: r1500370 [1/5] - in /subversion/branches/javahl-1.8-extensions: ./ build/ac-macros/ subversion/bindings/javahl/ subversion/bindings/javahl/native/ subversion/bindings/javahl/tests/org/apache/subversion/javahl/ subversion/include/private/ su...

Author: brane
Date: Sun Jul  7 05:06:50 2013
New Revision: 1500370

URL: http://svn.apache.org/r1500370
Log:
On the javahl-1.8-extensions branch: Sync JavaHL with trunk up to r1500364.
Sync with branches/1.8.x up to r1500366.

Added:
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/PropertyTable.cpp
      - copied unchanged from r1500364, subversion/trunk/subversion/bindings/javahl/native/PropertyTable.cpp
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/PropertyTable.h
      - copied unchanged from r1500364, subversion/trunk/subversion/bindings/javahl/native/PropertyTable.h
Removed:
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.cpp
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RevpropTable.h
Modified:
    subversion/branches/javahl-1.8-extensions/   (props changed)
    subversion/branches/javahl-1.8-extensions/build/ac-macros/compiler.m4
    subversion/branches/javahl-1.8-extensions/configure.ac   (contents, props changed)
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/   (props changed)
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.cpp
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.h
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.cpp
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.cpp
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.h
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
    subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_client_private.h
    subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_io_private.h
    subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_ra_private.h
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/client.h
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/copy.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/diff.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/log.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/merge.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/mergeinfo.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/ra.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_delta/compat.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_fs_base/bdb/env.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_fs_base/tree.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_fs_fs/fs_fs.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_fs_fs/tree.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra/ra_loader.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra/util.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/blame.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/commit.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/getdate.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/getlocations.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/getlocationsegments.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/getlocks.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/inherited_props.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/log.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/mergeinfo.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/options.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/property.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/ra_serf.h
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/replay.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/serf.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/update.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_serf/util.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_svn/client.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_ra_svn/protocol
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_repos/fs-wrap.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_subr/named_atomic.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_subr/sqlite.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_subr/stream.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_wc/update_editor.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_wc/upgrade.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_wc/wc_db.c
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_wc/wc_db.h
    subversion/branches/javahl-1.8-extensions/subversion/libsvn_wc/wc_db_update_move.c
    subversion/branches/javahl-1.8-extensions/subversion/mod_dav_svn/lock.c
    subversion/branches/javahl-1.8-extensions/subversion/mod_dav_svn/version.c
    subversion/branches/javahl-1.8-extensions/subversion/po/de.po
    subversion/branches/javahl-1.8-extensions/subversion/po/zh_CN.po
    subversion/branches/javahl-1.8-extensions/subversion/svn/cl.h
    subversion/branches/javahl-1.8-extensions/subversion/svn/merge-cmd.c
    subversion/branches/javahl-1.8-extensions/subversion/svn/mergeinfo-cmd.c
    subversion/branches/javahl-1.8-extensions/subversion/svn/svn.c
    subversion/branches/javahl-1.8-extensions/subversion/svn/util.c
    subversion/branches/javahl-1.8-extensions/subversion/svnadmin/svnadmin.c
    subversion/branches/javahl-1.8-extensions/subversion/svnlook/svnlook.c
    subversion/branches/javahl-1.8-extensions/subversion/svnserve/serve.c
    subversion/branches/javahl-1.8-extensions/subversion/tests/svn_test_fs.c
    subversion/branches/javahl-1.8-extensions/tools/server-side/svnpubsub/svnpubsub/server.py

Propchange: subversion/branches/javahl-1.8-extensions/
------------------------------------------------------------------------------
  Merged /subversion/branches/1.8.x:r1494631-1500366
  Merged /subversion/trunk:r1478987,1480080,1481772,1481847,1489339,1490684,1491432,1491707,1492020,1492148,1492264,1493424,1493475,1493703,1493720,1494171,1494223,1494287,1494298,1494318,1494342,1494913,1494967,1495104,1495428,1495432,1495446,1495850,1496110,1496132,1496151,1496938,1496957,1497002,1497318-1497319,1497551,1497804,1498136,1498456,1498550,1498564,1499095-1499096,1499727,1500226

Modified: subversion/branches/javahl-1.8-extensions/build/ac-macros/compiler.m4
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/build/ac-macros/compiler.m4?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/build/ac-macros/compiler.m4 (original)
+++ subversion/branches/javahl-1.8-extensions/build/ac-macros/compiler.m4 Sun Jul  7 05:06:50 2013
@@ -70,6 +70,9 @@ AC_DEFUN([SVN_CC_MODE_SETUP],
   CFLAGS="$CFLAGS_KEEP"
   AC_SUBST(CMODEFLAGS)
   AC_SUBST(CMAINTAINERFLAGS)
+
+  dnl Tell clang to not accept unknown warning flags
+  SVN_CFLAGS_ADD_IFELSE([-Werror=unknown-warning-option])
 ])
 
 
@@ -86,4 +89,7 @@ AC_DEFUN([SVN_CXX_MODE_SETUP],
   CXXFLAGS="$CXXFLAGS_KEEP"
   AC_SUBST(CXXMODEFLAGS)
   AC_SUBST(CXXMAINTAINERFLAGS)
+
+  dnl Tell clang++ to not accept unknown warning flags
+  SVN_CXXFLAGS_ADD_IFELSE([-Werror=unknown-warning-option])
 ])

Modified: subversion/branches/javahl-1.8-extensions/configure.ac
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/configure.ac?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/configure.ac (original)
+++ subversion/branches/javahl-1.8-extensions/configure.ac Sun Jul  7 05:06:50 2013
@@ -1117,6 +1117,13 @@ elif test "$enable_optimization" = "no";
 #   # do nothing
 fi
 
+dnl Dump the current compiler options
+AC_MSG_NOTICE([C compiler flags: $CFLAGS])
+AC_MSG_NOTICE([    user-defined: $CUSERFLAGS])
+AC_MSG_NOTICE([ maintainer-mode: $CMAINTAINERFLAGS])
+AC_MSG_NOTICE([C++ compiler flags: $CXXFLAGS])
+AC_MSG_NOTICE([      user-defined: $CXXUSERFLAGS])
+AC_MSG_NOTICE([   maintainer-mode: $CXXMAINTAINERFLAGS])
 
 AC_ARG_ENABLE(full-version-match,
 AS_HELP_STRING([--disable-full-version-match],

Propchange: subversion/branches/javahl-1.8-extensions/configure.ac
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Sun Jul  7 05:06:50 2013
@@ -0,0 +1,79 @@
+/subversion/branches/1.5.x-r30215/configure.ac:870312
+/subversion/branches/1.7.x-fs-verify/configure.ac:1146708,1161180
+/subversion/branches/1.8.x/configure.ac:1483275-1500366
+/subversion/branches/1.8.x-libsvnjavahl-version/configure.ac:1483910-1485054
+/subversion/branches/1.8.x-r1477876/configure.ac:1477981-1487716
+/subversion/branches/1.8.x-r1481625/configure.ac:1481637-1482135
+/subversion/branches/1.8.x-svn_fs_info-removal/configure.ac:1467420-1468159
+/subversion/branches/10Gb/configure.ac:1388102,1388163-1388190,1388195,1388202,1388205,1388211,1388276,1388362,1388375,1388394,1388636,1388639-1388640,1388643-1388644,1388654,1388720,1388789,1388795,1388801,1388805,1388807,1388810,1388816,1389044,1389276,1389289,1389662,1389867,1390017,1390209,1390216,1390407,1390409,1390414,1390419,1390955
+/subversion/branches/atomic-revprop/configure.ac:965046-1000689
+/subversion/branches/auto-props-sdc/configure.ac:1384106-1401643
+/subversion/branches/bdb-reverse-deltas/configure.ac:872050-872529
+/subversion/branches/diff-callbacks3/configure.ac:870059-870761
+/subversion/branches/diff-optimizations/configure.ac:1031270-1037352
+/subversion/branches/diff-optimizations-bytes/configure.ac:1037353-1067789
+/subversion/branches/dont-save-plaintext-passwords-by-default/configure.ac:870728-871118
+/subversion/branches/double-delete/configure.ac:870511-872970
+/subversion/branches/ev2-export/configure.ac:1325914,1332738,1413107
+/subversion/branches/explore-wc/configure.ac:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997
+/subversion/branches/file-externals/configure.ac:871779-873302
+/subversion/branches/fs-rep-sharing/configure.ac:869036-873803
+/subversion/branches/fsfs-pack/configure.ac:873717-874575
+/subversion/branches/gnome-keyring/configure.ac:870558-871410
+/subversion/branches/gpg-agent-password-store/configure.ac:1005036-1150766
+/subversion/branches/http-protocol-v2/configure.ac:874395-876041
+/subversion/branches/in-memory-cache/configure.ac:869829-871452
+/subversion/branches/in-repo-authz/configure.ac:1414342-1424779
+/subversion/branches/inheritable-props/configure.ac:1297080-1395089
+/subversion/branches/integrate-cache-item-serialization/configure.ac:1068724-1068739
+/subversion/branches/integrate-cache-membuffer/configure.ac:998649-998852
+/subversion/branches/integrate-compression-level/configure.ac:1068651-1072287
+/subversion/branches/integrate-io-improvements/configure.ac:1068684-1072297
+/subversion/branches/integrate-is-cachable/configure.ac:1072568-1074082
+/subversion/branches/integrate-partial-getter/configure.ac:1072558-1076552
+/subversion/branches/integrate-readline-speedup/configure.ac:1072553-1072555
+/subversion/branches/integrate-stream-api-extensions/configure.ac:1068695-1072516
+/subversion/branches/integrate-string-improvements/configure.ac:1068251-1190617
+/subversion/branches/integrate-txdelta-caching/configure.ac:1072541-1078213
+/subversion/branches/issue-2779-dev/configure.ac:965496-984198
+/subversion/branches/issue-2843-dev/configure.ac:871432-874179
+/subversion/branches/issue-3000/configure.ac:871713,871716-871719,871721-871726,871728,871734
+/subversion/branches/issue-3067-deleted-subtrees/configure.ac:873375-874084
+/subversion/branches/issue-3148-dev/configure.ac:875193-875204
+/subversion/branches/issue-3220-dev/configure.ac:872210-872226
+/subversion/branches/issue-3242-dev/configure.ac:879653-896436
+/subversion/branches/issue-3334-dirs/configure.ac:875156-875867
+/subversion/branches/issue-3975/configure.ac:1152931-1160746
+/subversion/branches/issue-4116-dev/configure.ac:1424719-1425040
+/subversion/branches/issue-4194-dev/configure.ac:1410507-1414880
+/subversion/branches/javahl-ra/configure.ac:1342682,1344977
+/subversion/branches/kwallet/configure.ac:870785-871314
+/subversion/branches/log-g-performance/configure.ac:870941-871032
+/subversion/branches/merge-skips-obstructions/configure.ac:874525-874615
+/subversion/branches/multi-layer-moves/configure.ac:1239019-1300930
+/subversion/branches/nfc-nfd-aware-client/configure.ac:870276,870376
+/subversion/branches/node_pool/configure.ac:1304828-1305388
+/subversion/branches/performance/configure.ac:979193,980118,981087,981090,981189,981194,981287,981684,981827,982043,982355,983398,983406,983430,983474,983488,983490,983760,983764,983766,983770,984927,984973,984984,985014,985037,985046,985472,985477,985482,985487-985488,985493,985497,985500,985514,985601,985603,985606,985669,985673,985695,985697,986453,986465,986485,986491-986492,986517,986521,986605,986608,986817,986832,987865,987868-987869,987872,987886-987888,987893,988319,988898,990330,990533,990535-990537,990541,990568,990572,990574-990575,990600,990759,992899,992904,992911,993127,993141,994956,995478,995507,995603,998012,998858,999098,1001413,1001417,1004291,1022668,1022670,1022676,1022715,1022719,1025660,1025672,1027193,1027203,1027206,1027214,1027227,1028077,1028092,1028094,1028104,1028107,1028111,1028354,1029038,1029042-1029043,1029054-1029055,1029062-1029063,1029078,1029080,1029090,1029092-1029093,1029111,1029151,1029158,1029229-1029230,1029232,1029335-1029336,1029339-10293
 40,1029342,1029344,1030763,1030827,1031203,1031235,1032285,1032333,1033040,1033057,1033294,1035869,1035882,1039511,1043705,1053735,1056015,1066452,1067683,1067697-1078365
+/subversion/branches/py-tests-as-modules/configure.ac:956579-1033052
+/subversion/branches/ra_serf-digest-authn/configure.ac:875693-876404
+/subversion/branches/reintegrate-improvements/configure.ac:873853-874164
+/subversion/branches/revprop-cache/configure.ac:1298521-1326293
+/subversion/branches/revprop-packing/configure.ac:1143907,1143971,1143997,1144017,1144499,1144568,1146145
+/subversion/branches/subtree-mergeinfo/configure.ac:876734-878766
+/subversion/branches/svn-mergeinfo-enhancements/configure.ac:870119-870195,870197-870288
+/subversion/branches/svn-patch-improvements/configure.ac:918519-934609
+/subversion/branches/svn_mutex/configure.ac:1141683-1182099
+/subversion/branches/svnpatch-diff/configure.ac:865738-876477
+/subversion/branches/svnraisetc/configure.ac:874709-875149
+/subversion/branches/svnserve-logging/configure.ac:869828-870893
+/subversion/branches/tc-issue-3334/configure.ac:874697-874773
+/subversion/branches/tc-merge-notify/configure.ac:874017-874062
+/subversion/branches/tc-resolve/configure.ac:874191-874239
+/subversion/branches/tc_url_rev/configure.ac:874351-874483
+/subversion/branches/tree-conflicts/configure.ac:868291-873154
+/subversion/branches/tree-conflicts-notify/configure.ac:873926-874008
+/subversion/branches/tweak-build-take-two/configure.ac:1424288-1425049,1425051-1425613
+/subversion/branches/uris-as-urls/configure.ac:1060426-1064427
+/subversion/branches/verify-at-commit/configure.ac:1462039-1462408
+/subversion/branches/wc-collate-path/configure.ac:1407642
+/subversion/trunk/configure.ac:1467440,1467450,1467481,1467587,1467597,1467668,1467675,1467803,1467807,1468151,1468347,1468395,1468439,1468487,1468565-1468566,1469248,1469363,1469478,1469489,1469512-1469513,1469550,1469556,1469645,1469674,1469862,1469866,1469871,1469994,1470031,1470037,1470238,1470246,1470248,1470537,1470738,1470781,1470898,1470904,1470908,1470913,1470936,1470993-1470994,1471028-1471029,1471107,1471153,1471302,1471443,1471490,1471744,1475704,1475724,1475772,1475963,1476092,1476155,1476181,1476193,1476254,1476359,1476366,1476607,1477294,1477359,1477729-1477730,1477876,1477891,1478001,1478220-1478221,1478465,1478897,1478951,1478987,1478998,1479320-1479321,1479323,1479326,1479329,1479540,1479563,1479605,1479896,1480054,1480077,1480080,1480082,1480119,1480149,1480344,1480412,1480442,1480616,1480641-1480642,1480664,1480669,1480723,1480738,1480765,1481010,1481594,1481596,1481625,1481627-1481628,1481631-1481632,1481772,1481800,1481813,1481847-1481848,1481944,1481981,148228
 2,1482327,1482338,1482350,1482354,1482436,1482479,1482524,1482528,1482536,1482554,1482558,1482592,1482724,1482759,1482779,1482829,1482969-1482970,1482973,1483015,1483077,1483101,1483116,1483125,1483391,1483397,1483555,1483557,1483575,1483580,1483781,1483927,1483939,1483947,1483964-1483965,1483968,1483972,1483975,1483977,1483984,1484006,1484016-1484017,1484023,1484755,1485018,1485127,1485350,1485413,1485427,1485447,1485449,1485497,1485501,1485650,1486072,1486457,1486572,1486809,1486915,1486931,1487083,1488183,1488267,1488294,1488425,1488639,1488878,1489114,1489116,1489203,1489339,1489935,1490045,1490326,1490679,1490684,1491432,1491499,1491707,1491770,1492005,1492020,1492145,1492148,1492164,1492264,1492295,1493424,1493475,1493703,1493720,1493951,1494171,1494223,1494287,1494298,1494318,1494342,1494913,1494967,1495104,1495428,1495432,1495446,1495850,1496110,1496132,1496151,1496938,1496957,1497002,1497318-1497319,1497551,1497804,1498136,1498456,1498550,1498564,1498885,1499095-1499096,149
 9727,1500226

Propchange: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/
------------------------------------------------------------------------------
  Merged /subversion/branches/1.8.x/subversion/bindings/javahl:r1494631-1500366
  Merged /subversion/trunk/subversion/bindings/javahl:r1500024-1500364

Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.cpp?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.cpp Sun Jul  7 05:06:50 2013
@@ -30,7 +30,7 @@
 #include "Iterator.h"
 #include "JNIByteArray.h"
 #include "LockTokenTable.h"
-#include "RevpropTable.h"
+#include "PropertyTable.h"
 #include "RemoteSession.h"
 
 #include <apr_tables.h>
@@ -69,7 +69,6 @@ CommitEditor::createInstance(jobject jse
   return editor->getCppAddr();
 }
 
-
 CommitEditor::CommitEditor(RemoteSession* session,
                            jobject jrevprops, jobject jcommit_callback,
                            jobject jlock_tokens, jboolean jkeep_locks)
@@ -90,7 +89,7 @@ CommitEditor::CommitEditor(RemoteSession
                                &m_callback_session_uuid,
                                pool.getPool()),);
 
-  RevpropTable revprops(jrevprops, true);
+  PropertyTable revprops(jrevprops, true);
   if (JNIUtil::isJavaExceptionThrown())
     return;
   LockTokenTable lock_tokens(jlock_tokens);
@@ -105,8 +104,8 @@ CommitEditor::CommitEditor(RemoteSession
                   m_callback.callback, &m_callback,
                   lock_tokens.hash(subPool, true),
                   bool(jkeep_locks),
-                  NULL,               // svn_ra__provide_base_cb_t
-                  NULL,               // svn_ra__provide_props_cb_t
+                  this->provide_base_cb,
+                  this->provide_props_cb,
                   this->get_copysrc_kind_cb, this,
                   pool.getPool(),     // result pool
                   subPool.getPool()), // scratch pool
@@ -265,7 +264,7 @@ void CommitEditor::addDirectory(jstring 
   Iterator children(jchildren);
   if (JNIUtil::isJavaExceptionThrown())
     return;
-  RevpropTable properties(jproperties, true);
+  PropertyTable properties(jproperties, true);
   if (JNIUtil::isJavaExceptionThrown())
     return;
 
@@ -290,7 +289,7 @@ void CommitEditor::addFile(jstring jrelp
   SVN_JNI_ERR(m_session->m_context->checkCancel(m_session->m_context),);
 
   InputStream contents(jcontents);
-  RevpropTable properties(jproperties, true);
+  PropertyTable properties(jproperties, true);
   if (JNIUtil::isJavaExceptionThrown())
     return;
 
@@ -342,7 +341,7 @@ void CommitEditor::alterDirectory(jstrin
   Iterator children(jchildren);
   if (JNIUtil::isJavaExceptionThrown())
     return;
-  RevpropTable properties(jproperties, true);
+  PropertyTable properties(jproperties, true);
   if (JNIUtil::isJavaExceptionThrown())
     return;
 
@@ -366,7 +365,7 @@ void CommitEditor::alterFile(jstring jre
   SVN_JNI_ERR(m_session->m_context->checkCancel(m_session->m_context),);
 
   InputStream contents(jcontents);
-  RevpropTable properties(jproperties, true);
+  PropertyTable properties(jproperties, true);
   if (JNIUtil::isJavaExceptionThrown())
     return;
 
@@ -487,23 +486,20 @@ void CommitEditor::abort()
 }
 
 
-svn_error_t*
-CommitEditor::get_copysrc_kind_cb(svn_node_kind_t* kind, void* baton,
-                                  const char* repos_relpath,
-                                  svn_revnum_t src_revision,
-                                  apr_pool_t *scratch_pool)
+namespace {
+svn_error_t* open_callback_session(svn_ra_session_t*& session,
+                                   const char* url, const char* uuid,
+                                   RemoteSessionContext* context,
+                                   SVN::Pool& sessionPool)
 {
-  CommitEditor* editor = static_cast<CommitEditor*>(baton);
-  if (!editor->m_callback_session)
+  if (!session)
     {
-      const char* corrected_url;
-      SVN_ERR(svn_ra_open4(&editor->m_callback_session, &corrected_url,
-                           editor->m_callback_session_url,
-                           editor->m_callback_session_uuid,
-                           editor->m_session->m_context->getCallbacks(),
-                           editor->m_session->m_context->getCallbackBaton(),
-                           editor->m_session->m_context->getConfigData(),
-                           editor->pool.getPool()));
+      const char* corrected_url = NULL;
+      SVN_ERR(svn_ra_open4(&session, &corrected_url, url, uuid,
+                           context->getCallbacks(),
+                           context->getCallbackBaton(),
+                           context->getConfigData(),
+                           sessionPool.getPool()));
 
       if (corrected_url)
         {
@@ -515,12 +511,79 @@ CommitEditor::get_copysrc_kind_cb(svn_no
               SVN_ERR_RA_ILLEGAL_URL, NULL,
               _("Repository URL changed while session was open.\n"
                 "Expected URL: %s\nApparent URL: %s"),
-              editor->m_callback_session_url, corrected_url);
+              url, corrected_url);
         }
     }
+  return SVN_NO_ERROR;
+}
+} // anonymous namespace
+
+
+svn_error_t*
+CommitEditor::provide_base_cb(svn_stream_t **contents,
+                              svn_revnum_t *revision,
+                              void *baton,
+                              const char *repos_relpath,
+                              apr_pool_t *result_pool,
+                              apr_pool_t *scratch_pool)
+{
+  *contents = NULL;
+  *revision = NULL;
+  return SVN_NO_ERROR;
+}
+
+svn_error_t*
+CommitEditor::provide_props_cb(apr_hash_t **props,
+                               svn_revnum_t *revision,
+                               void *baton,
+                               const char *repos_relpath,
+                               apr_pool_t *result_pool,
+                               apr_pool_t *scratch_pool)
+{
+  CommitEditor* editor = static_cast<CommitEditor*>(baton);
+  SVN_ERR(open_callback_session(editor->m_callback_session,
+                                editor->m_callback_session_url,
+                                editor->m_callback_session_uuid,
+                                editor->m_session->m_context,
+                                editor->pool));
+
+  svn_node_kind_t kind = svn_node_unknown;
+  SVN_ERR(svn_ra_check_path(editor->m_callback_session,
+                            repos_relpath, SVN_INVALID_REVNUM, &kind,
+                            scratch_pool));
+
+  // FIXME: Getting properties from the youngest revision is in fact
+  // not such a bright idea, as the path may have been moved or
+  // deleted in the path.
+  if (kind == svn_node_file)
+    return svn_ra_get_file(editor->m_callback_session,
+                           repos_relpath, SVN_INVALID_REVNUM,
+                           NULL, revision, props, scratch_pool);
+  else if (kind == svn_node_dir)
+    return svn_ra_get_dir2(editor->m_callback_session, NULL, revision, props,
+                           repos_relpath, SVN_INVALID_REVNUM, 0, scratch_pool);
+  else
+    return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
+                             _("Expected node kind '%s' or '%s' but got '%s'"),
+                             svn_node_kind_to_word(svn_node_file),
+                             svn_node_kind_to_word(svn_node_dir),
+                             svn_node_kind_to_word(kind));
+}
+
+svn_error_t*
+CommitEditor::get_copysrc_kind_cb(svn_node_kind_t* kind, void* baton,
+                                  const char* repos_relpath,
+                                  svn_revnum_t src_revision,
+                                  apr_pool_t *scratch_pool)
+{
+  CommitEditor* editor = static_cast<CommitEditor*>(baton);
+  SVN_ERR(open_callback_session(editor->m_callback_session,
+                                editor->m_callback_session_url,
+                                editor->m_callback_session_uuid,
+                                editor->m_session->m_context,
+                                editor->pool));
 
-  SVN::Pool subPool(editor->pool);
   return svn_ra_check_path(editor->m_callback_session,
                            repos_relpath, src_revision, kind,
-                           subPool.getPool());
+                           scratch_pool);
 }

Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.h?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.h Sun Jul  7 05:06:50 2013
@@ -90,7 +90,19 @@ private:
                jobject jrevprops, jobject jcommit_callback,
                jobject jlock_tokens, jboolean jkeep_locks);
 
-  // This is our svn_ra__get_copysrc_kind_cb_t for the commit editor.
+  // This is our private callbacks for the commit editor.
+  static svn_error_t* provide_base_cb(svn_stream_t **contents,
+                                      svn_revnum_t *revision,
+                                      void *baton,
+                                      const char *repos_relpath,
+                                      apr_pool_t *result_pool,
+                                      apr_pool_t *scratch_pool);
+  static svn_error_t* provide_props_cb(apr_hash_t **props,
+                                       svn_revnum_t *revision,
+                                       void *baton,
+                                       const char *repos_relpath,
+                                       apr_pool_t *result_pool,
+                                       apr_pool_t *scratch_pool);
   static svn_error_t* get_copysrc_kind_cb(svn_node_kind_t* kind, void* baton,
                                           const char* repos_relpath,
                                           svn_revnum_t src_revision,

Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp Sun Jul  7 05:06:50 2013
@@ -908,11 +908,9 @@ JNIUtil::getDate(jobject jdate)
  */
 jbyteArray JNIUtil::makeJByteArray(const void *data, int length)
 {
-  if (data == NULL)
-    {
-      // a NULL will create no Java array
-      return NULL;
-    }
+  // a NULL will create no Java array
+  if (!data)
+    return NULL;
 
   JNIEnv *env = getEnv();
 
@@ -943,6 +941,10 @@ jbyteArray JNIUtil::makeJByteArray(const
  */
 jbyteArray JNIUtil::makeJByteArray(const svn_string_t *str)
 {
+  // a NULL will create no Java array
+  if (!str)
+    return NULL;
+
   return JNIUtil::makeJByteArray(str->data, static_cast<int>(str->len));
 }
 

Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.cpp?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.cpp Sun Jul  7 05:06:50 2013
@@ -410,14 +410,13 @@ RemoteSession::getRevisionByTimestamp(jl
 }
 
 namespace {
-bool byte_array_to_svn_string(JNIByteArray& ary, svn_string_t& str)
+svn_string_t*
+byte_array_to_svn_string(JNIByteArray& ary, SVN::Pool& scratch_pool)
 {
   if (ary.isNull())
-    return false;
-
-  str.data = reinterpret_cast<const char*>(ary.getBytes());
-  str.len = ary.getLength();
-  return true;
+    return NULL;
+  return svn_string_ncreate(reinterpret_cast<const char*>(ary.getBytes()),
+                            ary.getLength(), scratch_pool.getPool());
 }
 } // anonymous namespace
 
@@ -438,21 +437,17 @@ RemoteSession::changeRevisionProperty(
   if (JNIUtil::isExceptionThrown())
     return;
 
-  svn_string_t str_old_value;
-  svn_string_t* const p_old_value = &str_old_value;
-  svn_string_t* const* pp_old_value = NULL;
-  if (byte_array_to_svn_string(old_value, str_old_value))
-      pp_old_value = &p_old_value;
-
-  svn_string_t str_value;
-  svn_string_t* p_value = NULL;
-  if (byte_array_to_svn_string(value, str_value))
-      p_value = &str_value;
-
   SVN::Pool subPool(pool);
+  svn_string_t* const* p_old_value = NULL;
+  svn_string_t* const str_old_value =
+    byte_array_to_svn_string(old_value, subPool);
+  if (str_old_value)
+    p_old_value = &str_old_value;
+
   SVN_JNI_ERR(svn_ra_change_rev_prop2(m_session,
                                       svn_revnum_t(jrevision),
-                                      name, pp_old_value, p_value,
+                                      name, p_old_value,
+                                      byte_array_to_svn_string(value, subPool),
                                       subPool.getPool()), );
 }
 

Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.cpp?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.cpp Sun Jul  7 05:06:50 2013
@@ -51,7 +51,7 @@
 #include "CommitMessage.h"
 #include "EnumMapper.h"
 #include "StringArray.h"
-#include "RevpropTable.h"
+#include "PropertyTable.h"
 #include "DiffOptions.h"
 #include "CreateJ.h"
 #include "svn_auth.h"
@@ -319,7 +319,7 @@ jlong SVNClient::checkout(const char *mo
 }
 
 void SVNClient::remove(Targets &targets, CommitMessage *message, bool force,
-                       bool keep_local, RevpropTable &revprops,
+                       bool keep_local, PropertyTable &revprops,
                        CommitCallback *callback)
 {
     SVN::Pool subPool(pool);
@@ -419,7 +419,7 @@ jlongArray SVNClient::update(Targets &ta
 
 void SVNClient::commit(Targets &targets, CommitMessage *message,
                        svn_depth_t depth, bool noUnlock, bool keepChangelist,
-                       StringArray &changelists, RevpropTable &revprops,
+                       StringArray &changelists, PropertyTable &revprops,
                        CommitCallback *callback)
 {
     SVN::Pool subPool(pool);
@@ -444,7 +444,7 @@ void SVNClient::commit(Targets &targets,
 void SVNClient::copy(CopySources &copySources, const char *destPath,
                      CommitMessage *message, bool copyAsChild,
                      bool makeParents, bool ignoreExternals,
-                     RevpropTable &revprops, CommitCallback *callback)
+                     PropertyTable &revprops, CommitCallback *callback)
 {
     SVN::Pool subPool(pool);
 
@@ -473,7 +473,7 @@ void SVNClient::copy(CopySources &copySo
 void SVNClient::move(Targets &srcPaths, const char *destPath,
                      CommitMessage *message, bool force, bool moveAsChild,
                      bool makeParents, bool metadataOnly, bool allowMixRev,
-                     RevpropTable &revprops, CommitCallback *callback)
+                     PropertyTable &revprops, CommitCallback *callback)
 {
     SVN::Pool subPool(pool);
 
@@ -498,7 +498,7 @@ void SVNClient::move(Targets &srcPaths, 
 }
 
 void SVNClient::mkdir(Targets &targets, CommitMessage *message,
-                      bool makeParents, RevpropTable &revprops,
+                      bool makeParents, PropertyTable &revprops,
                       CommitCallback *callback)
 {
     SVN::Pool subPool(pool);
@@ -616,7 +616,7 @@ void SVNClient::doImport(const char *pat
                          CommitMessage *message, svn_depth_t depth,
                          bool noIgnore, bool noAutoProps,
                          bool ignoreUnknownNodeTypes,
-                         RevpropTable &revprops,
+                         PropertyTable &revprops,
                          ImportFilterCallback *ifCallback,
                          CommitCallback *commitCallback)
 {
@@ -905,7 +905,7 @@ void SVNClient::propertySetRemote(const 
                                   const char *name,
                                   CommitMessage *message,
                                   JNIByteArray &value, bool force,
-                                  RevpropTable &revprops,
+                                  PropertyTable &revprops,
                                   CommitCallback *callback)
 {
     SVN::Pool subPool(pool);

Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.h?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/SVNClient.h Sun Jul  7 05:06:50 2013
@@ -53,7 +53,7 @@ class PatchCallback;
 class ChangelistCallback;
 class CommitMessage;
 class StringArray;
-class RevpropTable;
+class PropertyTable;
 class DiffOptions;
 #include "svn_types.h"
 #include "svn_client.h"
@@ -87,7 +87,7 @@ class SVNClient :public SVNBase
   void propertySetRemote(const char *path, long base_rev, const char *name,
                          CommitMessage *message,
                          JNIByteArray &value, bool force,
-                         RevpropTable &revprops, CommitCallback *callback);
+                         PropertyTable &revprops, CommitCallback *callback);
   void properties(const char *path, Revision &revision,
                   Revision &pegRevision, svn_depth_t depth,
                   StringArray &changelists, ProplistCallback *callback);
@@ -115,7 +115,7 @@ class SVNClient :public SVNBase
   void doImport(const char *path, const char *url, CommitMessage *message,
                 svn_depth_t depth, bool noIgnore, bool noAutoProps,
                 bool ignoreUnknownNodeTypes,
-                RevpropTable &revprops, ImportFilterCallback *ifCallback,
+                PropertyTable &revprops, ImportFilterCallback *ifCallback,
                 CommitCallback *commitCallback);
   jlong doSwitch(const char *path, const char *url, Revision &revision,
                  Revision &pegRevision, svn_depth_t depth,
@@ -129,18 +129,18 @@ class SVNClient :public SVNBase
                svn_wc_conflict_choice_t choice);
   void cleanup(const char *path);
   void mkdir(Targets &targets, CommitMessage *message, bool makeParents,
-             RevpropTable &revprops, CommitCallback *callback);
+             PropertyTable &revprops, CommitCallback *callback);
   void move(Targets &srcPaths, const char *destPath,
             CommitMessage *message, bool force, bool moveAsChild,
             bool makeParents, bool metadataOnly, bool allowMixRev,
-            RevpropTable &revprops, CommitCallback *callback);
+            PropertyTable &revprops, CommitCallback *callback);
   void copy(CopySources &copySources, const char *destPath,
             CommitMessage *message, bool copyAsChild, bool makeParents,
-            bool ignoreExternals, RevpropTable &revprops,
+            bool ignoreExternals, PropertyTable &revprops,
             CommitCallback *callback);
   void commit(Targets &targets, CommitMessage *message, svn_depth_t depth,
               bool noUnlock, bool keepChangelist,
-              StringArray &changelists, RevpropTable &revprops,
+              StringArray &changelists, PropertyTable &revprops,
               CommitCallback *callback);
   jlongArray update(Targets &targets, Revision &revision, svn_depth_t depth,
                     bool depthIsSticky, bool makeParents, bool ignoreExternals,
@@ -149,7 +149,7 @@ class SVNClient :public SVNBase
            bool no_ignore, bool no_autoprops, bool add_parents);
   void revert(const char *path, svn_depth_t depth, StringArray &changelists);
   void remove(Targets &targets, CommitMessage *message, bool force,
-              bool keep_local, RevpropTable &revprops,
+              bool keep_local, PropertyTable &revprops,
               CommitCallback *callback);
   jlong checkout(const char *moduleName, const char *destPath,
                  Revision &revision, Revision &pegRevsion, svn_depth_t depth,

Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Sun Jul  7 05:06:50 2013
@@ -50,7 +50,7 @@
 #include "ImportFilterCallback.h"
 #include "ChangelistCallback.h"
 #include "StringArray.h"
-#include "RevpropTable.h"
+#include "PropertyTable.h"
 #include "VersionExtended.h"
 #include "DiffOptions.h"
 #include "svn_version.h"
@@ -384,7 +384,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  RevpropTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -498,7 +498,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  RevpropTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -539,7 +539,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  RevpropTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -577,7 +577,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  RevpropTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -610,7 +610,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  RevpropTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -761,7 +761,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  RevpropTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -1012,7 +1012,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  RevpropTable revprops(jrevpropTable);
+  PropertyTable revprops(jrevpropTable);
   if (JNIUtil::isExceptionThrown())
     return;
 

Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Sun Jul  7 05:06:50 2013
@@ -3300,6 +3300,16 @@ public class BasicTests extends SVNTests
         }
     }
 
+    private static class CountingProgressListener implements ProgressCallback
+    {
+        public void onProgress(ProgressEvent event)
+        {
+            // TODO: Examine the byte counts from "event".
+            gotProgress = true;
+        }
+        public boolean gotProgress = false;
+    }
+
     public void testDataTransferProgressReport() throws Throwable
     {
         // ### FIXME: This isn't working over ra_local, because
@@ -3309,25 +3319,13 @@ public class BasicTests extends SVNTests
 
         // build the test setup
         OneTest thisTest = new OneTest();
-        ProgressCallback listener = new ProgressCallback()
-        {
-            public void onProgress(ProgressEvent event)
-            {
-                // TODO: Examine the byte counts from "event".
-                throw new RuntimeException("Progress reported as expected");
-            }
-        };
+        CountingProgressListener listener = new CountingProgressListener();
         client.setProgressCallback(listener);
 
         // Perform an update to exercise the progress notification.
-        try
-        {
-            update(thisTest);
+        update(thisTest);
+        if (!listener.gotProgress)
             fail("No progress reported");
-        }
-        catch (RuntimeException progressReported)
-        {
-        }
     }
 
     /**

Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java Sun Jul  7 05:06:50 2013
@@ -29,6 +29,7 @@ import org.apache.subversion.javahl.type
 
 import java.util.Arrays;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Set;
@@ -308,8 +309,20 @@ public class SVNRemoteTests extends SVNT
         }
         catch (ClientException ex)
         {
-            assertEquals("Disabled repository feature",
-                         ex.getAllMessages().get(0).getMessage());
+            ClientException.ErrorMessage error = null;
+            for (ClientException.ErrorMessage m : ex.getAllMessages())
+                if (!m.isGeneric()) {
+                    error = m;
+                    break;
+                }
+
+            if (error == null)
+                fail("Failed with no error message");
+
+            if (error.getCode() != 175002 && // SVN_ERR_RA_DAV_REQUEST_FAILED
+                error.getCode() != 165006)   // SVN_ERR_REPOS_DISABLED_FEATURE
+                fail(error.getMessage());
+
             return;
         }
 
@@ -351,8 +364,11 @@ public class SVNRemoteTests extends SVNT
         assertEquals(fetched_rev, 1);
         assertEquals(contents.toString("UTF-8"),
                      "This is the file 'lambda'.");
-        for (Map.Entry<String, byte[]> e : properties.entrySet())
-            assertTrue(e.getKey().startsWith("svn:entry:"));
+        for (Map.Entry<String, byte[]> e : properties.entrySet()) {
+            final String key = e.getKey();
+            assertTrue(key.startsWith("svn:entry:")
+                       || key.startsWith("svn:wc:"));
+        }
     }
 
     public void testGetDirectory() throws Exception
@@ -373,8 +389,11 @@ public class SVNRemoteTests extends SVNT
         assertEquals(dirents.get("E").getPath(), "E");
         assertEquals(dirents.get("F").getPath(), "F");
         assertEquals(dirents.get("lambda").getPath(), "lambda");
-        for (Map.Entry<String, byte[]> e : properties.entrySet())
-            assertTrue(e.getKey().startsWith("svn:entry:"));
+        for (Map.Entry<String, byte[]> e : properties.entrySet()) {
+            final String key = e.getKey();
+            assertTrue(key.startsWith("svn:entry:")
+                       || key.startsWith("svn:wc:"));
+        }
     }
 
     private final class CommitContext implements CommitCallback
@@ -574,19 +593,19 @@ public class SVNRemoteTests extends SVNT
         assertTrue(Arrays.equals(eolstyle, propval));
     }
 
-    public void testEditorSetFileProps() throws Exception
+    public void testEditorSetFileContents() throws Exception
     {
         Charset UTF8 = Charset.forName("UTF-8");
         ISVNRemote session = getSession();
 
-        byte[] eolstyle = "CRLF".getBytes(UTF8);
-        HashMap<String, byte[]> props = new HashMap<String, byte[]>();
-        props.put("svn:eol-style", eolstyle);
+        byte[] contents = "This is modified file 'alpha'.".getBytes(UTF8);
+        Checksum hash = new Checksum(SHA1(contents), Checksum.Kind.SHA1);
+        ByteArrayInputStream stream = new ByteArrayInputStream(contents);
 
         CommitContext cc =
-            new CommitContext(session, "Change eol-style on A/B/E/alpha");
+            new CommitContext(session, "Change contents of A/B/E/alpha");
         try {
-            cc.editor.alterFile("A/B/E/alpha", 1, null, null, props);
+            cc.editor.alterFile("A/B/E/alpha", 1, hash, stream, null);
             cc.editor.complete();
         } finally {
             cc.editor.dispose();
@@ -594,12 +613,10 @@ public class SVNRemoteTests extends SVNT
 
         assertEquals(2, cc.getRevision());
         assertEquals(2, session.getLatestRevision());
-        byte[] propval = client.propertyGet(session.getSessionUrl()
-                                            + "/A/B/E/alpha",
-                                            "svn:eol-style",
-                                            Revision.HEAD,
-                                            Revision.HEAD);
-        assertTrue(Arrays.equals(eolstyle, propval));
+        ByteArrayOutputStream checkcontents = new ByteArrayOutputStream();
+        client.streamFileContent(session.getSessionUrl() + "/A/B/E/alpha",
+                                 Revision.HEAD, Revision.HEAD, checkcontents);
+        assertTrue(Arrays.equals(contents, checkcontents.toByteArray()));
     }
 
     // public void testEditorRotate() throws Exception
@@ -787,7 +804,7 @@ public class SVNRemoteTests extends SVNT
 
     private static class RemoteStatusReceiver implements RemoteStatus
     {
-        static class StatInfo
+        static class StatInfo implements Comparable<StatInfo>
         {
             public String relpath = null;
             public char kind = ' '; // F, D, L
@@ -813,6 +830,18 @@ public class SVNRemoteTests extends SVNT
                 this.propsChanged = propsChanged;
                 this.info = info;
             }
+
+            @Override
+            public boolean equals(Object statinfo)
+            {
+                final StatInfo that = (StatInfo)statinfo;
+                return this.relpath.equals(that.relpath);
+            }
+
+            public int compareTo(StatInfo that)
+            {
+                return this.relpath.compareTo(that.relpath);
+            }
         }
 
         private boolean debug;
@@ -946,7 +975,11 @@ public class SVNRemoteTests extends SVNT
         } finally {
             rp.dispose();
         }
+
         assertEquals(4, receiver.status.size());
+
+        // ra_serf returns the entries in inverted order compared to ra_local.
+        Collections.sort(receiver.status);
         RemoteStatusReceiver.StatInfo mod = receiver.status.get(3);
         assertEquals("A/D/gamma", mod.relpath);
         assertEquals('F', mod.kind);
@@ -979,6 +1012,9 @@ public class SVNRemoteTests extends SVNT
             rp.dispose();
         }
         assertEquals(3, receiver.status.size());
+
+        // ra_serf returns the entries in inverted order compared to ra_local.
+        Collections.sort(receiver.status);
         RemoteStatusReceiver.StatInfo mod = receiver.status.get(2);
         assertEquals("A/mu", mod.relpath);
         assertEquals(' ', mod.kind);

Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java Sun Jul  7 05:06:50 2013
@@ -324,12 +324,12 @@ class SVNTests extends TestCase
 
         public boolean prompt(String realm, String username)
         {
-            return false;
+            return true;
         }
 
         public boolean prompt(String realm, String username, boolean maySave)
         {
-            return false;
+            return true;
         }
 
         public String askQuestion(String realm, String question,

Modified: subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_client_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_client_private.h?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_client_private.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_client_private.h Sun Jul  7 05:06:50 2013
@@ -291,6 +291,39 @@ svn_client__copy_foreign(const char *url
                          svn_client_ctx_t *ctx,
                          apr_pool_t *scratch_pool);
 
+/* Same as the public svn_client_mergeinfo_log2 API, except for the addition
+ * of the TARGET_MERGEINFO_CATALOG and RESULT_POOL parameters.
+ *
+ * If TARGET_MERGEINFO_CATALOG is NULL then this acts exactly as the public
+ * API.  If *TARGET_MERGEINFO_CATALOG is NULL, then *TARGET_MERGEINFO_CATALOG
+ * is set to the a mergeinfo catalog representing the mergeinfo on
+ * TARGET_PATH_OR_URL@TARGET_PEG_REVISION at DEPTH, (like the public API only
+ * depths of svn_depth_empty or svn_depth_infinity are supported) allocated in
+ * RESULT_POOL.  Finally, if *TARGET_MERGEINFO_CATALOG is non-NULL, then it is
+ * assumed to be a mergeinfo catalog representing the mergeinfo on
+ * TARGET_PATH_OR_URL@TARGET_PEG_REVISION at DEPTH.
+ *
+ * The keys for the subtree mergeinfo are the repository root-relative
+ * paths of TARGET_PATH_OR_URL and/or its subtrees, regardless of whether
+ * TARGET_PATH_OR_URL is a URL or WC path.
+ */
+svn_error_t *
+svn_client__mergeinfo_log(svn_boolean_t finding_merged,
+                          const char *target_path_or_url,
+                          const svn_opt_revision_t *target_peg_revision,
+                          svn_mergeinfo_catalog_t *target_mergeinfo_catalog,
+                          const char *source_path_or_url,
+                          const svn_opt_revision_t *source_peg_revision,
+                          const svn_opt_revision_t *source_start_revision,
+                          const svn_opt_revision_t *source_end_revision,
+                          svn_log_entry_receiver_t log_receiver,
+                          void *log_receiver_baton,
+                          svn_boolean_t discover_changed_paths,
+                          svn_depth_t depth,
+                          const apr_array_header_t *revprops,
+                          svn_client_ctx_t *ctx,
+                          apr_pool_t *result_pool,
+                          apr_pool_t *scratch_pool);
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_io_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_io_private.h?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_io_private.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_io_private.h Sun Jul  7 05:06:50 2013
@@ -90,6 +90,11 @@ svn_stream__set_is_buffered(svn_stream_t
 svn_boolean_t
 svn_stream__is_buffered(svn_stream_t *stream);
 
+/** Return the underlying file, if any, associated with the stream, or
+ * NULL if not available.  Accessing the file bypasses the stream.
+ */
+apr_file_t *
+svn_stream__aprfile(svn_stream_t *stream);
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_ra_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_ra_private.h?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_ra_private.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/include/private/svn_ra_private.h Sun Jul  7 05:06:50 2013
@@ -39,15 +39,23 @@
 extern "C" {
 #endif /* __cplusplus */
 
-/* Return an error with code SVN_ERR_UNSUPPORTED_FEATURE, and an error
-   message referencing PATH_OR_URL, if the "server" pointed to by
-   RA_SESSION doesn't support Merge Tracking (e.g. is pre-1.5).
-   Perform temporary allocations in POOL. */
+/* Equivalent to svn_ra__assert_capable_server()
+   for SVN_RA_CAPABILITY_MERGEINFO. */
 svn_error_t *
 svn_ra__assert_mergeinfo_capable_server(svn_ra_session_t *ra_session,
                                         const char *path_or_url,
                                         apr_pool_t *pool);
 
+/* Return an error with code SVN_ERR_UNSUPPORTED_FEATURE, and an error
+   message referencing PATH_OR_URL, if the "server" pointed to by
+   RA_SESSION doesn't support CAPABILITY (an SVN_RA_CAPABILITY_* constant).
+   Perform temporary allocations in POOL. */
+svn_error_t *
+svn_ra__assert_capable_server(svn_ra_session_t *ra_session,
+                              const char *capability,
+                              const char *path_or_url,
+                              apr_pool_t *pool);
+
 
 /*** Operational Locks ***/
 

Modified: subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/client.h?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/client.h (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/client.h Sun Jul  7 05:06:50 2013
@@ -20,7 +20,8 @@
  *    under the License.
  * ====================================================================
  */
-
+
+
 
 #ifndef SVN_LIBSVN_CLIENT_H
 #define SVN_LIBSVN_CLIENT_H
@@ -208,6 +209,9 @@ svn_client__repos_location_segments(apr_
    Use the authentication baton cached in CTX to authenticate against
    the repository.  Use POOL for all allocations.
 
+   See also svn_client__calc_youngest_common_ancestor() to find youngest
+   common ancestor for already fetched history-as-mergeinfo information.
+
    See also svn_client__youngest_common_ancestor().
 */
 svn_error_t *
@@ -219,6 +223,34 @@ svn_client__get_youngest_common_ancestor
                                          apr_pool_t *result_pool,
                                          apr_pool_t *scratch_pool);
 
+/* Find the common ancestor of two locations in a repository using already
+   fetched history-as-mergeinfo information.
+
+   Ancestry is determined by the 'copy-from' relationship and the normal
+   successor relationship.
+
+   Set *ANCESTOR_P to the location of the youngest common ancestor of
+   LOC1 and LOC2.  If the locations have no common ancestor (including if
+   they don't have the same repository root URL), set *ANCESTOR_P to NULL.
+
+   HISTORY1, HAS_REV_ZERO_HISTORY1, HISTORY2, HAS_REV_ZERO_HISTORY2 are
+   history-as-mergeinfo information as returned by
+   svn_client__get_history_as_mergeinfo() for LOC1 and LOC2 respectively.
+
+   See also svn_client__get_youngest_common_ancestor().
+
+*/
+svn_error_t *
+svn_client__calc_youngest_common_ancestor(svn_client__pathrev_t **ancestor_p,
+                                          const svn_client__pathrev_t *loc1,
+                                          apr_hash_t *history1,
+                                          svn_boolean_t has_rev_zero_history1,
+                                          const svn_client__pathrev_t *loc2,
+                                          apr_hash_t *history2,
+                                          svn_boolean_t has_rev_zero_history2,
+                                          apr_pool_t *result_pool,
+                                          apr_pool_t *scratch_pool);
+
 /* Ensure that RA_SESSION's session URL matches SESSION_URL,
    reparenting that session if necessary.
    Store the previous session URL in *OLD_SESSION_URL (so that if the
@@ -247,7 +279,8 @@ svn_client__ensure_ra_session_url(const 
                                   apr_pool_t *pool);
 
 /* ---------------------------------------------------------------- */
-
+
+
 /*** RA callbacks ***/
 
 
@@ -329,7 +362,8 @@ svn_client__ra_make_cb_baton(svn_wc_cont
                              apr_pool_t *result_pool);
 
 /* ---------------------------------------------------------------- */
-
+
+
 /*** Add/delete ***/
 
 /* If AUTOPROPS is not null: Then read automatic properties matching PATH
@@ -442,7 +476,8 @@ svn_client__make_local_parents(const cha
                                apr_pool_t *pool);
 
 /* ---------------------------------------------------------------- */
-
+
+
 /*** Checkout, update and switch ***/
 
 /* Update a working copy LOCAL_ABSPATH to REVISION, and (if not NULL) set
@@ -581,7 +616,8 @@ svn_client__switch_internal(svn_revnum_t
                             apr_pool_t *pool);
 
 /* ---------------------------------------------------------------- */
-
+
+
 /*** Inheritable Properties ***/
 
 /* Convert any svn_prop_inherited_item_t elements in INHERITED_PROPS which
@@ -626,7 +662,8 @@ svn_client__get_inheritable_props(apr_ha
                                   apr_pool_t *scratch_pool);
 
 /* ---------------------------------------------------------------- */
-
+
+
 /*** Editor for repository diff ***/
 
 /* Create an editor for a pure repository comparison, i.e. comparing one
@@ -666,7 +703,8 @@ svn_client__get_diff_editor2(const svn_d
                              apr_pool_t *result_pool);
 
 /* ---------------------------------------------------------------- */
-
+
+
 /*** Editor for diff summary ***/
 
 /* Set *CALLBACKS and *CALLBACK_BATON to a set of diff callbacks that will
@@ -689,7 +727,8 @@ svn_client__get_diff_summarize_callbacks
                         apr_pool_t *pool);
 
 /* ---------------------------------------------------------------- */
-
+
+
 /*** Copy Stuff ***/
 
 /* This structure is used to associate a specific copy or move SRC with a
@@ -730,7 +769,8 @@ typedef struct svn_client__copy_pair_t
 } svn_client__copy_pair_t;
 
 /* ---------------------------------------------------------------- */
-
+
+
 /*** Commit Stuff ***/
 
 /* WARNING: This is all new, untested, un-peer-reviewed conceptual
@@ -944,7 +984,8 @@ svn_client__do_commit(const char *base_u
                       apr_pool_t *scratch_pool);
 
 
-
+
+
 /*** Externals (Modules) ***/
 
 /* Handle changes to the svn:externals property described by EXTERNALS_NEW,
@@ -1116,7 +1157,8 @@ svn_client__resolve_conflicts(svn_boolea
                               svn_client_ctx_t *ctx,
                               apr_pool_t *scratch_pool);
 
-
+
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/copy.c?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/copy.c (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/copy.c Sun Jul  7 05:06:50 2013
@@ -385,6 +385,7 @@ static svn_error_t *
 verify_wc_dsts(const apr_array_header_t *copy_pairs,
                svn_boolean_t make_parents,
                svn_boolean_t is_move,
+               svn_boolean_t metadata_only,
                svn_client_ctx_t *ctx,
                apr_pool_t *result_pool,
                apr_pool_t *scratch_pool)
@@ -435,8 +436,11 @@ verify_wc_dsts(const apr_array_header_t 
         }
 
       /* Check that there is no unversioned obstruction */
-      SVN_ERR(svn_io_check_path(pair->dst_abspath_or_url, &dst_kind,
-                                iterpool));
+      if (metadata_only)
+        dst_kind = svn_node_none;
+      else
+        SVN_ERR(svn_io_check_path(pair->dst_abspath_or_url, &dst_kind,
+                                  iterpool));
 
       if (dst_kind != svn_node_none)
         {
@@ -527,6 +531,7 @@ static svn_error_t *
 verify_wc_srcs_and_dsts(const apr_array_header_t *copy_pairs,
                         svn_boolean_t make_parents,
                         svn_boolean_t is_move,
+                        svn_boolean_t metadata_only,
                         svn_client_ctx_t *ctx,
                         apr_pool_t *result_pool,
                         apr_pool_t *scratch_pool)
@@ -557,7 +562,7 @@ verify_wc_srcs_and_dsts(const apr_array_
                                         scratch_pool));
     }
 
-  SVN_ERR(verify_wc_dsts(copy_pairs, make_parents, is_move, ctx,
+  SVN_ERR(verify_wc_dsts(copy_pairs, make_parents, is_move, metadata_only, ctx,
                          result_pool, iterpool));
 
   svn_pool_destroy(iterpool);
@@ -1727,8 +1732,8 @@ repos_to_wc_copy_locked(svn_boolean_t *t
   /* We've already checked for physical obstruction by a working file.
      But there could also be logical obstruction by an entry whose
      working file happens to be missing.*/
-  SVN_ERR(verify_wc_dsts(copy_pairs, FALSE, FALSE, ctx,
-                         scratch_pool, iterpool));
+  SVN_ERR(verify_wc_dsts(copy_pairs, FALSE, FALSE, FALSE /* metadata_only */,
+                         ctx, scratch_pool, iterpool));
 
   /* Decide whether the two repositories are the same or not. */
   {
@@ -2210,7 +2215,7 @@ try_copy(svn_boolean_t *timestamp_sleep,
   if ((! srcs_are_urls) && (! dst_is_url))
     {
       SVN_ERR(verify_wc_srcs_and_dsts(copy_pairs, make_parents, is_move,
-                                      ctx, pool, pool));
+                                      metadata_only, ctx, pool, pool));
 
       /* Copy or move all targets. */
       if (is_move)

Modified: subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/diff.c?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/diff.c (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/diff.c Sun Jul  7 05:06:50 2013
@@ -51,6 +51,7 @@
 #include "private/svn_wc_private.h"
 #include "private/svn_diff_private.h"
 #include "private/svn_subr_private.h"
+#include "private/svn_io_private.h"
 
 #include "svn_private_config.h"
 
@@ -807,14 +808,23 @@ diff_content_changed(svn_boolean_t *wrot
        * ### a non-git compatible diff application.*/
 
       /* We deal in streams, but svn_io_run_diff2() deals in file handles,
-         unfortunately, so we need to make these temporary files, and then
-         copy the contents to our stream. */
-      SVN_ERR(svn_io_open_unique_file3(&outfile, &outfilename, NULL,
-                                       svn_io_file_del_on_pool_cleanup,
-                                       scratch_pool, scratch_pool));
-      SVN_ERR(svn_io_open_unique_file3(&errfile, &errfilename, NULL,
-                                       svn_io_file_del_on_pool_cleanup,
-                                       scratch_pool, scratch_pool));
+         so we may need to make temporary files and then copy the contents
+         to our stream. */
+      outfile = svn_stream__aprfile(outstream);
+      if (outfile)
+        outfilename = NULL;
+      else
+        SVN_ERR(svn_io_open_unique_file3(&outfile, &outfilename, NULL,
+                                         svn_io_file_del_on_pool_cleanup,
+                                         scratch_pool, scratch_pool));
+
+      errfile = svn_stream__aprfile(errstream);
+      if (errfile)
+        errfilename = NULL;
+      else
+        SVN_ERR(svn_io_open_unique_file3(&errfile, &errfilename, NULL,
+                                         svn_io_file_del_on_pool_cleanup,
+                                         scratch_pool, scratch_pool));
 
       SVN_ERR(svn_io_run_diff2(".",
                                diff_cmd_baton->options.for_external.argv,
@@ -824,20 +834,25 @@ diff_content_changed(svn_boolean_t *wrot
                                &exitcode, outfile, errfile,
                                diff_cmd_baton->diff_cmd, scratch_pool));
 
-      SVN_ERR(svn_io_file_close(outfile, scratch_pool));
-      SVN_ERR(svn_io_file_close(errfile, scratch_pool));
-
       /* Now, open and copy our files to our output streams. */
-      SVN_ERR(svn_stream_open_readonly(&stream, outfilename,
-                                       scratch_pool, scratch_pool));
-      SVN_ERR(svn_stream_copy3(stream, svn_stream_disown(outstream,
-                               scratch_pool),
-                               NULL, NULL, scratch_pool));
-      SVN_ERR(svn_stream_open_readonly(&stream, errfilename,
-                                       scratch_pool, scratch_pool));
-      SVN_ERR(svn_stream_copy3(stream, svn_stream_disown(errstream,
-                                                         scratch_pool),
-                               NULL, NULL, scratch_pool));
+      if (outfilename)
+        {
+          SVN_ERR(svn_io_file_close(outfile, scratch_pool));
+          SVN_ERR(svn_stream_open_readonly(&stream, outfilename,
+                                           scratch_pool, scratch_pool));
+          SVN_ERR(svn_stream_copy3(stream, svn_stream_disown(outstream,
+                                                             scratch_pool),
+                                   NULL, NULL, scratch_pool));
+        }
+      if (errfilename)
+        {
+          SVN_ERR(svn_io_file_close(errfile, scratch_pool));
+          SVN_ERR(svn_stream_open_readonly(&stream, errfilename,
+                                           scratch_pool, scratch_pool));
+          SVN_ERR(svn_stream_copy3(stream, svn_stream_disown(errstream,
+                                                             scratch_pool),
+                                   NULL, NULL, scratch_pool));
+        }
 
       /* We have a printed a diff for this path, mark it as visited. */
       *wrote_header = TRUE;

Modified: subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/log.c?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/log.c (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/log.c Sun Jul  7 05:06:50 2013
@@ -712,7 +712,17 @@ run_ra_get_log(apr_array_header_t *revis
       matching_segment = bsearch(&younger_rev, log_segments->elts,
                                  log_segments->nelts, log_segments->elt_size,
                                  compare_rev_to_segment);
-      SVN_ERR_ASSERT(*matching_segment);
+      /* LOG_SEGMENTS is supposed to represent the history of PATHS from
+         the oldest to youngest revs in REVISION_RANGES.  This function's
+         current sole caller svn_client_log5 *should* be providing
+         LOG_SEGMENTS that span the oldest to youngest revs in
+         REVISION_RANGES, even if one or more of the svn_location_segment_t's
+         returned have NULL path members indicating a gap in the history. So
+         MATCHING_SEGMENT should never be NULL, but clearly sometimes it is,
+         see http://svn.haxx.se/dev/archive-2013-06/0522.shtml
+         So to be safe we handle that case. */
+      if (matching_segment == NULL)
+        continue;
       
       /* A segment with a NULL path means there is gap in the history.
          We'll just proceed and let svn_ra_get_log2 fail with a useful
@@ -850,13 +860,32 @@ svn_client_log5(const apr_array_header_t
   SVN_ERR(svn_client__ensure_ra_session_url(&old_session_url, ra_session,
                                             actual_loc->url, pool));
 
-  /* Get the svn_location_segment_t's representing the requested log ranges. */
-  SVN_ERR(svn_client__repos_location_segments(&log_segments, ra_session,
-                                              actual_loc->url,
-                                              actual_loc->rev, /* peg */
-                                              actual_loc->rev, /* start */
-                                              oldest_rev,      /* end */
-                                              ctx, pool));
+  /* Save us an RA layer round trip if we are on the repository root and
+     know the result in advance.  All the revision data has already been
+     validated.
+   */
+  if (strcmp(actual_loc->url, actual_loc->repos_root_url) == 0)
+    {
+      svn_location_segment_t *segment = apr_pcalloc(pool, sizeof(*segment));
+      log_segments = apr_array_make(pool, 1, sizeof(segment));
+
+      segment->range_start = oldest_rev;
+      segment->range_end = actual_loc->rev;
+      segment->path = "";
+      APR_ARRAY_PUSH(log_segments, svn_location_segment_t *) = segment;
+    }
+  else
+    {
+      /* Get the svn_location_segment_t's representing the requested log
+       * ranges. */
+      SVN_ERR(svn_client__repos_location_segments(&log_segments, ra_session,
+                                                  actual_loc->url,
+                                                  actual_loc->rev, /* peg */
+                                                  actual_loc->rev, /* start */
+                                                  oldest_rev,      /* end */
+                                                  ctx, pool));
+    }
+
 
   SVN_ERR(run_ra_get_log(revision_ranges, relative_targets, log_segments,
                          actual_loc, ra_session, targets, limit,

Modified: subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/merge.c?rev=1500370&r1=1500369&r2=1500370&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/libsvn_client/merge.c Sun Jul  7 05:06:50 2013
@@ -12029,16 +12029,17 @@ operative_rev_receiver(void *baton,
   return svn_error_create(SVN_ERR_CEASE_INVOCATION, NULL, NULL);
 }
 
-/* Wrapper around svn_client_mergeinfo_log2. All arguments are as per
-   that API.  The discover_changed_paths, depth, and revprops args to
-   svn_client_mergeinfo_log2 are always TRUE, svn_depth_infinity_t,
-   and NULL respectively.
+/* Wrapper around svn_client__mergeinfo_log. All arguments are as per
+   that private API.  The discover_changed_paths, depth, and revprops args to
+   svn_client__mergeinfo_log are always TRUE, svn_depth_infinity_t,
+   and empty array respectively.
 
    If RECEIVER raises a SVN_ERR_CEASE_INVOCATION error, but still sets
    *REVISION to a valid revnum, then clear the error.  Otherwise return
    any error. */
 static svn_error_t*
-short_circuit_mergeinfo_log(svn_boolean_t finding_merged,
+short_circuit_mergeinfo_log(svn_mergeinfo_catalog_t *target_mergeinfo_cat,
+                            svn_boolean_t finding_merged,
                             const char *target_path_or_url,
                             const svn_opt_revision_t *target_peg_revision,
                             const char *source_path_or_url,
@@ -12048,18 +12049,25 @@ short_circuit_mergeinfo_log(svn_boolean_
                             svn_log_entry_receiver_t receiver,
                             svn_revnum_t *revision,
                             svn_client_ctx_t *ctx,
+                            apr_pool_t *result_pool,
                             apr_pool_t *scratch_pool)
 {
-  svn_error_t *err = svn_client_mergeinfo_log2(finding_merged,
-                                               target_path_or_url,
-                                               target_peg_revision,
-                                               source_path_or_url,
-                                               source_peg_revision,
-                                               source_start_revision,
-                                               source_end_revision,
-                                               receiver, revision,
-                                               TRUE, svn_depth_infinity,
-                                               NULL, ctx, scratch_pool);
+  apr_array_header_t *revprops;
+  svn_error_t *err;
+
+  revprops = apr_array_make(scratch_pool, 0, sizeof(const char *));
+  err = svn_client__mergeinfo_log(finding_merged,
+                                  target_path_or_url,
+                                  target_peg_revision,
+                                  target_mergeinfo_cat,
+                                  source_path_or_url,
+                                  source_peg_revision,
+                                  source_start_revision,
+                                  source_end_revision,
+                                  receiver, revision,
+                                  TRUE, svn_depth_infinity,
+                                  revprops, ctx, result_pool,
+                                  scratch_pool);
 
   if (err)
     {
@@ -12129,6 +12137,7 @@ find_last_merged_location(svn_client__pa
   svn_opt_revision_t source_peg_rev, source_start_rev, source_end_rev,
     target_opt_rev;
   svn_revnum_t youngest_merged_rev = SVN_INVALID_REVNUM;
+  svn_mergeinfo_catalog_t target_mergeinfo_cat = NULL;
 
   source_peg_rev.kind = svn_opt_revision_number;
   source_peg_rev.value.number = source_branch->tip->rev;
@@ -12141,14 +12150,15 @@ find_last_merged_location(svn_client__pa
 
   /* Find the youngest revision fully merged from SOURCE_BRANCH to TARGET,
      if such a revision exists. */
-  SVN_ERR(short_circuit_mergeinfo_log(TRUE, /* Find merged */
+  SVN_ERR(short_circuit_mergeinfo_log(&target_mergeinfo_cat,
+                                      TRUE, /* Find merged */
                                       target->url, &target_opt_rev,
                                       source_branch->tip->url,
                                       &source_peg_rev,
                                       &source_end_rev, &source_start_rev,
                                       operative_rev_receiver,
                                       &youngest_merged_rev,
-                                      ctx, scratch_pool));
+                                      ctx, result_pool, scratch_pool));
 
   if (!SVN_IS_VALID_REVNUM(youngest_merged_rev))
     {
@@ -12175,14 +12185,15 @@ find_last_merged_location(svn_client__pa
          (i.e. finding the youngest revision after the YCA where all revs have
          been merged) that doesn't matter. */
       source_end_rev.value.number = youngest_merged_rev;
-      SVN_ERR(short_circuit_mergeinfo_log(FALSE, /* Find eligible */
+      SVN_ERR(short_circuit_mergeinfo_log(&target_mergeinfo_cat,
+                                          FALSE, /* Find eligible */
                                           target->url, &target_opt_rev,
                                           source_branch->tip->url,
                                           &source_peg_rev,
                                           &source_start_rev, &source_end_rev,
                                           operative_rev_receiver,
                                           &oldest_eligible_rev,
-                                          ctx, scratch_pool));
+                                          ctx, scratch_pool, scratch_pool));
 
       /* If there are revisions eligible for merging, use the oldest one
          to calculate the base.  Otherwise there are no operative revisions
@@ -12298,9 +12309,13 @@ find_automatic_merge(svn_client__pathrev
             &s_t->target->loc, SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
             s_t->target_ra_session, ctx, scratch_pool));
 
-  SVN_ERR(svn_client__get_youngest_common_ancestor(
-            &s_t->yca, s_t->source, &s_t->target->loc, s_t->source_ra_session,
-            ctx, result_pool, result_pool));
+  SVN_ERR(svn_client__calc_youngest_common_ancestor(
+            &s_t->yca, s_t->source, s_t->source_branch.history,
+            s_t->source_branch.has_r0_history,
+            &s_t->target->loc, s_t->target_branch.history,
+            s_t->target_branch.has_r0_history,
+            result_pool, scratch_pool));
+
   if (! s_t->yca)
     return svn_error_createf(SVN_ERR_CLIENT_NOT_READY_TO_MERGE, NULL,
                              _("'%s@%ld' must be ancestrally related to "



Re: Question on mergeinfo added in r1500370 Re: svn commit: r1500370 [1/5]

Posted by Branko Čibej <br...@wandisco.com>.
On 07.07.2013 15:46, Daniel Shahaf wrote:
> On Sun, Jul 07, 2013 at 05:06:51AM -0000, brane@apache.org wrote:
>> Author: brane
>> Date: Sun Jul  7 05:06:50 2013
>> New Revision: 1500370
>>
>> URL: http://svn.apache.org/r1500370
>> Log:
>> On the javahl-1.8-extensions branch: Sync JavaHL with trunk up to r1500364.
>> Sync with branches/1.8.x up to r1500366.
>>
>> Propchange: subversion/branches/javahl-1.8-extensions/
>> ------------------------------------------------------------------------------
>>   Merged /subversion/branches/1.8.x:r1494631-1500366
>>   Merged /subversion/trunk:r1478987,1480080,1481772,1481847,1489339,1490684,1491432,1491707,1492020,1492148,1492264,1493424,1493475,1493703,1493720,1494171,1494223,1494287,1494298,1494318,1494342,1494913,1494967,1495104,1495428,1495432,1495446,1495850,1496110,1496132,1496151,1496938,1496957,1497002,1497318-1497319,1497551,1497804,1498136,1498456,1498550,1498564,1499095-1499096,1499727,1500226
> Why does the output show one contiguous range for 1.8.x, but a series of
> cherry-picks for trunk?

Because changes from trunk were cherry-picked to 1.8.x, and I make a
wholesale sync from 1.8.x to the JavaHL extensions branch. The trunk
mergeinfo is inherited from the 1.8.x branch.

-- Brane

-- 
Branko Čibej | Director of Subversion
WANdisco // Non-Stop Data
e. brane@wandisco.com

Re: Question on mergeinfo added in r1500370 Re: svn commit: r1500370 [1/5]

Posted by Branko Čibej <br...@wandisco.com>.
On 07.07.2013 15:46, Daniel Shahaf wrote:
> On Sun, Jul 07, 2013 at 05:06:51AM -0000, brane@apache.org wrote:
>> Author: brane
>> Date: Sun Jul  7 05:06:50 2013
>> New Revision: 1500370
>>
>> URL: http://svn.apache.org/r1500370
>> Log:
>> On the javahl-1.8-extensions branch: Sync JavaHL with trunk up to r1500364.
>> Sync with branches/1.8.x up to r1500366.
>>
>> Propchange: subversion/branches/javahl-1.8-extensions/
>> ------------------------------------------------------------------------------
>>   Merged /subversion/branches/1.8.x:r1494631-1500366
>>   Merged /subversion/trunk:r1478987,1480080,1481772,1481847,1489339,1490684,1491432,1491707,1492020,1492148,1492264,1493424,1493475,1493703,1493720,1494171,1494223,1494287,1494298,1494318,1494342,1494913,1494967,1495104,1495428,1495432,1495446,1495850,1496110,1496132,1496151,1496938,1496957,1497002,1497318-1497319,1497551,1497804,1498136,1498456,1498550,1498564,1499095-1499096,1499727,1500226
> Why does the output show one contiguous range for 1.8.x, but a series of
> cherry-picks for trunk?

Because changes from trunk were cherry-picked to 1.8.x, and I make a
wholesale sync from 1.8.x to the JavaHL extensions branch. The trunk
mergeinfo is inherited from the 1.8.x branch.

-- Brane


-- 
Branko Čibej | Director of Subversion
WANdisco // Non-Stop Data
e. brane@wandisco.com

Question on mergeinfo added in r1500370 Re: svn commit: r1500370 [1/5]

Posted by Daniel Shahaf <da...@apache.org>.
On Sun, Jul 07, 2013 at 05:06:51AM -0000, brane@apache.org wrote:
> Author: brane
> Date: Sun Jul  7 05:06:50 2013
> New Revision: 1500370
> 
> URL: http://svn.apache.org/r1500370
> Log:
> On the javahl-1.8-extensions branch: Sync JavaHL with trunk up to r1500364.
> Sync with branches/1.8.x up to r1500366.
> 
> Propchange: subversion/branches/javahl-1.8-extensions/
> ------------------------------------------------------------------------------
>   Merged /subversion/branches/1.8.x:r1494631-1500366
>   Merged /subversion/trunk:r1478987,1480080,1481772,1481847,1489339,1490684,1491432,1491707,1492020,1492148,1492264,1493424,1493475,1493703,1493720,1494171,1494223,1494287,1494298,1494318,1494342,1494913,1494967,1495104,1495428,1495432,1495446,1495850,1496110,1496132,1496151,1496938,1496957,1497002,1497318-1497319,1497551,1497804,1498136,1498456,1498550,1498564,1499095-1499096,1499727,1500226

Why does the output show one contiguous range for 1.8.x, but a series of
cherry-picks for trunk?

Before anyone asks, it's not a mailer bug; svn shows the same:

% svn di -c 1500370 ^/subversion/branches/javahl-1.8-extensions/ --depth empty 
Index: .
===================================================================
--- .   (revision 1500369)
+++ .   (revision 1500370)

Property changes on: .
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /subversion/branches/1.8.x:r1494631-1500366
   Merged /subversion/trunk:r1478987,1480080,1481772,1481847,1489339,1490684,149
1432,1491707,1492020,1492148,1492264,1493424,1493475,1493703,1493720,1494171,149
4223,1494287,1494298,1494318,1494342,1494913,1494967,1495104,1495428,1495432,149
5446,1495850,1496110,1496132,1496151,1496938,1496957,1497002,1497318-1497319,149
7551,1497804,1498136,1498456,1498550,1498564,1499095-1499096,1499727,1500226

Question on mergeinfo added in r1500370 Re: svn commit: r1500370 [1/5]

Posted by Daniel Shahaf <da...@apache.org>.
On Sun, Jul 07, 2013 at 05:06:51AM -0000, brane@apache.org wrote:
> Author: brane
> Date: Sun Jul  7 05:06:50 2013
> New Revision: 1500370
> 
> URL: http://svn.apache.org/r1500370
> Log:
> On the javahl-1.8-extensions branch: Sync JavaHL with trunk up to r1500364.
> Sync with branches/1.8.x up to r1500366.
> 
> Propchange: subversion/branches/javahl-1.8-extensions/
> ------------------------------------------------------------------------------
>   Merged /subversion/branches/1.8.x:r1494631-1500366
>   Merged /subversion/trunk:r1478987,1480080,1481772,1481847,1489339,1490684,1491432,1491707,1492020,1492148,1492264,1493424,1493475,1493703,1493720,1494171,1494223,1494287,1494298,1494318,1494342,1494913,1494967,1495104,1495428,1495432,1495446,1495850,1496110,1496132,1496151,1496938,1496957,1497002,1497318-1497319,1497551,1497804,1498136,1498456,1498550,1498564,1499095-1499096,1499727,1500226

Why does the output show one contiguous range for 1.8.x, but a series of
cherry-picks for trunk?

Before anyone asks, it's not a mailer bug; svn shows the same:

% svn di -c 1500370 ^/subversion/branches/javahl-1.8-extensions/ --depth empty 
Index: .
===================================================================
--- .   (revision 1500369)
+++ .   (revision 1500370)

Property changes on: .
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /subversion/branches/1.8.x:r1494631-1500366
   Merged /subversion/trunk:r1478987,1480080,1481772,1481847,1489339,1490684,149
1432,1491707,1492020,1492148,1492264,1493424,1493475,1493703,1493720,1494171,149
4223,1494287,1494298,1494318,1494342,1494913,1494967,1495104,1495428,1495432,149
5446,1495850,1496110,1496132,1496151,1496938,1496957,1497002,1497318-1497319,149
7551,1497804,1498136,1498456,1498550,1498564,1499095-1499096,1499727,1500226