Return-Path: X-Original-To: apmail-subversion-commits-archive@minotaur.apache.org Delivered-To: apmail-subversion-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 2C50E17F1E for ; Tue, 4 Nov 2014 11:41:50 +0000 (UTC) Received: (qmail 51796 invoked by uid 500); 4 Nov 2014 11:41:50 -0000 Delivered-To: apmail-subversion-commits-archive@subversion.apache.org Received: (qmail 51772 invoked by uid 500); 4 Nov 2014 11:41:50 -0000 Mailing-List: contact commits-help@subversion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@subversion.apache.org Delivered-To: mailing list commits@subversion.apache.org Received: (qmail 51762 invoked by uid 99); 4 Nov 2014 11:41:50 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 04 Nov 2014 11:41:50 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 04 Nov 2014 11:41:45 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id B5A1F23889D5; Tue, 4 Nov 2014 11:40:25 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1636544 [1/13] - in /subversion/branches/remove-log-addressing: ./ subversion/bindings/javahl/tests/org/apache/subversion/javahl/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_delta/ subversion... Date: Tue, 04 Nov 2014 11:40:19 -0000 To: commits@subversion.apache.org From: ivan@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20141104114025.B5A1F23889D5@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: ivan Date: Tue Nov 4 11:40:16 2014 New Revision: 1636544 URL: http://svn.apache.org/r1636544 Log: On remove-log-addressing branch: Merge changes from trunk. Added: subversion/branches/remove-log-addressing/subversion/include/private/svn_fs_fs_private.h - copied, changed from r1636534, subversion/trunk/subversion/include/private/svn_fs_fs_private.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/stats.c - copied, changed from r1636534, subversion/trunk/subversion/libsvn_fs_fs/stats.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/rev_file.c - copied unchanged from r1636534, subversion/trunk/subversion/libsvn_fs_x/rev_file.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/rev_file.h - copied unchanged from r1636534, subversion/trunk/subversion/libsvn_fs_x/rev_file.h subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-private-test.c - copied, changed from r1636534, subversion/trunk/subversion/tests/libsvn_fs_fs/fs-fs-private-test.c Removed: subversion/branches/remove-log-addressing/subversion/include/private/svn_named_atomic.h subversion/branches/remove-log-addressing/subversion/libsvn_subr/named_atomic.c subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/named_atomic-test-common.h subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/named_atomic-test-proc.c subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/named_atomic-test.c subversion/branches/remove-log-addressing/tools/client-side/showchange.pl Modified: subversion/branches/remove-log-addressing/ (props changed) subversion/branches/remove-log-addressing/build.conf subversion/branches/remove-log-addressing/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java subversion/branches/remove-log-addressing/subversion/include/private/svn_opt_private.h subversion/branches/remove-log-addressing/subversion/include/svn_client.h subversion/branches/remove-log-addressing/subversion/include/svn_cmdline.h subversion/branches/remove-log-addressing/subversion/include/svn_delta.h subversion/branches/remove-log-addressing/subversion/include/svn_error_codes.h subversion/branches/remove-log-addressing/subversion/include/svn_fs.h subversion/branches/remove-log-addressing/subversion/include/svn_opt.h subversion/branches/remove-log-addressing/subversion/include/svn_string.h subversion/branches/remove-log-addressing/subversion/include/svn_wc.h subversion/branches/remove-log-addressing/subversion/libsvn_client/checkout.c subversion/branches/remove-log-addressing/subversion/libsvn_client/client.h subversion/branches/remove-log-addressing/subversion/libsvn_client/cmdline.c subversion/branches/remove-log-addressing/subversion/libsvn_client/commit.c subversion/branches/remove-log-addressing/subversion/libsvn_client/copy.c subversion/branches/remove-log-addressing/subversion/libsvn_client/externals.c subversion/branches/remove-log-addressing/subversion/libsvn_client/resolved.c subversion/branches/remove-log-addressing/subversion/libsvn_client/switch.c subversion/branches/remove-log-addressing/subversion/libsvn_client/update.c subversion/branches/remove-log-addressing/subversion/libsvn_delta/debug_editor.c subversion/branches/remove-log-addressing/subversion/libsvn_delta/text_delta.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_base/bdb/changes-table.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/fs.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/fs.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/fs_fs.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/fs_fs.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/hotcopy.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/id.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/low_level.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/low_level.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/recovery.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/revprops.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/revprops.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/structure subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/structure-indexes subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/transaction.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/tree.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/util.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_fs/util.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/ (props changed) subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/cached_data.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/cached_data.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/caching.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/dag.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/fs.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/fs.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/fs_x.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/fs_x.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/hotcopy.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/hotcopy.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/id.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/id.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/index.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/index.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/low_level.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/low_level.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/pack.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/recovery.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/revprops.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/revprops.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/temp_serializer.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/transaction.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/transaction.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/tree.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/util.c subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/util.h subversion/branches/remove-log-addressing/subversion/libsvn_fs_x/verify.c subversion/branches/remove-log-addressing/subversion/libsvn_repos/dump.c subversion/branches/remove-log-addressing/subversion/libsvn_repos/rev_hunt.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/cache-inprocess.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/cache-membuffer.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/cmdline.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/deprecated.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/gpg_agent.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/opt.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/packed_data.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/path.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/stream.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/string.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/subst.c subversion/branches/remove-log-addressing/subversion/libsvn_subr/sysinfo.c subversion/branches/remove-log-addressing/subversion/libsvn_wc/adm_ops.c subversion/branches/remove-log-addressing/subversion/libsvn_wc/cleanup.c subversion/branches/remove-log-addressing/subversion/libsvn_wc/copy.c subversion/branches/remove-log-addressing/subversion/libsvn_wc/deprecated.c subversion/branches/remove-log-addressing/subversion/libsvn_wc/node.c subversion/branches/remove-log-addressing/subversion/libsvn_wc/update_editor.c subversion/branches/remove-log-addressing/subversion/libsvn_wc/wc.h subversion/branches/remove-log-addressing/subversion/libsvn_wc/wc_db.c subversion/branches/remove-log-addressing/subversion/libsvn_wc/wc_db.h subversion/branches/remove-log-addressing/subversion/libsvn_wc/workqueue.c subversion/branches/remove-log-addressing/subversion/libsvn_wc/workqueue.h subversion/branches/remove-log-addressing/subversion/mod_dav_svn/deadprops.c subversion/branches/remove-log-addressing/subversion/svn-bench/cl.h subversion/branches/remove-log-addressing/subversion/svn-bench/svn-bench.c subversion/branches/remove-log-addressing/subversion/svn/auth-cmd.c subversion/branches/remove-log-addressing/subversion/svn/checkout-cmd.c subversion/branches/remove-log-addressing/subversion/svn/cl.h subversion/branches/remove-log-addressing/subversion/svn/export-cmd.c subversion/branches/remove-log-addressing/subversion/svn/svn.c subversion/branches/remove-log-addressing/subversion/svn/util.c subversion/branches/remove-log-addressing/subversion/svnadmin/svnadmin.c subversion/branches/remove-log-addressing/subversion/svnfsfs/stats-cmd.c subversion/branches/remove-log-addressing/subversion/svnfsfs/svnfsfs.c subversion/branches/remove-log-addressing/subversion/svnfsfs/svnfsfs.h subversion/branches/remove-log-addressing/subversion/svnlook/svnlook.c subversion/branches/remove-log-addressing/subversion/svnmucc/svnmucc.c subversion/branches/remove-log-addressing/subversion/svnrdump/svnrdump.c subversion/branches/remove-log-addressing/subversion/svnsync/svnsync.c subversion/branches/remove-log-addressing/subversion/tests/cmdline/externals_tests.py subversion/branches/remove-log-addressing/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout subversion/branches/remove-log-addressing/subversion/tests/cmdline/svnadmin_tests.py subversion/branches/remove-log-addressing/subversion/tests/cmdline/switch_tests.py subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/fs-test.c subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/ (props changed) subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test.c (props changed) subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_x/ (props changed) subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_x/fs-x-pack-test.c subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/skel-test.c subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/wc-test.c subversion/branches/remove-log-addressing/subversion/tests/svn_test.h subversion/branches/remove-log-addressing/subversion/tests/svn_test_fs.c subversion/branches/remove-log-addressing/tools/client-side/bash_completion subversion/branches/remove-log-addressing/tools/dev/unix-build/Makefile.svn Propchange: subversion/branches/remove-log-addressing/ ------------------------------------------------------------------------------ Merged /subversion/branches/revprop-caching-ng:r1620597,1620599 Merged /subversion/trunk:r1628179-1636534 Modified: subversion/branches/remove-log-addressing/build.conf URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/build.conf?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/build.conf (original) +++ subversion/branches/remove-log-addressing/build.conf Tue Nov 4 11:40:16 2014 @@ -382,7 +382,7 @@ msvc-export = private\svn_temp_serializer.h private\svn_io_private.h private\svn_sorts_private.h private\svn_string_private.h private\svn_magic.h - private\svn_subr_private.h private\svn_mutex.h private\svn_named_atomic.h + private\svn_subr_private.h private\svn_mutex.h private\svn_packed_data.h private\svn_object_pool.h private\svn_cert.h # Working copy management lib @@ -819,6 +819,15 @@ install = sub-test libs = libsvn_test libsvn_fs libsvn_fs_fs libsvn_delta libsvn_repos libsvn_subr apriconv apr +[fs-fs-private-test] +description = Test FSSF private API +type = exe +path = subversion/tests/libsvn_fs_fs +sources = fs-fs-private-test.c +install = test +libs = libsvn_test libsvn_fs libsvn_fs_fs libsvn_delta + libsvn_repos libsvn_subr apriconv apr + # ---------------------------------------------------------------------------- # Tests for libsvn_fs_x [fs-x-pack-test] @@ -995,22 +1004,6 @@ sources = mergeinfo-test.c install = test libs = libsvn_test libsvn_subr apr -[named_atomic-test] -description = Test named atomics -type = exe -path = subversion/tests/libsvn_subr -sources = named_atomic-test.c -install = test -libs = libsvn_test libsvn_subr apr - -[named_atomic-proc-test] -description = Sub-process for named atomics -type = exe -path = subversion/tests/libsvn_subr -sources = named_atomic-test-proc.c -install = sub-test -libs = libsvn_subr apr - [packed-data-test] description = Test path library type = exe @@ -1474,7 +1467,7 @@ type = project path = build/win32 libs = __ALL__ fs-test fs-base-test fs-fsfs-test fs-fs-pack-test fs-fs-fuzzy-test - fs-x-pack-test string-table-test + fs-fs-private-test fs-x-pack-test string-table-test skel-test strings-reps-test changes-test locks-test repos-test dump-load-test checksum-test compat-test config-test hashdump-test mergeinfo-test @@ -1482,7 +1475,7 @@ libs = __ALL__ priority-queue-test root-pools-test stream-test string-test time-test utf-test bit-array-test error-test error-code-test cache-test spillbuf-test crypto-test - named_atomic-test named_atomic-proc-test revision-test + revision-test subst_translate-test io-test translate-test random-test window-test Modified: subversion/branches/remove-log-addressing/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original) +++ subversion/branches/remove-log-addressing/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Tue Nov 4 11:40:16 2014 @@ -701,6 +701,47 @@ public class BasicTests extends SVNTests } /** + * Test SVNClient.status on externals. + * @throws Throwable + */ + public void testExternalStatus() throws Throwable + { + // build the test setup + OneTest thisTest = new OneTest(); + + + // Add an externals reference to the working copy. + client.propertySetLocal(thisTest.getWCPathSet(), "svn:externals", + "^/A/D/H ADHext".getBytes(), + Depth.empty, null, false); + + // Update the working copy to bring in the external subtree. + client.update(thisTest.getWCPathSet(), Revision.HEAD, + Depth.unknown, false, false, false, false); + + // Test status of an external file + File psi = new File(thisTest.getWorkingCopy() + "/ADHext", "psi"); + + MyStatusCallback statusCallback = new MyStatusCallback(); + client.status(fileToSVNPath(psi, false), Depth.unknown, + false, true, true, false, false, false, + null, statusCallback); + + final int statusCount = statusCallback.getStatusArray().length; + if (statusCount == 1) + { + Status st = statusCallback.getStatusArray()[0]; + assertFalse(st.isConflicted()); + assertEquals(Status.Kind.normal, st.getNodeStatus()); + assertEquals(NodeKind.file, st.getNodeKind()); + } + else if (statusCount > 1) + fail("File psi should not return more than one status."); + else + fail("File psi should return exactly one status."); + } + + /** * Test the basic SVNClient.checkout functionality. * @throws Throwable */ Copied: subversion/branches/remove-log-addressing/subversion/include/private/svn_fs_fs_private.h (from r1636534, subversion/trunk/subversion/include/private/svn_fs_fs_private.h) URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/include/private/svn_fs_fs_private.h?p2=subversion/branches/remove-log-addressing/subversion/include/private/svn_fs_fs_private.h&p1=subversion/trunk/subversion/include/private/svn_fs_fs_private.h&r1=1636534&r2=1636544&rev=1636544&view=diff ============================================================================== --- subversion/trunk/subversion/include/private/svn_fs_fs_private.h (original) +++ subversion/branches/remove-log-addressing/subversion/include/private/svn_fs_fs_private.h Tue Nov 4 11:40:16 2014 @@ -288,66 +288,6 @@ typedef struct svn_fs_fs__id_part_t apr_uint64_t number; } svn_fs_fs__id_part_t; -/* (user visible) entry in the phys-to-log index. It describes a section - * of some packed / non-packed rev file as containing a specific item. - * There must be no overlapping / conflicting entries. - */ -typedef struct svn_fs_fs__p2l_entry_t -{ - /* offset of the first byte that belongs to the item */ - apr_off_t offset; - - /* length of the item in bytes */ - apr_off_t size; - - /* type of the item (see SVN_FS_FS__ITEM_TYPE_*) defines */ - apr_uint32_t type; - - /* modified FNV-1a checksum. 0 if unknown checksum */ - apr_uint32_t fnv1_checksum; - - /* item in that block */ - svn_fs_fs__id_part_t item; -} svn_fs_fs__p2l_entry_t; - - -/* Callback function type receiving a single P2L index ENTRY, a user - * provided BATON and a SCRATCH_POOL for temporary allocations. - * ENTRY's lifetime may end when the callback returns. - */ -typedef svn_error_t * -(*svn_fs_fs__dump_index_func_t)(const svn_fs_fs__p2l_entry_t *entry, - void *baton, - apr_pool_t *scratch_pool); - -/* Read the P2L index for the rev / pack file containing REVISION in FS. - * For each index entry, invoke CALLBACK_FUNC with CALLBACK_BATON. - * If not NULL, call CANCEL_FUNC with CANCEL_BATON from time to time. - * Use SCRATCH_POOL for temporary allocations. - */ -svn_error_t * -svn_fs_fs__dump_index(svn_fs_t *fs, - svn_revnum_t revision, - svn_fs_fs__dump_index_func_t callback_func, - void *callback_baton, - svn_cancel_func_t cancel_func, - void *cancel_baton, - apr_pool_t *scratch_pool); - - -/* Rewrite the respective index information of the rev / pack file in FS - * containing REVISION and use the svn_fs_fs__p2l_entry_t * array ENTRIES - * as the new index contents. Allocate temporaries from SCRATCH_POOL. - * - * Note that this becomes a no-op if ENTRIES is empty. You may use a zero- - * sized empty entry instead. - */ -svn_error_t * -svn_fs_fs__load_index(svn_fs_t *fs, - svn_revnum_t revision, - apr_array_header_t *entries, - apr_pool_t *scratch_pool); - #ifdef __cplusplus } #endif /* __cplusplus */ Modified: subversion/branches/remove-log-addressing/subversion/include/private/svn_opt_private.h URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/include/private/svn_opt_private.h?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/include/private/svn_opt_private.h (original) +++ subversion/branches/remove-log-addressing/subversion/include/private/svn_opt_private.h Tue Nov 4 11:40:16 2014 @@ -46,10 +46,6 @@ extern "C" { * UTF8_TARGET need not be canonical. *TRUE_TARGET will not be canonical * unless UTF8_TARGET is. * - * It is an error if *TRUE_TARGET results in the empty string after the - * split, which happens in case UTF8_TARGET has a leading '@' character - * with no additional '@' characters to escape the first '@'. - * * Note that *PEG_REVISION will still contain the '@' symbol as the first * character if a peg revision was found. If a trailing '@' symbol was * used to escape other '@' characters in UTF8_TARGET, *PEG_REVISION will Modified: subversion/branches/remove-log-addressing/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/include/svn_client.h?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/include/svn_client.h (original) +++ subversion/branches/remove-log-addressing/subversion/include/svn_client.h Tue Nov 4 11:40:16 2014 @@ -1125,6 +1125,12 @@ svn_client_create_context(svn_client_ctx * error, and if this is the only type of error encountered, complete * the operation before returning the error(s). * + * Return an error if a target is just a peg specifier with no path, such as + * "@abc". Before v1.6.5 (r878062) this form was interpreted as a literal path; + * it is now ambiguous. The form "@abc@" should now be used to refer to the + * literal path "@abc" with no peg revision, or the form ".@abc" to refer to + * the empty path with peg revision "abc". + * * @since New in 1.7 */ svn_error_t * @@ -1139,6 +1145,9 @@ svn_client_args_to_target_array2(apr_arr * Similar to svn_client_args_to_target_array2() but with * @a keep_last_origpath_on_truepath_collision always set to FALSE. * + * @since Since 1.6.5, this returns an error if a path contains a peg + * specifier with no path before it, such as "@abc". + * * @deprecated Provided for backward compatibility with the 1.6 API. */ SVN_DEPRECATED Modified: subversion/branches/remove-log-addressing/subversion/include/svn_cmdline.h URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/include/svn_cmdline.h?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/include/svn_cmdline.h (original) +++ subversion/branches/remove-log-addressing/subversion/include/svn_cmdline.h Tue Nov 4 11:40:16 2014 @@ -320,15 +320,58 @@ svn_cmdline_auth_plaintext_passphrase_pr * by the command line client. * * @a non_interactive, @a username, @a password, @a config_dir, - * @a no_auth_cache, and @a trust_server_cert are the values of the - * command line options of the corresponding names. + * and @a no_auth_cache are the values of the command line options + * of the corresponding names. * + * If @a non_interactive is @c TRUE, then the following parameters + * control whether an invalid SSL certificate will be accepted + * regardless of a specific verification failure: + * + * @a trust_server_cert_unknown_ca: If @c TRUE, accept certificates + * from unknown certificate authorities. + * + * @a trust_server_cert_cn_mismatch: If @c TRUE, accept certificates + * even if the Common Name attribute of the certificate differs from + * the hostname of the server. + * + * @a trust_server_cert_expired: If @c TRUE, accept certificates even + * if they are expired. + * + * @a trust_server_cert_not_yet_valid: If @c TRUE, accept certificates + * from the future. + * + * @a trust_server_cert_other_failure: If @c TRUE, accept certificates + * even if any other verification failure than the above occured. + * * @a cfg is the @c SVN_CONFIG_CATEGORY_CONFIG configuration, and * @a cancel_func and @a cancel_baton control the cancellation of the * prompting providers that are initialized. * * Use @a pool for all allocations. * + * @since New in 1.9. + */ +svn_error_t * +svn_cmdline_create_auth_baton2(svn_auth_baton_t **ab, + svn_boolean_t non_interactive, + const char *username, + const char *password, + const char *config_dir, + svn_boolean_t no_auth_cache, + svn_boolean_t trust_server_cert_unknown_ca, + svn_boolean_t trust_server_cert_cn_mismatch, + svn_boolean_t trust_server_cert_expired, + svn_boolean_t trust_server_cert_not_yet_valid, + svn_boolean_t trust_server_cert_other_failure, + svn_config_t *cfg, + svn_cancel_func_t cancel_func, + void *cancel_baton, + apr_pool_t *pool); + +/* Like svn_cmdline_create_auth_baton2, but with only one trust_server_cert + * option which corresponds to trust_server_cert_unknown_ca. + * + * @deprecated Provided for backward compatibility with the 1.8 API. * @since New in 1.6. */ svn_error_t * Modified: subversion/branches/remove-log-addressing/subversion/include/svn_delta.h URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/include/svn_delta.h?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/include/svn_delta.h (original) +++ subversion/branches/remove-log-addressing/subversion/include/svn_delta.h Tue Nov 4 11:40:16 2014 @@ -249,6 +249,7 @@ svn_txdelta_compose_windows(const svn_tx * * @since New in 1.4 * + * @since Since 1.9, @a tbuf may be NULL if @a *tlen is 0. */ void svn_txdelta_apply_instructions(svn_txdelta_window_t *window, Modified: subversion/branches/remove-log-addressing/subversion/include/svn_error_codes.h URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/include/svn_error_codes.h?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/include/svn_error_codes.h (original) +++ subversion/branches/remove-log-addressing/subversion/include/svn_error_codes.h Tue Nov 4 11:40:16 2014 @@ -861,6 +861,11 @@ SVN_ERROR_START SVN_ERR_FS_CATEGORY_START + 62, "Malformed node revision ID string.") + /** @since New in 1.9. */ + SVN_ERRDEF(SVN_ERR_FS_INVALID_GENERATION, + SVN_ERR_FS_CATEGORY_START + 63, + "Invalid generation number data.") + /* repos errors */ SVN_ERRDEF(SVN_ERR_REPOS_LOCKED, Modified: subversion/branches/remove-log-addressing/subversion/include/svn_fs.h URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/include/svn_fs.h?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/include/svn_fs.h (original) +++ subversion/branches/remove-log-addressing/subversion/include/svn_fs.h Tue Nov 4 11:40:16 2014 @@ -1424,6 +1424,11 @@ typedef enum svn_fs_path_change_kind_t * versions. Therefore, to preserve binary compatibility, users * should not directly allocate structures of this type. * + * @note The @c text_mod, @c prop_mod and @c mergeinfo_mod flags mean the + * text, properties and mergeinfo property (respectively) were "touched" + * by the commit API; this does not mean the new value is different from + * the old value. + * * @since New in 1.6. */ typedef struct svn_fs_path_change2_t { @@ -1433,10 +1438,23 @@ typedef struct svn_fs_path_change2_t /** kind of change */ svn_fs_path_change_kind_t change_kind; - /** were there text mods? */ + /** was the text touched? + * For node_kind=dir: always false. For node_kind=file: + * modify: true iff text touched. + * add (copy): true iff text touched. + * add (plain): always true. + * delete: always false. + * replace: as for the add/copy part of the replacement. + */ svn_boolean_t text_mod; - /** were there property mods? */ + /** were the properties touched? + * modify: true iff props touched. + * add (copy): true iff props touched. + * add (plain): true iff props touched. + * delete: always false. + * replace: as for the add/copy part of the replacement. + */ svn_boolean_t prop_mod; /** what node kind is the path? @@ -1449,7 +1467,12 @@ typedef struct svn_fs_path_change2_t svn_revnum_t copyfrom_rev; const char *copyfrom_path; - /** were there mergeinfo mods? + /** was the mergeinfo property touched? + * modify: } true iff svn:mergeinfo property add/del/mod + * add (copy): } and fs format supports this flag. + * add (plain): } + * delete: always false. + * replace: as for the add/copy part of the replacement. * (Note: Pre-1.9 repositories will report #svn_tristate_unknown.) * @since New in 1.9. */ svn_tristate_t mergeinfo_mod; Modified: subversion/branches/remove-log-addressing/subversion/include/svn_opt.h URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/include/svn_opt.h?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/include/svn_opt.h (original) +++ subversion/branches/remove-log-addressing/subversion/include/svn_opt.h Tue Nov 4 11:40:16 2014 @@ -656,6 +656,10 @@ svn_opt_parse_all_args(apr_array_header_ * canonical form if @a path is in canonical form. * * @since New in 1.1. + * @since Since 1.6.5, this returns an error if @a path contains a peg + * specifier with no path before it, such as "@abc". + * @since Since 1.9.0, this no longer returns an error if @a path contains a peg + * specifier with no path before it, such as "@abc". */ svn_error_t * svn_opt_parse_path(svn_opt_revision_t *rev, Modified: subversion/branches/remove-log-addressing/subversion/include/svn_string.h URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/include/svn_string.h?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/include/svn_string.h (original) +++ subversion/branches/remove-log-addressing/subversion/include/svn_string.h Tue Nov 4 11:40:16 2014 @@ -140,6 +140,8 @@ svn_string_create_empty(apr_pool_t *pool /** Create a new string copied from a generic string of bytes, @a bytes, of * length @a size bytes. @a bytes is NOT assumed to be null-terminated, but * the new string will be. + * + * @since Since 1.9, @a bytes can be NULL if @a size is zero. */ svn_string_t * svn_string_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool); @@ -205,6 +207,8 @@ svn_stringbuf_create(const char *cstring /** Create a new stringbuf copied from the generic string of bytes, @a bytes, * of length @a size bytes. @a bytes is NOT assumed to be null-terminated, * but the new stringbuf will be. + * + * @since Since 1.9, @a bytes can be NULL if @a size is zero. */ svn_stringbuf_t * svn_stringbuf_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool); @@ -307,6 +311,8 @@ svn_stringbuf_appendbyte(svn_stringbuf_t /** Append an array of bytes onto @a targetstr. * * reallocs if necessary. @a targetstr is affected, nothing else is. + * + * @since 1.9 @a bytes can be NULL if @a count is zero. */ void svn_stringbuf_appendbytes(svn_stringbuf_t *targetstr, @@ -349,6 +355,8 @@ svn_stringbuf_appendcstr(svn_stringbuf_t * @note The inserted string may be a sub-range if @a str. * * @since New in 1.8. + * + * @since Since 1.9, @a bytes can be NULL if @a count is zero. */ void svn_stringbuf_insert(svn_stringbuf_t *str, @@ -380,6 +388,8 @@ svn_stringbuf_remove(svn_stringbuf_t *st * @endcode * * @since New in 1.8. + * + * @since Since 1.9, @a bytes can be NULL if @a new_count is zero. */ void svn_stringbuf_replace(svn_stringbuf_t *str, Modified: subversion/branches/remove-log-addressing/subversion/include/svn_wc.h URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/include/svn_wc.h?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/include/svn_wc.h (original) +++ subversion/branches/remove-log-addressing/subversion/include/svn_wc.h Tue Nov 4 11:40:16 2014 @@ -5167,6 +5167,12 @@ svn_wc_committed_queue_create(apr_pool_t * ### seems to be not a set of changes but rather the new complete set of * ### props. And it's renamed to 'new_dav_cache' inside; why? * + * If @a is_committed is @c TRUE, the node will be processed as committed. This + * turns the node and its implied descendants as the new unmodified state at + * the new specified revision. Unless @a recurse is TRUE, changes on + * descendants are not committed as changes directly. In this case they should + * be queueud as their own changes. + * * If @a remove_lock is @c TRUE, any entryprops related to a repository * lock will be removed. * @@ -5204,7 +5210,25 @@ svn_wc_committed_queue_create(apr_pool_t * Temporary allocations will be performed in @a scratch_pool, and persistent * allocations will use the same pool as @a queue used when it was created. * + * @since New in 1.9. + */ +svn_error_t * +svn_wc_queue_committed4(svn_wc_committed_queue_t *queue, + svn_wc_context_t *wc_ctx, + const char *local_abspath, + svn_boolean_t recurse, + svn_boolean_t is_committed, + const apr_array_header_t *wcprop_changes, + svn_boolean_t remove_lock, + svn_boolean_t remove_changelist, + const svn_checksum_t *sha1_checksum, + apr_pool_t *scratch_pool); + +/** Similar to svn_wc_queue_committed4, but with is_committed always + * TRUE. + * * @since New in 1.7. + * @deprecated Provided for backwards compatibility with the 1.8 API. */ svn_error_t * svn_wc_queue_committed3(svn_wc_committed_queue_t *queue, @@ -7190,7 +7214,7 @@ svn_wc_merge_prop_diffs(svn_wc_notify_st * the copy/move source (even if the copy-/move-here replaces a locally * deleted file). * - * If @a local_abspath refers to an unversioned or non-existing path, return + * If @a local_abspath refers to an unversioned or non-existent path, return * @c SVN_ERR_WC_PATH_NOT_FOUND. Use @a wc_ctx to access the working copy. * @a contents may not be @c NULL (unlike @a *contents). * Modified: subversion/branches/remove-log-addressing/subversion/libsvn_client/checkout.c URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_client/checkout.c?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/libsvn_client/checkout.c (original) +++ subversion/branches/remove-log-addressing/subversion/libsvn_client/checkout.c Tue Nov 4 11:40:16 2014 @@ -67,6 +67,7 @@ initialize_area(const char *local_abspat svn_error_t * svn_client__checkout_internal(svn_revnum_t *result_rev, + svn_boolean_t *timestamp_sleep, const char *url, const char *local_abspath, const svn_opt_revision_t *peg_revision, @@ -74,16 +75,16 @@ svn_client__checkout_internal(svn_revnum svn_depth_t depth, svn_boolean_t ignore_externals, svn_boolean_t allow_unver_obstructions, - svn_boolean_t *timestamp_sleep, + svn_ra_session_t *ra_session, svn_client_ctx_t *ctx, - apr_pool_t *pool) + apr_pool_t *scratch_pool) { svn_node_kind_t kind; svn_client__pathrev_t *pathrev; /* Sanity check. Without these, the checkout is meaningless. */ SVN_ERR_ASSERT(local_abspath != NULL); - SVN_ERR_ASSERT(svn_uri_is_canonical(url, pool)); + SVN_ERR_ASSERT(svn_uri_is_canonical(url, scratch_pool)); SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath)); /* Fulfill the docstring promise of svn_client_checkout: */ @@ -92,21 +93,38 @@ svn_client__checkout_internal(svn_revnum && (revision->kind != svn_opt_revision_head)) return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL); - { - apr_pool_t *session_pool = svn_pool_create(pool); - svn_ra_session_t *ra_session; - - /* Get the RA connection. */ - SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &pathrev, - url, NULL, peg_revision, - revision, ctx, session_pool)); - - pathrev = svn_client__pathrev_dup(pathrev, pool); - SVN_ERR(svn_ra_check_path(ra_session, "", pathrev->rev, &kind, - session_pool)); + /* Get the RA connection, if needed. */ + if (ra_session) + { + svn_error_t *err = svn_ra_reparent(ra_session, url, scratch_pool); - svn_pool_destroy(session_pool); - } + if (err) + { + if (err->apr_err == SVN_ERR_RA_ILLEGAL_URL) + { + svn_error_clear(err); + ra_session = NULL; + } + else + return svn_error_trace(err); + } + else + { + SVN_ERR(svn_client__resolve_rev_and_url(&pathrev, + ra_session, url, + peg_revision, revision, + ctx, scratch_pool)); + } + } + + if (!ra_session) + { + SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &pathrev, + url, NULL, peg_revision, + revision, ctx, scratch_pool)); + } + + SVN_ERR(svn_ra_check_path(ra_session, "", pathrev->rev, &kind, scratch_pool)); if (kind == svn_node_none) return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL, @@ -116,31 +134,35 @@ svn_client__checkout_internal(svn_revnum (SVN_ERR_UNSUPPORTED_FEATURE , NULL, _("URL '%s' refers to a file, not a directory"), pathrev->url); - SVN_ERR(svn_io_check_path(local_abspath, &kind, pool)); + SVN_ERR(svn_io_check_path(local_abspath, &kind, scratch_pool)); if (kind == svn_node_none) { /* Bootstrap: create an incomplete working-copy root dir. Its entries file should only have an entry for THIS_DIR with a URL, revnum, and an 'incomplete' flag. */ - SVN_ERR(svn_io_make_dir_recursively(local_abspath, pool)); - SVN_ERR(initialize_area(local_abspath, pathrev, depth, ctx, pool)); + SVN_ERR(svn_io_make_dir_recursively(local_abspath, scratch_pool)); + SVN_ERR(initialize_area(local_abspath, pathrev, depth, ctx, + scratch_pool)); } else if (kind == svn_node_dir) { int wc_format; const char *entry_url; - SVN_ERR(svn_wc_check_wc2(&wc_format, ctx->wc_ctx, local_abspath, pool)); + SVN_ERR(svn_wc_check_wc2(&wc_format, ctx->wc_ctx, local_abspath, + scratch_pool)); + if (! wc_format) { - SVN_ERR(initialize_area(local_abspath, pathrev, depth, ctx, pool)); + SVN_ERR(initialize_area(local_abspath, pathrev, depth, ctx, + scratch_pool)); } else { /* Get PATH's URL. */ SVN_ERR(svn_wc__node_get_url(&entry_url, ctx->wc_ctx, local_abspath, - pool, pool)); + scratch_pool, scratch_pool)); /* If PATH's existing URL matches the incoming one, then just update. This allows 'svn co' to restart an @@ -150,24 +172,25 @@ svn_client__checkout_internal(svn_revnum SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL, _("'%s' is already a working copy for a" " different URL"), - svn_dirent_local_style(local_abspath, pool)); + svn_dirent_local_style(local_abspath, scratch_pool)); } } else { return svn_error_createf(SVN_ERR_WC_NODE_KIND_CHANGE, NULL, _("'%s' already exists and is not a directory"), - svn_dirent_local_style(local_abspath, pool)); + svn_dirent_local_style(local_abspath, + scratch_pool)); } /* Have update fix the incompleteness. */ - SVN_ERR(svn_client__update_internal(result_rev, local_abspath, - revision, depth, TRUE, + SVN_ERR(svn_client__update_internal(result_rev, timestamp_sleep, + local_abspath, revision, depth, TRUE, ignore_externals, allow_unver_obstructions, TRUE /* adds_as_modification */, - FALSE, FALSE, - timestamp_sleep, ctx, pool)); + FALSE, FALSE, ra_session, + ctx, scratch_pool)); return SVN_NO_ERROR; } @@ -190,10 +213,12 @@ svn_client_checkout3(svn_revnum_t *resul SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool)); - err = svn_client__checkout_internal(result_rev, URL, local_abspath, + err = svn_client__checkout_internal(result_rev, &sleep_here, + URL, local_abspath, peg_revision, revision, depth, ignore_externals, - allow_unver_obstructions, &sleep_here, + allow_unver_obstructions, + NULL /* ra_session */, ctx, pool); if (sleep_here) svn_io_sleep_for_timestamps(local_abspath, pool); Modified: subversion/branches/remove-log-addressing/subversion/libsvn_client/client.h URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_client/client.h?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/libsvn_client/client.h (original) +++ subversion/branches/remove-log-addressing/subversion/libsvn_client/client.h Tue Nov 4 11:40:16 2014 @@ -523,10 +523,14 @@ svn_client__make_local_parents(const cha (with depth=empty) any parent directories of the requested update target which are missing from the working copy. + If RA_SESSION is NOT NULL, it may be used to avoid creating a new + session. The session may point to a different URL after returning. + NOTE: You may not specify both INNERUPDATE and MAKE_PARENTS as true. */ svn_error_t * svn_client__update_internal(svn_revnum_t *result_rev, + svn_boolean_t *timestamp_sleep, const char *local_abspath, const svn_opt_revision_t *revision, svn_depth_t depth, @@ -536,7 +540,7 @@ svn_client__update_internal(svn_revnum_t svn_boolean_t adds_as_modification, svn_boolean_t make_parents, svn_boolean_t innerupdate, - svn_boolean_t *timestamp_sleep, + svn_ra_session_t *ra_session, svn_client_ctx_t *ctx, apr_pool_t *pool); @@ -552,11 +556,6 @@ svn_client__update_internal(svn_revnum_t DEPTH must be a definite depth, not (e.g.) svn_depth_unknown. - RA_CACHE is a pointer to a cache of information for the URL at - REVISION based on the PEG_REVISION. Any information not in - *RA_CACHE is retrieved by a round-trip to the repository. RA_CACHE - may be NULL which indicates that no cache information is available. - If IGNORE_EXTERNALS is true, do no externals processing. Set *TIMESTAMP_SLEEP to TRUE if a sleep is required; otherwise do not @@ -567,9 +566,13 @@ svn_client__update_internal(svn_revnum_t unversioned children of LOCAL_ABSPATH that obstruct items added from the repos are tolerated; if FALSE, these obstructions cause the checkout to fail. + + If RA_SESSION is NOT NULL, it may be used to avoid creating a new + session. The session may point to a different URL after returning. */ svn_error_t * svn_client__checkout_internal(svn_revnum_t *result_rev, + svn_boolean_t *timestamp_sleep, const char *URL, const char *local_abspath, const svn_opt_revision_t *peg_revision, @@ -577,7 +580,7 @@ svn_client__checkout_internal(svn_revnum svn_depth_t depth, svn_boolean_t ignore_externals, svn_boolean_t allow_unver_obstructions, - svn_boolean_t *timestamp_sleep, + svn_ra_session_t *ra_session, svn_client_ctx_t *ctx, apr_pool_t *pool); @@ -1010,6 +1013,9 @@ svn_client__do_commit(const char *base_u change *TIMESTAMP_SLEEP. The output will be valid even if the function returns an error. + If RA_SESSION is NOT NULL, it may be used to avoid creating a new + session. The session may point to a different URL after returning. + Use POOL for temporary allocation. */ svn_error_t * svn_client__handle_externals(apr_hash_t *externals_new, @@ -1018,6 +1024,7 @@ svn_client__handle_externals(apr_hash_t const char *target_abspath, svn_depth_t requested_depth, svn_boolean_t *timestamp_sleep, + svn_ra_session_t *ra_session, svn_client_ctx_t *ctx, apr_pool_t *pool); Modified: subversion/branches/remove-log-addressing/subversion/libsvn_client/cmdline.c URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_client/cmdline.c?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/libsvn_client/cmdline.c (original) +++ subversion/branches/remove-log-addressing/subversion/libsvn_client/cmdline.c Tue Nov 4 11:40:16 2014 @@ -200,6 +200,15 @@ svn_client_args_to_target_array2(apr_arr SVN_ERR(svn_opt__split_arg_at_peg_revision(&true_target, &peg_rev, utf8_target, pool)); + /* Reject the form "@abc", a peg specifier with no path. */ + if (true_target[0] == '\0' && peg_rev[0] != '\0') + { + return svn_error_createf(SVN_ERR_BAD_FILENAME, NULL, + _("'%s' is just a peg revision. " + "Maybe try '%s@' instead?"), + utf8_target, utf8_target); + } + /* URLs and wc-paths get treated differently. */ if (svn_path_is_url(true_target)) { Modified: subversion/branches/remove-log-addressing/subversion/libsvn_client/commit.c URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_client/commit.c?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/libsvn_client/commit.c (original) +++ subversion/branches/remove-log-addressing/subversion/libsvn_client/commit.c Tue Nov 4 11:40:16 2014 @@ -250,39 +250,18 @@ post_process_commit_item(svn_wc_committe remove_lock = TRUE; return svn_error_trace( - svn_wc_queue_committed3(queue, wc_ctx, item->path, + svn_wc_queue_committed4(queue, wc_ctx, item->path, loop_recurse, + 0 != (item->state_flags & + (SVN_CLIENT_COMMIT_ITEM_ADD + | SVN_CLIENT_COMMIT_ITEM_DELETE + | SVN_CLIENT_COMMIT_ITEM_TEXT_MODS + | SVN_CLIENT_COMMIT_ITEM_PROP_MODS)), item->incoming_prop_changes, remove_lock, !keep_changelists, sha1_checksum, scratch_pool)); } -/* Do similar handling as post_process_commit_item() but for items that - * are commit items, but aren't actual changes. Most importantly - * remove lock tokens. */ -static svn_error_t * -post_process_no_commit_item(const svn_client_commit_item3_t *item, - svn_wc_context_t *wc_ctx, - svn_boolean_t keep_changelists, - svn_boolean_t keep_locks, - apr_pool_t *scratch_pool) -{ - if ((item->state_flags & SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN) - && !keep_locks) - { - SVN_ERR(svn_wc_remove_lock2(wc_ctx, item->path, scratch_pool)); - } - - if (!keep_changelists) - SVN_ERR(svn_wc_set_changelist2(wc_ctx, item->path, NULL, - svn_depth_empty, NULL, - NULL, NULL, - NULL, NULL, - scratch_pool)); - - return SVN_NO_ERROR; -} - /* Given a list of committables described by their common base abspath BASE_ABSPATH and a list of relative dirents TARGET_RELPATHS determine which absolute paths must be locked to commit all these targets and @@ -943,11 +922,6 @@ svn_client_commit6(const apr_array_heade svn_client_commit_item3_t *item = APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *); - if (! (item->state_flags & ~ SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN)) - { - continue; /* Nothing to post process via the queue */ - } - svn_pool_clear(iterpool); bump_err = post_process_commit_item( queue, item, ctx->wc_ctx, @@ -969,23 +943,6 @@ svn_client_commit6(const apr_array_heade if (bump_err) goto cleanup; - - for (i = 0; i < commit_items->nelts; i++) - { - svn_client_commit_item3_t *item - = APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *); - - if (item->state_flags & ~ SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN) - continue; /* Already processed via the queue */ - - svn_pool_clear(iterpool); - bump_err = post_process_no_commit_item( - item, ctx->wc_ctx, - keep_changelists, keep_locks, - iterpool); - if (bump_err) - goto cleanup; - } } cleanup: Modified: subversion/branches/remove-log-addressing/subversion/libsvn_client/copy.c URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_client/copy.c?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/libsvn_client/copy.c (original) +++ subversion/branches/remove-log-addressing/subversion/libsvn_client/copy.c Tue Nov 4 11:40:16 2014 @@ -1612,7 +1612,6 @@ repos_to_wc_copy_single(svn_boolean_t *t { if (same_repositories) { - svn_boolean_t sleep_needed = FALSE; const char *tmpdir_abspath, *tmp_abspath; /* Find a temporary location in which to check out the copy source. */ @@ -1641,14 +1640,14 @@ repos_to_wc_copy_single(svn_boolean_t *t ctx->notify_func2 = notification_adjust_func; ctx->notify_baton2 = &nb; - err = svn_client__checkout_internal(&pair->src_revnum, + err = svn_client__checkout_internal(&pair->src_revnum, timestamp_sleep, pair->src_original, tmp_abspath, &pair->src_peg_revision, &pair->src_op_revision, svn_depth_infinity, ignore_externals, FALSE, - &sleep_needed, ctx, pool); + ra_session, ctx, pool); ctx->notify_func2 = old_notify_func2; ctx->notify_baton2 = old_notify_baton2; Modified: subversion/branches/remove-log-addressing/subversion/libsvn_client/externals.c URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_client/externals.c?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/libsvn_client/externals.c (original) +++ subversion/branches/remove-log-addressing/subversion/libsvn_client/externals.c Tue Nov 4 11:40:16 2014 @@ -150,6 +150,7 @@ switch_dir_external(const char *local_ab const svn_opt_revision_t *revision, const char *defining_abspath, svn_boolean_t *timestamp_sleep, + svn_ra_session_t *ra_session, svn_client_ctx_t *ctx, apr_pool_t *pool) { @@ -169,6 +170,37 @@ switch_dir_external(const char *local_ab if (revision->kind == svn_opt_revision_number) external_rev = revision->value.number; + /* + * The code below assumes existing versioned paths are *not* part of + * the external's defining working copy. + * The working copy library does not support registering externals + * on top of existing BASE nodes and will error out if we try. + * So if the external target is part of the defining working copy's + * BASE tree, don't attempt to create the external. Doing so would + * leave behind a switched path instead of an external (since the + * switch succeeds but registration of the external in the DB fails). + * The working copy then cannot be updated until the path is switched back. + * See issue #4085. + */ + SVN_ERR(svn_wc__node_get_base(&kind, NULL, NULL, + &repos_root_url, &repos_uuid, + NULL, ctx->wc_ctx, local_abspath, + TRUE, /* ignore_enoent */ + TRUE, /* show hidden */ + pool, pool)); + if (kind != svn_node_unknown) + { + const char *wcroot_abspath; + const char *defining_wcroot_abspath; + + SVN_ERR(svn_wc__get_wcroot(&wcroot_abspath, ctx->wc_ctx, + local_abspath, pool, pool)); + SVN_ERR(svn_wc__get_wcroot(&defining_wcroot_abspath, ctx->wc_ctx, + defining_abspath, pool, pool)); + if (strcmp(wcroot_abspath, defining_wcroot_abspath) == 0) + return svn_error_create(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL, NULL); + } + /* If path is a directory, try to update/switch to the correct URL and revision. */ SVN_ERR(svn_io_check_path(local_abspath, &kind, pool)); @@ -195,12 +227,12 @@ switch_dir_external(const char *local_ab externals definition, perform an update. */ if (strcmp(node_url, url) == 0) { - SVN_ERR(svn_client__update_internal(NULL, local_abspath, + SVN_ERR(svn_client__update_internal(NULL, timestamp_sleep, + local_abspath, revision, svn_depth_unknown, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, - timestamp_sleep, - ctx, subpool)); + ra_session, ctx, subpool)); svn_pool_destroy(subpool); goto cleanup; } @@ -317,9 +349,11 @@ switch_dir_external(const char *local_ab } /* ... Hello, new hotness. */ - SVN_ERR(svn_client__checkout_internal(NULL, url, local_abspath, peg_revision, + SVN_ERR(svn_client__checkout_internal(NULL, timestamp_sleep, + url, local_abspath, peg_revision, revision, svn_depth_infinity, - FALSE, FALSE, timestamp_sleep, + FALSE, FALSE, + ra_session, ctx, pool)); SVN_ERR(svn_wc__node_get_repos_info(NULL, NULL, @@ -662,10 +696,10 @@ handle_external_item_change(svn_client_c const char *local_abspath, const char *old_defining_abspath, const svn_wc_external_item2_t *new_item, + svn_ra_session_t *ra_session, svn_boolean_t *timestamp_sleep, apr_pool_t *scratch_pool) { - svn_ra_session_t *ra_session; svn_client__pathrev_t *new_loc; const char *new_url; svn_node_kind_t ext_kind; @@ -686,12 +720,37 @@ handle_external_item_change(svn_client_c scratch_pool, scratch_pool)); /* Determine if the external is a file or directory. */ - /* Get the RA connection. */ - SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &new_loc, - new_url, NULL, - &(new_item->peg_revision), - &(new_item->revision), ctx, - scratch_pool)); + /* Get the RA connection, if needed. */ + if (ra_session) + { + svn_error_t *err = svn_ra_reparent(ra_session, new_url, scratch_pool); + + if (err) + { + if (err->apr_err == SVN_ERR_RA_ILLEGAL_URL) + { + svn_error_clear(err); + ra_session = NULL; + } + else + return svn_error_trace(err); + } + else + { + SVN_ERR(svn_client__resolve_rev_and_url(&new_loc, + ra_session, new_url, + &(new_item->peg_revision), + &(new_item->revision), ctx, + scratch_pool)); + } + } + + if (!ra_session) + SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &new_loc, + new_url, NULL, + &(new_item->peg_revision), + &(new_item->revision), ctx, + scratch_pool)); SVN_ERR(svn_ra_check_path(ra_session, "", new_loc->rev, &ext_kind, scratch_pool)); @@ -739,7 +798,7 @@ handle_external_item_change(svn_client_c &(new_item->peg_revision), &(new_item->revision), parent_dir_abspath, - timestamp_sleep, ctx, + timestamp_sleep, ra_session, ctx, scratch_pool)); break; case svn_node_file: @@ -847,6 +906,7 @@ handle_externals_change(svn_client_ctx_t apr_hash_t *old_externals, svn_depth_t ambient_depth, svn_depth_t requested_depth, + svn_ra_session_t *ra_session, apr_pool_t *scratch_pool) { apr_array_header_t *new_desc; @@ -915,7 +975,7 @@ handle_externals_change(svn_client_ctx_t local_abspath, url, target_abspath, old_defining_abspath, - new_item, + new_item, ra_session, timestamp_sleep, iterpool), iterpool)); @@ -938,6 +998,7 @@ svn_client__handle_externals(apr_hash_t const char *target_abspath, svn_depth_t requested_depth, svn_boolean_t *timestamp_sleep, + svn_ra_session_t *ra_session, svn_client_ctx_t *ctx, apr_pool_t *scratch_pool) { @@ -987,7 +1048,7 @@ svn_client__handle_externals(apr_hash_t local_abspath, desc_text, old_external_defs, ambient_depth, requested_depth, - iterpool)); + ra_session, iterpool)); } /* Remove the remaining externals */ Modified: subversion/branches/remove-log-addressing/subversion/libsvn_client/resolved.c URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_client/resolved.c?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/libsvn_client/resolved.c (original) +++ subversion/branches/remove-log-addressing/subversion/libsvn_client/resolved.c Tue Nov 4 11:40:16 2014 @@ -77,7 +77,7 @@ svn_client__resolve_conflicts(svn_boolea ctx->notify_func2, ctx->notify_baton2, iterpool)); - if (conflicts_remain) + if (conflicts_remain && !*conflicts_remain) { svn_error_t *err; svn_boolean_t text_c, prop_c, tree_c; Modified: subversion/branches/remove-log-addressing/subversion/libsvn_client/switch.c URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_client/switch.c?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/libsvn_client/switch.c (original) +++ subversion/branches/remove-log-addressing/subversion/libsvn_client/switch.c Tue Nov 4 11:40:16 2014 @@ -365,7 +365,7 @@ switch_internal(svn_revnum_t *result_rev new_depths, switch_loc->repos_root_url, local_abspath, - depth, timestamp_sleep, + depth, timestamp_sleep, ra_session, ctx, pool)); } Modified: subversion/branches/remove-log-addressing/subversion/libsvn_client/update.c URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_client/update.c?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/libsvn_client/update.c (original) +++ subversion/branches/remove-log-addressing/subversion/libsvn_client/update.c Tue Nov 4 11:40:16 2014 @@ -203,7 +203,9 @@ record_conflict(svn_wc_conflict_result_t */ static svn_error_t * update_internal(svn_revnum_t *result_rev, + svn_boolean_t *timestamp_sleep, apr_hash_t *conflicted_paths, + svn_ra_session_t **ra_session_p, const char *local_abspath, const char *anchor_abspath, const svn_opt_revision_t *revision, @@ -212,11 +214,10 @@ update_internal(svn_revnum_t *result_rev svn_boolean_t ignore_externals, svn_boolean_t allow_unver_obstructions, svn_boolean_t adds_as_modification, - svn_boolean_t *timestamp_sleep, svn_boolean_t notify_summary, svn_client_ctx_t *ctx, - svn_ra_session_t **ra_session_p, - apr_pool_t *pool) + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) { const svn_delta_editor_t *update_editor; void *update_edit_baton; @@ -253,7 +254,7 @@ update_internal(svn_revnum_t *result_rev depth_is_sticky = FALSE; if (strcmp(local_abspath, anchor_abspath)) - target = svn_dirent_basename(local_abspath, pool); + target = svn_dirent_basename(local_abspath, scratch_pool); else target = ""; @@ -262,7 +263,7 @@ update_internal(svn_revnum_t *result_rev &repos_uuid, NULL, ctx->wc_ctx, anchor_abspath, TRUE, FALSE, - pool, pool)); + scratch_pool, scratch_pool)); /* It does not make sense to update conflict victims. */ if (repos_relpath) @@ -271,11 +272,11 @@ update_internal(svn_revnum_t *result_rev svn_boolean_t text_conflicted, prop_conflicted; anchor_url = svn_path_url_add_component2(repos_root_url, repos_relpath, - pool); + scratch_pool); err = svn_wc_conflicted_p3(&text_conflicted, &prop_conflicted, NULL, - ctx->wc_ctx, local_abspath, pool); + ctx->wc_ctx, local_abspath, scratch_pool); if (err && err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND) return svn_error_trace(err); @@ -298,9 +299,9 @@ update_internal(svn_revnum_t *result_rev target_conflicted ? svn_wc_notify_skip_conflicted : svn_wc_notify_update_skip_working_only, - pool); + scratch_pool); - ctx->notify_func2(ctx->notify_baton2, nt, pool); + ctx->notify_func2(ctx->notify_baton2, nt, scratch_pool); } return SVN_NO_ERROR; } @@ -317,32 +318,33 @@ update_internal(svn_revnum_t *result_rev local_abspath, ctx->cancel_func, ctx->cancel_baton, ctx->notify_func2, ctx->notify_baton2, - pool)); + scratch_pool)); /* Target excluded, we are done now */ return SVN_NO_ERROR; } SVN_ERR(svn_wc_read_kind2(&target_kind, ctx->wc_ctx, local_abspath, - TRUE, TRUE, pool)); + TRUE, TRUE, scratch_pool)); if (target_kind == svn_node_dir) { SVN_ERR(svn_wc_crop_tree2(ctx->wc_ctx, local_abspath, depth, ctx->cancel_func, ctx->cancel_baton, ctx->notify_func2, ctx->notify_baton2, - pool)); + scratch_pool)); } } /* check whether the "clean c/o" optimization is applicable */ - SVN_ERR(is_empty_wc(&clean_checkout, local_abspath, anchor_abspath, pool)); + SVN_ERR(is_empty_wc(&clean_checkout, local_abspath, anchor_abspath, + scratch_pool)); /* Get the external diff3, if any. */ svn_config_get(cfg, &diff3_cmd, SVN_CONFIG_SECTION_HELPERS, SVN_CONFIG_OPTION_DIFF3_CMD, NULL); if (diff3_cmd != NULL) - SVN_ERR(svn_path_cstring_to_utf8(&diff3_cmd, diff3_cmd, pool)); + SVN_ERR(svn_path_cstring_to_utf8(&diff3_cmd, diff3_cmd, scratch_pool)); /* See if the user wants last-commit timestamps instead of current ones. */ SVN_ERR(svn_config_get_bool(cfg, &use_commit_times, @@ -354,7 +356,7 @@ update_internal(svn_revnum_t *result_rev svn_config_get(cfg, &preserved_exts_str, SVN_CONFIG_SECTION_MISCELLANY, SVN_CONFIG_OPTION_PRESERVED_CF_EXTS, ""); preserved_exts = *preserved_exts_str - ? svn_cstring_split(preserved_exts_str, "\n\r\t\v ", FALSE, pool) + ? svn_cstring_split(preserved_exts_str, "\n\r\t\v ", FALSE, scratch_pool) : NULL; /* Let everyone know we're starting a real update (unless we're @@ -363,12 +365,12 @@ update_internal(svn_revnum_t *result_rev { svn_wc_notify_t *notify = svn_wc_create_notify(local_abspath, svn_wc_notify_update_started, - pool); + scratch_pool); notify->kind = svn_node_none; notify->content_state = notify->prop_state = svn_wc_notify_state_inapplicable; notify->lock_state = svn_wc_notify_lock_state_inapplicable; - (*ctx->notify_func2)(ctx->notify_baton2, notify, pool); + (*ctx->notify_func2)(ctx->notify_baton2, notify, scratch_pool); } /* Try to reuse the RA session by reparenting it to the anchor_url. @@ -377,7 +379,7 @@ update_internal(svn_revnum_t *result_rev * have to be in the same repo. */ if (ra_session) { - svn_error_t *err = svn_ra_reparent(ra_session, anchor_url, pool); + svn_error_t *err = svn_ra_reparent(ra_session, anchor_url, scratch_pool); if (err) { if (err->apr_err == SVN_ERR_RA_ILLEGAL_URL) @@ -405,7 +407,8 @@ update_internal(svn_revnum_t *result_rev anchor_abspath, NULL, TRUE /* write_dav_props */, TRUE /* read_dav_props */, - ctx, pool, pool)); + ctx, + result_pool, scratch_pool)); *ra_session_p = ra_session; } @@ -417,12 +420,13 @@ update_internal(svn_revnum_t *result_rev /* To relocate everything inside our repository we need the old and new repos root. */ - SVN_ERR(svn_ra_get_repos_root2(ra_session, &new_repos_root_url, pool)); + SVN_ERR(svn_ra_get_repos_root2(ra_session, &new_repos_root_url, + scratch_pool)); /* svn_client_relocate2() will check the uuid */ SVN_ERR(svn_client_relocate2(anchor_abspath, repos_root_url, new_repos_root_url, ignore_externals, - ctx, pool)); + ctx, scratch_pool)); /* Store updated repository root for externals */ repos_root_url = new_repos_root_url; @@ -443,10 +447,10 @@ update_internal(svn_revnum_t *result_rev to take a URL as easily as a local path? */ SVN_ERR(svn_client__get_revision_number(&revnum, NULL, ctx->wc_ctx, local_abspath, ra_session, &opt_rev, - pool)); + scratch_pool)); SVN_ERR(svn_ra_has_capability(ra_session, &server_supports_depth, - SVN_RA_CAPABILITY_DEPTH, pool)); + SVN_RA_CAPABILITY_DEPTH, scratch_pool)); dfb.ra_session = ra_session; dfb.target_revision = revnum; @@ -454,7 +458,7 @@ update_internal(svn_revnum_t *result_rev SVN_ERR(svn_client__get_inheritable_props(&wcroot_iprops, local_abspath, revnum, depth, ra_session, - ctx, pool, pool)); + ctx, scratch_pool, scratch_pool)); /* Fetch the update editor. If REVISION is invalid, that's okay; the RA driver will call editor->set_target_revision later on. */ @@ -473,7 +477,7 @@ update_internal(svn_revnum_t *result_rev NULL, NULL, ctx->cancel_func, ctx->cancel_baton, ctx->notify_func2, ctx->notify_baton2, - pool, pool)); + scratch_pool, scratch_pool)); /* Tell RA to do an update of URL+TARGET to REVISION; if we pass an invalid revnum, that means RA will use the latest revision. */ @@ -484,7 +488,8 @@ update_internal(svn_revnum_t *result_rev : svn_depth_unknown), FALSE /* send_copyfrom_args */, FALSE /* ignore_ancestry */, - update_editor, update_edit_baton, pool, pool)); + update_editor, update_edit_baton, + scratch_pool, scratch_pool)); /* Past this point, we assume the WC is going to be modified so we will * need to sleep for timestamps. */ @@ -500,7 +505,7 @@ update_internal(svn_revnum_t *result_rev use_commit_times, ctx->cancel_func, ctx->cancel_baton, ctx->notify_func2, ctx->notify_baton2, - pool)); + scratch_pool)); /* We handle externals after the update is complete, so that handling external items (and any errors therefrom) doesn't delay @@ -513,13 +518,14 @@ update_internal(svn_revnum_t *result_rev SVN_ERR(svn_wc__externals_gather_definitions(&new_externals, &new_depths, ctx->wc_ctx, local_abspath, - depth, pool, pool)); + depth, + scratch_pool, scratch_pool)); SVN_ERR(svn_client__handle_externals(new_externals, new_depths, repos_root_url, local_abspath, - depth, timestamp_sleep, - ctx, pool)); + depth, timestamp_sleep, ra_session, + ctx, scratch_pool)); } /* Let everyone know we're finished here (unless we're asked not to). */ @@ -527,13 +533,13 @@ update_internal(svn_revnum_t *result_rev { svn_wc_notify_t *notify = svn_wc_create_notify(local_abspath, svn_wc_notify_update_completed, - pool); + scratch_pool); notify->kind = svn_node_none; notify->content_state = notify->prop_state = svn_wc_notify_state_inapplicable; notify->lock_state = svn_wc_notify_lock_state_inapplicable; notify->revision = revnum; - (*ctx->notify_func2)(ctx->notify_baton2, notify, pool); + (*ctx->notify_func2)(ctx->notify_baton2, notify, scratch_pool); } /* If the caller wants the result revision, give it to them. */ @@ -545,6 +551,7 @@ update_internal(svn_revnum_t *result_rev svn_error_t * svn_client__update_internal(svn_revnum_t *result_rev, + svn_boolean_t *timestamp_sleep, const char *local_abspath, const svn_opt_revision_t *revision, svn_depth_t depth, @@ -554,14 +561,13 @@ svn_client__update_internal(svn_revnum_t svn_boolean_t adds_as_modification, svn_boolean_t make_parents, svn_boolean_t innerupdate, - svn_boolean_t *timestamp_sleep, + svn_ra_session_t *ra_session, svn_client_ctx_t *ctx, apr_pool_t *pool) { const char *anchor_abspath, *lockroot_abspath; svn_error_t *err; svn_opt_revision_t peg_revision = *revision; - svn_ra_session_t *ra_session = NULL; apr_hash_t *conflicted_paths = ctx->conflict_func2 ? apr_hash_make(pool) : NULL; @@ -574,16 +580,21 @@ svn_client__update_internal(svn_revnum_t const char *parent_abspath = local_abspath; apr_array_header_t *missing_parents = apr_array_make(pool, 4, sizeof(const char *)); + apr_pool_t *iterpool; + + iterpool = svn_pool_create(pool); while (1) { + svn_pool_clear(iterpool); + /* Try to lock. If we can't lock because our target (or its parent) isn't a working copy, we'll try to walk up the tree to find a working copy, remembering this path's parent as one we need to flesh out. */ err = svn_wc__acquire_write_lock(&lockroot_abspath, ctx->wc_ctx, parent_abspath, !innerupdate, - pool, pool); + pool, iterpool); if (!err) break; if ((err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY) @@ -605,12 +616,14 @@ svn_client__update_internal(svn_revnum_t const char *missing_parent = APR_ARRAY_IDX(missing_parents, i, const char *); - err = update_internal(result_rev, conflicted_paths, - missing_parent, anchor_abspath, - &peg_revision, svn_depth_empty, FALSE, - ignore_externals, allow_unver_obstructions, - adds_as_modification, timestamp_sleep, - FALSE, ctx, &ra_session, pool); + svn_pool_clear(iterpool); + + err = update_internal(result_rev, timestamp_sleep, conflicted_paths, + &ra_session, missing_parent, + anchor_abspath, &peg_revision, svn_depth_empty, + FALSE, ignore_externals, + allow_unver_obstructions, adds_as_modification, + FALSE, ctx, pool, iterpool); if (err) goto cleanup; anchor_abspath = missing_parent; @@ -621,6 +634,8 @@ svn_client__update_internal(svn_revnum_t peg_revision.kind = svn_opt_revision_number; peg_revision.value.number = *result_rev; } + + svn_pool_destroy(iterpool); } else { @@ -630,16 +645,17 @@ svn_client__update_internal(svn_revnum_t anchor_abspath = lockroot_abspath; } - err = update_internal(result_rev, conflicted_paths, + err = update_internal(result_rev, timestamp_sleep, conflicted_paths, + &ra_session, local_abspath, anchor_abspath, &peg_revision, depth, depth_is_sticky, ignore_externals, allow_unver_obstructions, - adds_as_modification, timestamp_sleep, - TRUE, ctx, &ra_session, pool); + adds_as_modification, + TRUE, ctx, pool, pool); /* Give the conflict resolver callback the opportunity to * resolve any conflicts that were raised. */ - if (! err && ctx->conflict_func2) + if (! err && ctx->conflict_func2 && apr_hash_count(conflicted_paths)) { err = svn_client__resolve_conflicts(NULL, conflicted_paths, ctx, pool); } @@ -703,14 +719,13 @@ svn_client_update4(apr_array_header_t ** err = svn_dirent_get_absolute(&local_abspath, path, iterpool); if (err) goto cleanup; - err = svn_client__update_internal(&result_rev, local_abspath, + err = svn_client__update_internal(&result_rev, &sleep, local_abspath, revision, depth, depth_is_sticky, ignore_externals, allow_unver_obstructions, adds_as_modification, make_parents, - FALSE, &sleep, - ctx, + FALSE, NULL, ctx, iterpool); if (err) Modified: subversion/branches/remove-log-addressing/subversion/libsvn_delta/debug_editor.c URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_delta/debug_editor.c?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/libsvn_delta/debug_editor.c (original) +++ subversion/branches/remove-log-addressing/subversion/libsvn_delta/debug_editor.c Tue Nov 4 11:40:16 2014 @@ -346,8 +346,8 @@ change_file_prop(void *file_baton, struct edit_baton *eb = fb->edit_baton; SVN_ERR(write_indent(eb, pool)); - SVN_ERR(svn_stream_printf(eb->out, pool, "change_file_prop : %s\n", - name)); + SVN_ERR(svn_stream_printf(eb->out, pool, "change_file_prop : %s -> %s\n", + name, value ? value->data : "")); SVN_ERR(eb->wrapped_editor->change_file_prop(fb->wrapped_file_baton, name, @@ -367,7 +367,8 @@ change_dir_prop(void *dir_baton, struct edit_baton *eb = db->edit_baton; SVN_ERR(write_indent(eb, pool)); - SVN_ERR(svn_stream_printf(eb->out, pool, "change_dir_prop : %s\n", name)); + SVN_ERR(svn_stream_printf(eb->out, pool, "change_dir_prop : %s -> %s\n", + name, value ? value->data : "")); SVN_ERR(eb->wrapped_editor->change_dir_prop(db->wrapped_dir_baton, name, Modified: subversion/branches/remove-log-addressing/subversion/libsvn_delta/text_delta.c URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_delta/text_delta.c?rev=1636544&r1=1636543&r2=1636544&view=diff ============================================================================== --- subversion/branches/remove-log-addressing/subversion/libsvn_delta/text_delta.c (original) +++ subversion/branches/remove-log-addressing/subversion/libsvn_delta/text_delta.c Tue Nov 4 11:40:16 2014 @@ -656,6 +656,11 @@ svn_txdelta_apply_instructions(svn_txdel const svn_txdelta_op_t *op; apr_size_t tpos = 0; + /* Nothing to do for empty buffers. + * This check allows for NULL TBUF in that case. */ + if (*tlen == 0) + return; + for (op = window->ops; op < window->ops + window->num_ops; op++) { const apr_size_t buf_len = (op->length < *tlen - tpos