subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From i...@apache.org
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 GMT
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 : "<deleted>"));
 
   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 : "<deleted>"));
 
   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



Mime
View raw message