[commit] r2202 - in trunk/GME: Include/apr Include/apr-util Include/apr/arch/darwin Include/apr/arch/netware Include/apr/arch/os2 Include/apr/arch/unix Include/apr/arch/win32 Include/subversion Lib Lib/subv_debug Lib/subv_release

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Tue May 21 15:37:56 CDT 2013


Author: volgy
Date: Tue May 21 15:37:55 2013
New Revision: 2202

Log:
Updating subversion (1.7.9) library and dependencies

subversion-1.7.9
apr-1.4.6
apr-iconv-1.2.1
apr-util-1.5.2
openssl-1.0.1e
serf-1.2.0
zlib-1.2.8
sqlite-3.7.17 

WITHOUT libneon

Added:
   trunk/GME/Include/apr-util/apr_crypto.h
   trunk/GME/Include/apr-util/apu_errno.h
   trunk/GME/Include/apr/arch/darwin/
   trunk/GME/Include/subversion/svn_cache_config.h
Modified:
   trunk/GME/Include/apr-util/apr_base64.h
   trunk/GME/Include/apr-util/apr_buckets.h
   trunk/GME/Include/apr-util/apr_hooks.h
   trunk/GME/Include/apr-util/apr_ldap.h.in
   trunk/GME/Include/apr-util/apr_md5.h
   trunk/GME/Include/apr-util/apr_memcache.h
   trunk/GME/Include/apr-util/apr_queue.h
   trunk/GME/Include/apr-util/apr_reslist.h
   trunk/GME/Include/apr-util/apr_xml.h
   trunk/GME/Include/apr-util/apu.h
   trunk/GME/Include/apr-util/apu.h.in
   trunk/GME/Include/apr-util/apu.hnw
   trunk/GME/Include/apr-util/apu.hw
   trunk/GME/Include/apr-util/apu_version.h
   trunk/GME/Include/apr/apr.h
   trunk/GME/Include/apr/apr.h.in
   trunk/GME/Include/apr/apr.hnw
   trunk/GME/Include/apr/apr.hw
   trunk/GME/Include/apr/apr_env.h
   trunk/GME/Include/apr/apr_errno.h
   trunk/GME/Include/apr/apr_file_io.h
   trunk/GME/Include/apr/apr_general.h
   trunk/GME/Include/apr/apr_global_mutex.h
   trunk/GME/Include/apr/apr_hash.h
   trunk/GME/Include/apr/apr_lib.h
   trunk/GME/Include/apr/apr_network_io.h
   trunk/GME/Include/apr/apr_poll.h
   trunk/GME/Include/apr/apr_portable.h
   trunk/GME/Include/apr/apr_ring.h
   trunk/GME/Include/apr/apr_strings.h
   trunk/GME/Include/apr/apr_tables.h
   trunk/GME/Include/apr/apr_thread_proc.h
   trunk/GME/Include/apr/apr_time.h
   trunk/GME/Include/apr/apr_version.h
   trunk/GME/Include/apr/apr_want.h
   trunk/GME/Include/apr/arch/netware/apr_arch_file_io.h
   trunk/GME/Include/apr/arch/netware/apr_arch_pre_nw.h
   trunk/GME/Include/apr/arch/netware/apr_arch_threadproc.h
   trunk/GME/Include/apr/arch/netware/apr_private.h
   trunk/GME/Include/apr/arch/os2/apr_arch_file_io.h
   trunk/GME/Include/apr/arch/unix/apr_arch_inherit.h
   trunk/GME/Include/apr/arch/unix/apr_arch_poll_private.h
   trunk/GME/Include/apr/arch/win32/apr_arch_file_io.h
   trunk/GME/Include/apr/arch/win32/apr_arch_misc.h
   trunk/GME/Include/subversion/mod_authz_svn.h
   trunk/GME/Include/subversion/mod_dav_svn.h
   trunk/GME/Include/subversion/svn_auth.h
   trunk/GME/Include/subversion/svn_base64.h
   trunk/GME/Include/subversion/svn_checksum.h
   trunk/GME/Include/subversion/svn_client.h
   trunk/GME/Include/subversion/svn_cmdline.h
   trunk/GME/Include/subversion/svn_compat.h
   trunk/GME/Include/subversion/svn_config.h
   trunk/GME/Include/subversion/svn_ctype.h
   trunk/GME/Include/subversion/svn_dav.h
   trunk/GME/Include/subversion/svn_delta.h
   trunk/GME/Include/subversion/svn_diff.h
   trunk/GME/Include/subversion/svn_dirent_uri.h
   trunk/GME/Include/subversion/svn_dso.h
   trunk/GME/Include/subversion/svn_error.h
   trunk/GME/Include/subversion/svn_error_codes.h
   trunk/GME/Include/subversion/svn_fs.h
   trunk/GME/Include/subversion/svn_hash.h
   trunk/GME/Include/subversion/svn_io.h
   trunk/GME/Include/subversion/svn_iter.h
   trunk/GME/Include/subversion/svn_md5.h
   trunk/GME/Include/subversion/svn_mergeinfo.h
   trunk/GME/Include/subversion/svn_nls.h
   trunk/GME/Include/subversion/svn_opt.h
   trunk/GME/Include/subversion/svn_path.h
   trunk/GME/Include/subversion/svn_pools.h
   trunk/GME/Include/subversion/svn_props.h
   trunk/GME/Include/subversion/svn_quoprint.h
   trunk/GME/Include/subversion/svn_ra.h
   trunk/GME/Include/subversion/svn_ra_svn.h
   trunk/GME/Include/subversion/svn_repos.h
   trunk/GME/Include/subversion/svn_sorts.h
   trunk/GME/Include/subversion/svn_string.h
   trunk/GME/Include/subversion/svn_subst.h
   trunk/GME/Include/subversion/svn_time.h
   trunk/GME/Include/subversion/svn_types.h
   trunk/GME/Include/subversion/svn_user.h
   trunk/GME/Include/subversion/svn_utf.h
   trunk/GME/Include/subversion/svn_version.h
   trunk/GME/Include/subversion/svn_wc.h
   trunk/GME/Include/subversion/svn_xml.h
   trunk/GME/Lib/libeay32.dll
   trunk/GME/Lib/libeay32.lib
   trunk/GME/Lib/ssleay32.dll
   trunk/GME/Lib/ssleay32.lib
   trunk/GME/Lib/subv_debug/libapr-1.dll
   trunk/GME/Lib/subv_debug/libapr-1.lib
   trunk/GME/Lib/subv_debug/libapr-1.pdb
   trunk/GME/Lib/subv_debug/libapriconv-1.dll
   trunk/GME/Lib/subv_debug/libapriconv-1.lib
   trunk/GME/Lib/subv_debug/libapriconv-1.pdb
   trunk/GME/Lib/subv_debug/libaprutil-1.dll
   trunk/GME/Lib/subv_debug/libaprutil-1.lib
   trunk/GME/Lib/subv_debug/libaprutil-1.pdb
   trunk/GME/Lib/subv_debug/libsvn_fs_fs-1.lib
   trunk/GME/Lib/subv_debug/libsvn_fs_fs-1.pdb
   trunk/GME/Lib/subv_debug/libsvn_fs_util-1.lib
   trunk/GME/Lib/subv_debug/libsvn_fs_util-1.pdb
   trunk/GME/Lib/subv_debug/libsvn_ra_local-1.lib
   trunk/GME/Lib/subv_debug/libsvn_ra_local-1.pdb
   trunk/GME/Lib/subv_debug/libsvn_ra_serf-1.lib
   trunk/GME/Lib/subv_debug/libsvn_ra_serf-1.pdb
   trunk/GME/Lib/subv_debug/libsvn_ra_svn-1.lib
   trunk/GME/Lib/subv_debug/libsvn_ra_svn-1.pdb
   trunk/GME/Lib/subv_debug/serf.lib
   trunk/GME/Lib/subv_debug/serf.pdb
   trunk/GME/Lib/subv_debug/svn_client-1.lib
   trunk/GME/Lib/subv_debug/svn_client-1.pdb
   trunk/GME/Lib/subv_debug/svn_delta-1.lib
   trunk/GME/Lib/subv_debug/svn_delta-1.pdb
   trunk/GME/Lib/subv_debug/svn_diff-1.lib
   trunk/GME/Lib/subv_debug/svn_diff-1.pdb
   trunk/GME/Lib/subv_debug/svn_fs-1.lib
   trunk/GME/Lib/subv_debug/svn_fs-1.pdb
   trunk/GME/Lib/subv_debug/svn_ra-1.lib
   trunk/GME/Lib/subv_debug/svn_ra-1.pdb
   trunk/GME/Lib/subv_debug/svn_repos-1.lib
   trunk/GME/Lib/subv_debug/svn_repos-1.pdb
   trunk/GME/Lib/subv_debug/svn_subr-1.lib
   trunk/GME/Lib/subv_debug/svn_subr-1.pdb
   trunk/GME/Lib/subv_debug/svn_wc-1.lib
   trunk/GME/Lib/subv_debug/svn_wc-1.pdb
   trunk/GME/Lib/subv_debug/xml.lib
   trunk/GME/Lib/subv_debug/xml.pdb
   trunk/GME/Lib/subv_debug/zlibstatD.lib
   trunk/GME/Lib/subv_release/libapr-1.dll
   trunk/GME/Lib/subv_release/libapr-1.lib
   trunk/GME/Lib/subv_release/libapr-1.pdb
   trunk/GME/Lib/subv_release/libapriconv-1.dll
   trunk/GME/Lib/subv_release/libapriconv-1.lib
   trunk/GME/Lib/subv_release/libapriconv-1.pdb
   trunk/GME/Lib/subv_release/libaprutil-1.dll
   trunk/GME/Lib/subv_release/libaprutil-1.lib
   trunk/GME/Lib/subv_release/libaprutil-1.pdb
   trunk/GME/Lib/subv_release/libsvn_fs_fs-1.lib
   trunk/GME/Lib/subv_release/libsvn_fs_fs-1.pdb
   trunk/GME/Lib/subv_release/libsvn_fs_util-1.lib
   trunk/GME/Lib/subv_release/libsvn_fs_util-1.pdb
   trunk/GME/Lib/subv_release/libsvn_ra_local-1.lib
   trunk/GME/Lib/subv_release/libsvn_ra_local-1.pdb
   trunk/GME/Lib/subv_release/libsvn_ra_serf-1.lib
   trunk/GME/Lib/subv_release/libsvn_ra_serf-1.pdb
   trunk/GME/Lib/subv_release/libsvn_ra_svn-1.lib
   trunk/GME/Lib/subv_release/libsvn_ra_svn-1.pdb
   trunk/GME/Lib/subv_release/serf.lib
   trunk/GME/Lib/subv_release/serf.pdb
   trunk/GME/Lib/subv_release/svn_client-1.lib
   trunk/GME/Lib/subv_release/svn_client-1.pdb
   trunk/GME/Lib/subv_release/svn_delta-1.lib
   trunk/GME/Lib/subv_release/svn_delta-1.pdb
   trunk/GME/Lib/subv_release/svn_diff-1.lib
   trunk/GME/Lib/subv_release/svn_diff-1.pdb
   trunk/GME/Lib/subv_release/svn_fs-1.lib
   trunk/GME/Lib/subv_release/svn_fs-1.pdb
   trunk/GME/Lib/subv_release/svn_ra-1.lib
   trunk/GME/Lib/subv_release/svn_ra-1.pdb
   trunk/GME/Lib/subv_release/svn_repos-1.lib
   trunk/GME/Lib/subv_release/svn_repos-1.pdb
   trunk/GME/Lib/subv_release/svn_subr-1.lib
   trunk/GME/Lib/subv_release/svn_subr-1.pdb
   trunk/GME/Lib/subv_release/svn_wc-1.lib
   trunk/GME/Lib/subv_release/svn_wc-1.pdb
   trunk/GME/Lib/subv_release/xml.lib
   trunk/GME/Lib/subv_release/xml.pdb
   trunk/GME/Lib/subv_release/zlibstat.lib

Modified: trunk/GME/Include/apr-util/apr_base64.h
==============================================================================
--- trunk/GME/Include/apr-util/apr_base64.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apr_base64.h	Tue May 21 15:37:55 2013	(r2202)
@@ -51,10 +51,11 @@
  */
 
 /**
- * Given the length of an un-encrypted string, get the length of the 
- * encrypted string.
- * @param len the length of an unencrypted string.
- * @return the length of the string after it is encrypted
+ * Given the length of an un-encoded string, get the length of the
+ * encoded string.
+ * @param len the length of an unencoded string.
+ * @return the length of the string after it is encoded, including the
+ * trailing \0
  */ 
 APU_DECLARE(int) apr_base64_encode_len(int len);
 

Modified: trunk/GME/Include/apr-util/apr_buckets.h
==============================================================================
--- trunk/GME/Include/apr-util/apr_buckets.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apr_buckets.h	Tue May 21 15:37:55 2013	(r2202)
@@ -679,16 +679,18 @@
 APU_DECLARE(apr_status_t) apr_brigade_cleanup(void *data);
 
 /**
- * Move the buckets from the tail end of the existing brigade @param b into
- * the brigade @param a. If @param a is NULL a new brigade is created. Buckets
- * from @param e to the last bucket (inclusively) of brigade @param b are moved
- * from @param b to the returned brigade @param a.
+ * Move the buckets from the tail end of the existing brigade @a b into
+ * the brigade @a a. If @a a is NULL a new brigade is created. Buckets
+ * from @a e to the last bucket (inclusively) of brigade @a b are moved
+ * from @a b to the returned brigade @a a.
+ *
  * @param b The brigade to split
  * @param e The first bucket to move
  * @param a The brigade which should be used for the result or NULL if
- *          a new brigade should be created.
- * @return The brigade supplied in @param a or a new one if @param a was NULL.
- * @warning Note that this function allocates a new brigade if @param a is
+ *          a new brigade should be created. The brigade @a a will be
+ *          cleared if it is not empty.
+ * @return The brigade supplied in @a a or a new one if @a a was NULL.
+ * @warning Note that this function allocates a new brigade if @a a is
  * NULL so memory consumption should be carefully considered.
  */
 APU_DECLARE(apr_bucket_brigade *) apr_brigade_split_ex(apr_bucket_brigade *b,
@@ -698,8 +700,8 @@
 /**
  * Create a new bucket brigade and move the buckets from the tail end
  * of an existing brigade into the new brigade.  Buckets from 
- * @param e to the last bucket (inclusively) of brigade @param b
- * are moved from @param b to the returned brigade.
+ * @a e to the last bucket (inclusively) of brigade @a b
+ * are moved from @a b to the returned brigade.
  * @param b The brigade to split 
  * @param e The first bucket to move
  * @return The new brigade
@@ -774,7 +776,7 @@
                                                  apr_off_t maxbytes);
 
 /**
- * create an iovec of the elements in a bucket_brigade... return number 
+ * Create an iovec of the elements in a bucket_brigade... return number 
  * of elements used.  This is useful for writing to a file or to the
  * network efficiently.
  * @param b The bucket brigade to create the iovec from
@@ -800,6 +802,20 @@
 
 /**
  * This function writes a string into a bucket brigade.
+ *
+ * The apr_brigade_write function attempts to be efficient with the
+ * handling of heap buckets. Regardless of the amount of data stored
+ * inside a heap bucket, heap buckets are a fixed size to promote their
+ * reuse.
+ *
+ * If an attempt is made to write a string to a brigade that already 
+ * ends with a heap bucket, this function will attempt to pack the
+ * string into the remaining space in the previous heap bucket, before
+ * allocating a new heap bucket.
+ *
+ * This function always returns APR_SUCCESS, unless a flush function is
+ * passed, in which case the return value of the flush function will be
+ * returned if used.
  * @param b The bucket brigade to add to
  * @param flush The flush function to use if the brigade is full
  * @param ctx The structure to pass to the flush function
@@ -988,19 +1004,70 @@
     } while (0)
 
 /**
- * Read the data from the bucket.
- * 
- * If it is not practical to return all
- * the data in the bucket, the current bucket is split and replaced by
- * two buckets, the first representing the data returned in this call,
- * and the second representing the rest of the data as yet unread. The
- * original bucket will become the first bucket after this call.
- * 
- * (It is assumed that the bucket is a member of a brigade when this
- * function is called).
+ * Read some data from the bucket.
+ *
+ * The apr_bucket_read function returns a convenient amount of data
+ * from the bucket provided, writing the address and length of the
+ * data to the pointers provided by the caller. The function tries
+ * as hard as possible to avoid a memory copy.
+ *
+ * Buckets are expected to be a member of a brigade at the time they
+ * are read.
+ *
+ * In typical application code, buckets are read in a loop, and after
+ * each bucket is read and processed, it is moved or deleted from the
+ * brigade and the next bucket read.
+ *
+ * The definition of "convenient" depends on the type of bucket that
+ * is being read, and is decided by APR. In the case of memory based
+ * buckets such as heap and immortal buckets, a pointer will be
+ * returned to the location of the buffer containing the complete
+ * contents of the bucket.
+ *
+ * Some buckets, such as the socket bucket, might have no concept
+ * of length. If an attempt is made to read such a bucket, the
+ * apr_bucket_read function will read a convenient amount of data
+ * from the socket. The socket bucket is magically morphed into a
+ * heap bucket containing the just-read data, and a new socket bucket
+ * is inserted just after this heap bucket.
+ *
+ * To understand why apr_bucket_read might do this, consider the loop
+ * described above to read and process buckets. The current bucket
+ * is magically morphed into a heap bucket and returned to the caller.
+ * The caller processes the data, and deletes the heap bucket, moving
+ * onto the next bucket, the new socket bucket. This process repeats,
+ * giving the illusion of a bucket brigade that contains potentially
+ * infinite amounts of data. It is up to the caller to decide at what
+ * point to stop reading buckets.
+ *
+ * Some buckets, such as the file bucket, might have a fixed size,
+ * but be significantly larger than is practical to store in RAM in
+ * one go. As with the socket bucket, if an attempt is made to read
+ * from a file bucket, the file bucket is magically morphed into a
+ * heap bucket containing a convenient amount of data read from the
+ * current offset in the file. During the read, the offset will be
+ * moved forward on the file, and a new file bucket will be inserted
+ * directly after the current bucket representing the remainder of the
+ * file. If the heap bucket was large enough to store the whole
+ * remainder of the file, no more file buckets are inserted, and the
+ * file bucket will disappear completely.
+ *
+ * The pattern for reading buckets described above does create the
+ * illusion that the code is willing to swallow buckets that might be
+ * too large for the system to handle in one go. This however is just
+ * an illusion: APR will always ensure that large (file) or infinite
+ * (socket) buckets are broken into convenient bite sized heap buckets
+ * before data is returned to the caller.
+ *
+ * There is a potential gotcha to watch for: if buckets are read in a
+ * loop, and aren't deleted after being processed, the potentially large
+ * bucket will slowly be converted into RAM resident heap buckets. If
+ * the file is larger than available RAM, an out of memory condition
+ * could be caused if the application is not careful to manage this.
+ *
  * @param e The bucket to read from
- * @param str The location to store the data in
- * @param len The amount of data read
+ * @param str The location to store a pointer to the data in
+ * @param len The location to store the amount of data read
  * @param block Whether the read function blocks
  */
 #define apr_bucket_read(e,str,len,block) (e)->type->read(e, str, len, block)

Added: trunk/GME/Include/apr-util/apr_crypto.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/GME/Include/apr-util/apr_crypto.h	Tue May 21 15:37:55 2013	(r2202)
@@ -0,0 +1,419 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef APR_CRYPTO_H
+#define APR_CRYPTO_H
+
+#include "apu.h"
+#include "apr_pools.h"
+#include "apr_tables.h"
+#include "apr_hash.h"
+#include "apu_errno.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file apr_crypto.h
+ * @brief APR-UTIL Crypto library
+ */
+/**
+ * @defgroup APR_Util_Crypto Crypto routines
+ * @ingroup APR_Util
+ * @{
+ */
+
+#if APU_HAVE_CRYPTO
+
+#ifndef APU_CRYPTO_RECOMMENDED_DRIVER
+#if APU_HAVE_OPENSSL
+#define APU_CRYPTO_RECOMMENDED_DRIVER "openssl"
+#else
+#if APU_HAVE_NSS
+#define APU_CRYPTO_RECOMMENDED_DRIVER "nss"
+#else
+#if APU_HAVE_MSCNG
+#define APU_CRYPTO_RECOMMENDED_DRIVER "mscng"
+#else
+#if APU_HAVE_MSCAPI
+#define APU_CRYPTO_RECOMMENDED_DRIVER "mscapi"
+#else
+#endif
+#endif
+#endif
+#endif
+#endif
+
+/**
+ * Symmetric Key types understood by the library.
+ *
+ * NOTE: It is expected that this list will grow over time.
+ *
+ * Interoperability Matrix:
+ *
+ * The matrix is based on the testcrypto.c unit test, which attempts to
+ * test whether a simple encrypt/decrypt will succeed, as well as testing
+ * whether an encrypted string by one library can be decrypted by the
+ * others.
+ *
+ * Some libraries will successfully encrypt and decrypt their own data,
+ * but won't decrypt data from another library. It is hoped that over
+ * time these anomalies will be found and fixed, but until then it is
+ * recommended that ciphers are chosen that interoperate across platform.
+ *
+ * An X below means the test passes, it does not necessarily mean that
+ * encryption performed is correct or secure. Applications should stick
+ * to ciphers that pass the interoperablity tests on the right hand side
+ * of the table.
+ *
+ * Aligned data is data whose length is a multiple of the block size for
+ * the chosen cipher. Padded data is data that is not aligned by block
+ * size and must be padded by the crypto library.
+ *
+ *                  OpenSSL      NSS      Interop
+ *                 Align Pad  Align Pad  Align Pad
+ * 3DES_192/CBC    X     X    X     X    X     X
+ * 3DES_192/ECB    X     X
+ * AES_256/CBC     X     X    X     X    X     X
+ * AES_256/ECB     X     X    X          X
+ * AES_192/CBC     X     X    X     X
+ * AES_192/ECB     X     X    X
+ * AES_128/CBC     X     X    X     X
+ * AES_128/ECB     X     X    X
+ *
+ * Conclusion: for padded data, use 3DES_192/CBC or AES_256/CBC. For
+ * aligned data, use 3DES_192/CBC, AES_256/CBC or AES_256/ECB.
+ */
+
+typedef enum
+{
+    APR_KEY_NONE, APR_KEY_3DES_192, /** 192 bit (3-Key) 3DES */
+    APR_KEY_AES_128, /** 128 bit AES */
+    APR_KEY_AES_192, /** 192 bit AES */
+    APR_KEY_AES_256
+/** 256 bit AES */
+} apr_crypto_block_key_type_e;
+
+typedef enum
+{
+    APR_MODE_NONE, /** An error condition */
+    APR_MODE_ECB, /** Electronic Code Book */
+    APR_MODE_CBC
+/** Cipher Block Chaining */
+} apr_crypto_block_key_mode_e;
+
+/* These are opaque structs.  Instantiation is up to each backend */
+typedef struct apr_crypto_driver_t apr_crypto_driver_t;
+typedef struct apr_crypto_t apr_crypto_t;
+typedef struct apr_crypto_config_t apr_crypto_config_t;
+typedef struct apr_crypto_key_t apr_crypto_key_t;
+typedef struct apr_crypto_block_t apr_crypto_block_t;
+
+/**
+ * @brief Perform once-only initialisation. Call once only.
+ *
+ * @param pool - pool to register any shutdown cleanups, etc
+ * @return APR_NOTIMPL in case of no crypto support.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_init(apr_pool_t *pool);
+
+/**
+ * @brief Register a cleanup to zero out the buffer provided
+ * when the pool is cleaned up.
+ *
+ * @param pool - pool to register the cleanup
+ * @param buffer - buffer to zero out
+ * @param size - size of the buffer to zero out
+ */
+APU_DECLARE(apr_status_t) apr_crypto_clear(apr_pool_t *pool, void *buffer,
+        apr_size_t size);
+
+/**
+ * @brief Get the driver struct for a name
+ *
+ * @param driver - pointer to driver struct.
+ * @param name - driver name
+ * @param params - array of initialisation parameters
+ * @param result - result and error message on failure
+ * @param pool - (process) pool to register cleanup
+ * @return APR_SUCCESS for success
+ * @return APR_ENOTIMPL for no driver (when DSO not enabled)
+ * @return APR_EDSOOPEN if DSO driver file can't be opened
+ * @return APR_ESYMNOTFOUND if the driver file doesn't contain a driver
+ * @remarks NSS: the params can have "dir", "key3", "cert7" and "secmod"
+ *  keys, each followed by an equal sign and a value. Such key/value pairs can
+ *  be delimited by space or tab. If the value contains a space, surround the
+ *  whole key value pair in quotes: "dir=My Directory".
+ * @remarks OpenSSL: currently no params are supported.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_get_driver(
+        const apr_crypto_driver_t **driver,
+        const char *name, const char *params, const apu_err_t **result,
+        apr_pool_t *pool);
+
+/**
+ * @brief Return the name of the driver.
+ *
+ * @param driver - The driver in use.
+ * @return The name of the driver.
+ */
+APU_DECLARE(const char *) apr_crypto_driver_name(
+        const apr_crypto_driver_t *driver);
+
+/**
+ * @brief Get the result of the last operation on a context. If the result
+ *        is NULL, the operation was successful.
+ * @param result - the result structure
+ * @param f - context pointer
+ * @return APR_SUCCESS for success
+ */
+APU_DECLARE(apr_status_t) apr_crypto_error(const apu_err_t **result,
+        const apr_crypto_t *f);
+
+/**
+ * @brief Create a context for supporting encryption. Keys, certificates,
+ *        algorithms and other parameters will be set per context. More than
+ *        one context can be created at one time. A cleanup will be automatically
+ *        registered with the given pool to guarantee a graceful shutdown.
+ * @param f - context pointer will be written here
+ * @param driver - driver to use
+ * @param params - array of key parameters
+ * @param pool - process pool
+ * @return APR_ENOENGINE when the engine specified does not exist. APR_EINITENGINE
+ * if the engine cannot be initialised.
+ * @remarks NSS: currently no params are supported.
+ * @remarks OpenSSL: the params can have "engine" as a key, followed by an equal
+ *  sign and a value.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_make(apr_crypto_t **f,
+        const apr_crypto_driver_t *driver, const char *params,
+        apr_pool_t *pool);
+
+/**
+ * @brief Get a hash table of key types, keyed by the name of the type against
+ * an integer pointer constant.
+ *
+ * @param types - hashtable of key types keyed to constants.
+ * @param f - encryption context
+ * @return APR_SUCCESS for success
+ */
+APU_DECLARE(apr_status_t) apr_crypto_get_block_key_types(apr_hash_t **types,
+        const apr_crypto_t *f);
+
+/**
+ * @brief Get a hash table of key modes, keyed by the name of the mode against
+ * an integer pointer constant.
+ *
+ * @param modes - hashtable of key modes keyed to constants.
+ * @param f - encryption context
+ * @return APR_SUCCESS for success
+ */
+APU_DECLARE(apr_status_t) apr_crypto_get_block_key_modes(apr_hash_t **modes,
+        const apr_crypto_t *f);
+
+/**
+ * @brief Create a key from the given passphrase. By default, the PBKDF2
+ *        algorithm is used to generate the key from the passphrase. It is expected
+ *        that the same pass phrase will generate the same key, regardless of the
+ *        backend crypto platform used. The key is cleaned up when the context
+ *        is cleaned, and may be reused with multiple encryption or decryption
+ *        operations.
+ * @note If *key is NULL, a apr_crypto_key_t will be created from a pool. If
+ *       *key is not NULL, *key must point at a previously created structure.
+ * @param key The key returned, see note.
+ * @param ivSize The size of the initialisation vector will be returned, based
+ *               on whether an IV is relevant for this type of crypto.
+ * @param pass The passphrase to use.
+ * @param passLen The passphrase length in bytes
+ * @param salt The salt to use.
+ * @param saltLen The salt length in bytes
+ * @param type 3DES_192, AES_128, AES_192, AES_256.
+ * @param mode Electronic Code Book / Cipher Block Chaining.
+ * @param doPad Pad if necessary.
+ * @param iterations Number of iterations to use in algorithm
+ * @param f The context to use.
+ * @param p The pool to use.
+ * @return Returns APR_ENOKEY if the pass phrase is missing or empty, or if a backend
+ *         error occurred while generating the key. APR_ENOCIPHER if the type or mode
+ *         is not supported by the particular backend. APR_EKEYTYPE if the key type is
+ *         not known. APR_EPADDING if padding was requested but is not supported.
+ *         APR_ENOTIMPL if not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_passphrase(apr_crypto_key_t **key,
+        apr_size_t *ivSize, const char *pass, apr_size_t passLen,
+        const unsigned char * salt, apr_size_t saltLen,
+        const apr_crypto_block_key_type_e type,
+        const apr_crypto_block_key_mode_e mode, const int doPad,
+        const int iterations, const apr_crypto_t *f, apr_pool_t *p);
+
+/**
+ * @brief Initialise a context for encrypting arbitrary data using the given key.
+ * @note If *ctx is NULL, a apr_crypto_block_t will be created from a pool. If
+ *       *ctx is not NULL, *ctx must point at a previously created structure.
+ * @param ctx The block context returned, see note.
+ * @param iv Optional initialisation vector. If the buffer pointed to is NULL,
+ *           an IV will be created at random, in space allocated from the pool.
+ *           If the buffer pointed to is not NULL, the IV in the buffer will be
+ *           used.
+ * @param key The key structure to use.
+ * @param blockSize The block size of the cipher.
+ * @param p The pool to use.
+ * @return Returns APR_ENOIV if an initialisation vector is required but not specified.
+ *         Returns APR_EINIT if the backend failed to initialise the context. Returns
+ *         APR_ENOTIMPL if not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_encrypt_init(
+        apr_crypto_block_t **ctx, const unsigned char **iv,
+        const apr_crypto_key_t *key, apr_size_t *blockSize, apr_pool_t *p);
+
+/**
+ * @brief Encrypt data provided by in, write it to out.
+ * @note The number of bytes written will be written to outlen. If
+ *       out is NULL, outlen will contain the maximum size of the
+ *       buffer needed to hold the data, including any data
+ *       generated by apr_crypto_block_encrypt_finish below. If *out points
+ *       to NULL, a buffer sufficiently large will be created from
+ *       the pool provided. If *out points to a not-NULL value, this
+ *       value will be used as a buffer instead.
+ * @param out Address of a buffer to which data will be written,
+ *        see note.
+ * @param outlen Length of the output will be written here.
+ * @param in Address of the buffer to read.
+ * @param inlen Length of the buffer to read.
+ * @param ctx The block context to use.
+ * @return APR_ECRYPT if an error occurred. Returns APR_ENOTIMPL if
+ *         not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_encrypt(unsigned char **out,
+        apr_size_t *outlen, const unsigned char *in, apr_size_t inlen,
+        apr_crypto_block_t *ctx);
+
+/**
+ * @brief Encrypt final data block, write it to out.
+ * @note If necessary the final block will be written out after being
+ *       padded. Typically the final block will be written to the
+ *       same buffer used by apr_crypto_block_encrypt, offset by the
+ *       number of bytes returned as actually written by the
+ *       apr_crypto_block_encrypt() call. After this call, the context
+ *       is cleaned and can be reused by apr_crypto_block_encrypt_init().
+ * @param out Address of a buffer to which data will be written. This
+ *            buffer must already exist, and is usually the same
+ *            buffer used by apr_evp_crypt(). See note.
+ * @param outlen Length of the output will be written here.
+ * @param ctx The block context to use.
+ * @return APR_ECRYPT if an error occurred.
+ * @return APR_EPADDING if padding was enabled and the block was incorrectly
+ *         formatted.
+ * @return APR_ENOTIMPL if not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_encrypt_finish(unsigned char *out,
+        apr_size_t *outlen, apr_crypto_block_t *ctx);
+
+/**
+ * @brief Initialise a context for decrypting arbitrary data using the given key.
+ * @note If *ctx is NULL, a apr_crypto_block_t will be created from a pool. If
+ *       *ctx is not NULL, *ctx must point at a previously created structure.
+ * @param ctx The block context returned, see note.
+ * @param blockSize The block size of the cipher.
+ * @param iv Optional initialisation vector.
+ * @param key The key structure to use.
+ * @param p The pool to use.
+ * @return Returns APR_ENOIV if an initialisation vector is required but not specified.
+ *         Returns APR_EINIT if the backend failed to initialise the context. Returns
+ *         APR_ENOTIMPL if not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_decrypt_init(
+        apr_crypto_block_t **ctx, apr_size_t *blockSize,
+        const unsigned char *iv, const apr_crypto_key_t *key, apr_pool_t *p);
+
+/**
+ * @brief Decrypt data provided by in, write it to out.
+ * @note The number of bytes written will be written to outlen. If
+ *       out is NULL, outlen will contain the maximum size of the
+ *       buffer needed to hold the data, including any data
+ *       generated by apr_crypto_block_decrypt_finish below. If *out points
+ *       to NULL, a buffer sufficiently large will be created from
+ *       the pool provided. If *out points to a not-NULL value, this
+ *       value will be used as a buffer instead.
+ * @param out Address of a buffer to which data will be written,
+ *        see note.
+ * @param outlen Length of the output will be written here.
+ * @param in Address of the buffer to read.
+ * @param inlen Length of the buffer to read.
+ * @param ctx The block context to use.
+ * @return APR_ECRYPT if an error occurred. Returns APR_ENOTIMPL if
+ *         not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_decrypt(unsigned char **out,
+        apr_size_t *outlen, const unsigned char *in, apr_size_t inlen,
+        apr_crypto_block_t *ctx);
+
+/**
+ * @brief Decrypt final data block, write it to out.
+ * @note If necessary the final block will be written out after being
+ *       padded. Typically the final block will be written to the
+ *       same buffer used by apr_crypto_block_decrypt, offset by the
+ *       number of bytes returned as actually written by the
+ *       apr_crypto_block_decrypt() call. After this call, the context
+ *       is cleaned and can be reused by apr_crypto_block_decrypt_init().
+ * @param out Address of a buffer to which data will be written. This
+ *            buffer must already exist, and is usually the same
+ *            buffer used by apr_evp_crypt(). See note.
+ * @param outlen Length of the output will be written here.
+ * @param ctx The block context to use.
+ * @return APR_ECRYPT if an error occurred.
+ * @return APR_EPADDING if padding was enabled and the block was incorrectly
+ *         formatted.
+ * @return APR_ENOTIMPL if not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_decrypt_finish(unsigned char *out,
+        apr_size_t *outlen, apr_crypto_block_t *ctx);
+
+/**
+ * @brief Clean encryption / decryption context.
+ * @note After cleanup, a context is free to be reused if necessary.
+ * @param ctx The block context to use.
+ * @return Returns APR_ENOTIMPL if not supported.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_block_cleanup(apr_crypto_block_t *ctx);
+
+/**
+ * @brief Clean encryption / decryption context.
+ * @note After cleanup, a context is free to be reused if necessary.
+ * @param f The context to use.
+ * @return Returns APR_ENOTIMPL if not supported.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_cleanup(apr_crypto_t *f);
+
+/**
+ * @brief Shutdown the crypto library.
+ * @note After shutdown, it is expected that the init function can be called again.
+ * @param driver - driver to use
+ * @return Returns APR_ENOTIMPL if not supported.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_shutdown(
+        const apr_crypto_driver_t *driver);
+
+#endif /* APU_HAVE_CRYPTO */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Modified: trunk/GME/Include/apr-util/apr_hooks.h
==============================================================================
--- trunk/GME/Include/apr-util/apr_hooks.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apr_hooks.h	Tue May 21 15:37:55 2013	(r2202)
@@ -34,6 +34,82 @@
  * @ingroup APR_Util
  * @{
  */
+
+/**
+ * @defgroup apr_hook_probes Hook probe capability
+ * APR hooks provide a trace probe capability for capturing
+ * the flow of control and return values with hooks.
+ *
+ * In order to use this facility, the application must define
+ * the symbol APR_HOOK_PROBES_ENABLED and the four APR_HOOK_PROBE_
+ * macros described below before including apr_hooks.h in files
+ * that use the APR_IMPLEMENT_EXTERNAL_HOOK_* macros.
+ *
+ * This probe facility is not provided for APR optional hooks.
+ * @{
+ */
+
+#ifdef APR_HOOK_PROBES_ENABLED
+#define APR_HOOK_INT_DCL_UD void *ud = NULL
+#else
+/** internal implementation detail to avoid the ud declaration when
+ * hook probes are not used
+ */
+#define APR_HOOK_INT_DCL_UD
+/**
+ * User-defined hook probe macro that is invoked when the hook
+ * is run, before calling any hook functions.
+ * @param ud A void * user data field that should be filled in by
+ * this macro, and will be provided to the other hook probe macros.
+ * @param ns The namespace prefix of the hook functions
+ * @param name The name of the hook
+ * @param args The argument list to the hook functions, with enclosing
+ * parens.
+ */
+#define APR_HOOK_PROBE_ENTRY(ud,ns,name,args)
+/**
+ * User-defined hook probe macro that is invoked after the hook
+ * has run.
+ * @param ud A void * user data field that was filled in by the user-
+ * provided APR_HOOK_PROBE_ENTRY().
+ * @param ns The namespace prefix of the hook functions
+ * @param name The name of the hook
+ * @param rv The return value of the hook, or 0 if the hook is void.
+ * @param args The argument list to the hook functions, with enclosing
+ * parens.
+ */
+#define APR_HOOK_PROBE_RETURN(ud,ns,name,rv,args)
+/**
+ * User-defined hook probe macro that is invoked before calling a
+ * hook function.
+ * @param ud A void * user data field that was filled in by the user-
+ * provided APR_HOOK_PROBE_ENTRY().
+ * @param ns The namespace prefix of the hook functions
+ * @param name The name of the hook
+ * @param src The value of apr_hook_debug_current at the time the function
+ * was hooked (usually the source file implementing the hook function).
+ * @param args The argument list to the hook functions, with enclosing
+ * parens.
+ */
+#define APR_HOOK_PROBE_INVOKE(ud,ns,name,src,args)
+/**
+ * User-defined hook probe macro that is invoked after calling a
+ * hook function.
+ * @param ud A void * user data field that was filled in by the user-
+ * provided APR_HOOK_PROBE_ENTRY().
+ * @param ns The namespace prefix of the hook functions
+ * @param name The name of the hook
+ * @param src The value of apr_hook_debug_current at the time the function
+ * was hooked (usually the source file implementing the hook function).
+ * @param rv The return value of the hook function, or 0 if the hook is void.
+ * @param args The argument list to the hook functions, with enclosing
+ * parens.
+ */
+#define APR_HOOK_PROBE_COMPLETE(ud,ns,name,src,rv,args)
+#endif
+
+/** @} */
+
 /** macro to return the prototype of the hook function */    
 #define APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \
 link##_DECLARE(apr_array_header_t *) ns##_hook_get_##name(void)
@@ -106,13 +182,23 @@
     { \
     ns##_LINK_##name##_t *pHook; \
     int n; \
+    APR_HOOK_INT_DCL_UD; \
 \
-    if(!_hooks.link_##name) \
-	return; \
+    APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \
+\
+    if(_hooks.link_##name) \
+        { \
+        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
+        for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
+            { \
+            APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \
+	    pHook[n].pFunc args_use; \
+            APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, 0, args_use); \
+            } \
+        } \
+\
+    APR_HOOK_PROBE_RETURN(ud, ns, name, 0, args_use); \
 \
-    pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
-    for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
-	pHook[n].pFunc args_use; \
     }
 
 /* FIXME: note that this returns ok when nothing is run. I suspect it should
@@ -139,20 +225,28 @@
     { \
     ns##_LINK_##name##_t *pHook; \
     int n; \
-    ret rv; \
+    ret rv = ok; \
+    APR_HOOK_INT_DCL_UD; \
 \
-    if(!_hooks.link_##name) \
-	return ok; \
+    APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \
 \
-    pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
-    for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
-	{ \
-	rv=pHook[n].pFunc args_use; \
+    if(_hooks.link_##name) \
+        { \
+        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
+        for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
+            { \
+            APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \
+            rv=pHook[n].pFunc args_use; \
+            APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, rv, args_use); \
+            if(rv != ok && rv != decline) \
+                break; \
+            rv = ok; \
+            } \
+        } \
 \
-	if(rv != ok && rv != decline) \
-	    return rv; \
-	} \
-    return ok; \
+    APR_HOOK_PROBE_RETURN(ud, ns, name, rv, args_use); \
+\
+    return rv; \
     }
 
 
@@ -176,20 +270,28 @@
     { \
     ns##_LINK_##name##_t *pHook; \
     int n; \
-    ret rv; \
+    ret rv = decline; \
+    APR_HOOK_INT_DCL_UD; \
 \
-    if(!_hooks.link_##name) \
-	return decline; \
+    APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \
 \
-    pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
-    for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
-	{ \
-	rv=pHook[n].pFunc args_use; \
+    if(_hooks.link_##name) \
+        { \
+        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
+        for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
+            { \
+            APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \
+            rv=pHook[n].pFunc args_use; \
+            APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, rv, args_use); \
 \
-	if(rv != decline) \
-	    return rv; \
-	} \
-    return decline; \
+            if(rv != decline) \
+                break; \
+            } \
+        } \
+\
+    APR_HOOK_PROBE_RETURN(ud, ns, name, rv, args_use); \
+\
+    return rv; \
     }
 
     /* Hook orderings */

Modified: trunk/GME/Include/apr-util/apr_ldap.h.in
==============================================================================
--- trunk/GME/Include/apr-util/apr_ldap.h.in	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apr_ldap.h.in	Tue May 21 15:37:55 2013	(r2202)
@@ -192,6 +192,6 @@
 #include "apr_ldap_option.h"
 #include "apr_ldap_rebind.h"
 
-/** @} */
 #endif /* APR_HAS_LDAP */
+/** @} */
 #endif /* APU_LDAP_H */

Modified: trunk/GME/Include/apr-util/apr_md5.h
==============================================================================
--- trunk/GME/Include/apr-util/apr_md5.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apr_md5.h	Tue May 21 15:37:55 2013	(r2202)
@@ -132,16 +132,30 @@
 /**
  * Encode a password using an MD5 algorithm
  * @param password The password to encode
- * @param salt The salt to use for the encoding
+ * @param salt The salt string to use for the encoding
  * @param result The string to store the encoded password in
  * @param nbytes The size of the result buffer
  */
 APU_DECLARE(apr_status_t) apr_md5_encode(const char *password, const char *salt,
                                          char *result, apr_size_t nbytes);
 
+/**
+ * Encode a password using the bcrypt algorithm
+ * @param password The password to encode
+ * @param count The cost of the encoding, possible values are 4 to 31
+ * @param salt Pointer to binary data to be used as salt for the encoding
+ * @param salt_len The size of the salt data (must be >= 16)
+ * @param out The string to store the encoded password in
+ * @param out_len The size of the result buffer (must be >= 61)
+ */
+APU_DECLARE(apr_status_t) apr_bcrypt_encode(const char *pw,
+                                            unsigned int count,
+                                            const unsigned char *salt,
+                                            apr_size_t salt_len,
+                                            char *out, apr_size_t out_len);
 
 /**
- * Validate hashes created by APR-supported algorithms: md5 and sha1.
+ * Validate hashes created by APR-supported algorithms: md5, bcrypt, and sha1.
  * hashes created by crypt are supported only on platforms that provide
  * crypt(3), so don't rely on that function unless you know that your
  * application will be run only on platforms that support it.  On platforms

Modified: trunk/GME/Include/apr-util/apr_memcache.h
==============================================================================
--- trunk/GME/Include/apr-util/apr_memcache.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apr_memcache.h	Tue May 21 15:37:55 2013	(r2202)
@@ -120,6 +120,7 @@
 
 /**
  * Creates a crc32 hash used to split keys between servers
+ * @param mc The memcache client object to use
  * @param data Data to be hashed
  * @param data_len Length of the data to use
  * @return crc32 hash of data
@@ -150,21 +151,20 @@
  * @return server that controls specified hash
  * @see apr_memcache_hash
  */
-APU_DECLARE(apr_memcache_server_t *) apr_memcache_find_server_hash(apr_memcache_t *mc, 
+APU_DECLARE(apr_memcache_server_t *) apr_memcache_find_server_hash(apr_memcache_t *mc,
                                                                    const apr_uint32_t hash);
 
 /**
  * server selection compatible with the standard Perl Client.
  */
-APU_DECLARE(apr_memcache_server_t *)
-apr_memcache_find_server_hash_default(void *baton,
-                                      apr_memcache_t *mc, 
-                                      const apr_uint32_t hash);
+APU_DECLARE(apr_memcache_server_t *) apr_memcache_find_server_hash_default(void *baton,
+                                                                           apr_memcache_t *mc, 
+                                                                           const apr_uint32_t hash);
 
 /**
  * Adds a server to a client object
  * @param mc The memcache client object to use
- * @param ms Server to add
+ * @param server Server to add
  * @remark Adding servers is not thread safe, and should be done once at startup.
  * @warning Changing servers after startup may cause keys to go to
  * different servers.
@@ -267,7 +267,7 @@
 /**
  * Gets multiple values from the server, allocating the values out of p
  * @param mc client to use
- * @param temp_pool Pool used for tempoary allocations. May be cleared inside this
+ * @param temp_pool Pool used for temporary allocations. May be cleared inside this
  *        call.
  * @param data_pool Pool used to allocate data for the returned values.
  * @param values hash of apr_memcache_value_t keyed by strings, contains the
@@ -284,7 +284,7 @@
  * @param mc client to use
  * @param key   null terminated string containing the key
  * @param baton data to store on the server
- * @param len   length of data at baton
+ * @param data_size   length of data at baton
  * @param timeout time in seconds for the data to live on the server
  * @param flags any flags set by the client for this key
  */
@@ -300,7 +300,7 @@
  * @param mc client to use
  * @param key   null terminated string containing the key
  * @param baton data to store on the server
- * @param len   length of data at baton
+ * @param data_size   length of data at baton
  * @param timeout time for the data to live on the server
  * @param flags any flags set by the client for this key
  * @return APR_SUCCESS if the key was added, APR_EEXIST if the key 
@@ -318,7 +318,7 @@
  * @param mc client to use
  * @param key   null terminated string containing the key
  * @param baton data to store on the server
- * @param len   length of data at baton
+ * @param data_size   length of data at baton
  * @param timeout time for the data to live on the server
  * @param flags any flags set by the client for this key
  * @return APR_SUCCESS if the key was added, APR_EEXIST if the key 
@@ -326,7 +326,7 @@
  */
 APU_DECLARE(apr_status_t) apr_memcache_replace(apr_memcache_t *mc,
                                                const char *key,
-                                               char *data,
+                                               char *baton,
                                                const apr_size_t data_size,
                                                apr_uint32_t timeout,
                                                apr_uint16_t flags);
@@ -345,7 +345,7 @@
  * @param mc client to use
  * @param key   null terminated string containing the key
  * @param n     number to increment by
- * @param nv    new value after incrmenting
+ * @param nv    new value after incrementing
  */
 APU_DECLARE(apr_status_t) apr_memcache_incr(apr_memcache_t *mc, 
                                             const char *key,
@@ -357,7 +357,7 @@
  * @param mc client to use
  * @param key   null terminated string containing the key
  * @param n     number to decrement by
- * @param nv    new value after decrementing
+ * @param new_value    new value after decrementing
  */
 APU_DECLARE(apr_status_t) apr_memcache_decr(apr_memcache_t *mc, 
                                             const char *key,

Modified: trunk/GME/Include/apr-util/apr_queue.h
==============================================================================
--- trunk/GME/Include/apr-util/apr_queue.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apr_queue.h	Tue May 21 15:37:55 2013	(r2202)
@@ -98,7 +98,7 @@
  * @returns APR_EINTR the blocking operation was interrupted (try again)
  * @returns APR_EAGAIN the queue is empty
  * @returns APR_EOF the queue has been terminated
- * @returns APR_SUCCESS on a successful push
+ * @returns APR_SUCCESS on a successful pop
  */
 APU_DECLARE(apr_status_t) apr_queue_trypop(apr_queue_t *queue, void **data);
 

Modified: trunk/GME/Include/apr-util/apr_reslist.h
==============================================================================
--- trunk/GME/Include/apr-util/apr_reslist.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apr_reslist.h	Tue May 21 15:37:55 2013	(r2202)
@@ -28,15 +28,10 @@
 #include "apr_errno.h"
 #include "apr_time.h"
 
-#if APR_HAS_THREADS
-
 /**
  * @defgroup APR_Util_RL Resource List Routines
  * @ingroup APR_Util
  * @{
- * @warning
- * <strong><em>Resource list data types and routines are only available when
- * threads are enabled (i.e. APR_HAS_THREADS is not zero).</em></strong>
  */
 
 #ifdef __cplusplus
@@ -64,32 +59,32 @@
 typedef apr_status_t (*apr_reslist_destructor)(void *resource, void *params,
                                                apr_pool_t *pool);
 
+/* Cleanup order modes */
+#define APR_RESLIST_CLEANUP_DEFAULT  0       /**< default pool cleanup */
+#define APR_RESLIST_CLEANUP_FIRST    1       /**< use pool pre cleanup */
+
 /**
  * Create a new resource list with the following parameters:
  * @param reslist An address where the pointer to the new resource
  *                list will be stored.
  * @param min Allowed minimum number of available resources. Zero
  *            creates new resources only when needed.
- * @param smax Resources will be destroyed to meet this maximum
- *             restriction as they expire.
+ * @param smax Resources will be destroyed during reslist maintenance to
+ *             meet this maximum restriction as they expire (reach their ttl).
  * @param hmax Absolute maximum limit on the number of total resources.
- * @param ttl If non-zero, sets the maximum amount of time in microseconds a
- *            resource may be available while exceeding the soft limit.
+ * @param ttl If non-zero, sets the maximum amount of time in microseconds an
+ *            unused resource is valid.  Any resource which has exceeded this
+ *            time will be destroyed, either when encountered by
+ *            apr_reslist_acquire() or during reslist maintenance.
  * @param con Constructor routine that is called to create a new resource.
  * @param de Destructor routine that is called to destroy an expired resource.
  * @param params Passed to constructor and deconstructor
  * @param pool The pool from which to create this resource list. Also the
  *             same pool that is passed to the constructor and destructor
  *             routines.
- * @warning If you're creating a sub-pool of the pool passed into this
- *          function in your constructor, you will need to follow some rules
- *          when it comes to destruction of that sub-pool, as calling
- *          apr_pool_destroy() outright on it in your destructor may create
- *          double free situations. That is because by the time destructor is
- *          called, the sub-pool may have already been destroyed. This also
- *          means that in the destructor, memory from the sub-pool should be
- *          treated as invalid. For examples of how to do this correctly, see
- *          mod_dbd of Apache 2.2 and memcache support in APR Util 1.3.
+ * @remark If APR has been compiled without thread support, hmax will be
+ *         automatically set to 1 and values of min and smax will be forced to
+ *         1 for any non-zero value.
  */
 APU_DECLARE(apr_status_t) apr_reslist_create(apr_reslist_t **reslist,
                                              int min, int smax, int hmax,
@@ -149,6 +144,28 @@
 APU_DECLARE(apr_status_t) apr_reslist_invalidate(apr_reslist_t *reslist,
                                                  void *resource);
 
+/**
+ * Perform routine maintenance on the resource list. This call
+ * may instantiate new resources or expire old resources.
+ * @param reslist The resource list.
+ */
+APU_DECLARE(apr_status_t) apr_reslist_maintain(apr_reslist_t *reslist);
+
+/**
+ * Set reslist cleanup order.
+ * @param reslist The resource list.
+ * @param mode Cleanup order mode
+ * <PRE>
+ *           APR_RESLIST_CLEANUP_DEFAULT  default pool cleanup order
+ *           APR_RESLIST_CLEANUP_FIRST    use pool pre cleanup
+ * </PRE>
+ * @remark If APR_RESLIST_CLEANUP_FIRST is used the destructors will
+ * be called before child pools of the pool used to create the reslist
+ * are destroyed. This allows to explicitly destroy the child pools
+ * inside reslist destructors.
+ */
+APU_DECLARE(void) apr_reslist_cleanup_order_set(apr_reslist_t *reslist,
+                                                apr_uint32_t mode);
 
 #ifdef __cplusplus
 }
@@ -156,6 +173,4 @@
 
 /** @} */
 
-#endif  /* APR_HAS_THREADS */
-
 #endif  /* ! APR_RESLIST_H */

Modified: trunk/GME/Include/apr-util/apr_xml.h
==============================================================================
--- trunk/GME/Include/apr-util/apr_xml.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apr_xml.h	Tue May 21 15:37:55 2013	(r2202)
@@ -218,7 +218,7 @@
  * Parse a File, producing a xml_doc
  * @param p      The pool for allocating the parse results.
  * @param parser A pointer to *parser (needed so calling function can get
- *               errors), will be set to NULL on successfull completion.
+ *               errors), will be set to NULL on successful completion.
  * @param ppdoc  A pointer to *apr_xml_doc (which has the parsed results in it)
  * @param xmlfd  A file to read from.
  * @param buffer_length Buffer length which would be suitable 
@@ -304,10 +304,10 @@
 
 /**
  * quote an XML string
- * Replace '<', '>', and '&' with '&lt;', '&gt;', and '&amp;'.
+ * Replace '\<', '\>', and '\&' with '\&lt;', '\&gt;', and '\&amp;'.
  * @param p The pool to allocate out of
  * @param s The string to quote
- * @param quotes If quotes is true, then replace '"' with '&quot;'.
+ * @param quotes If quotes is true, then replace '&quot;' with '\&quot;'.
  * @return The quoted string
  * @note If the string does not contain special characters, it is not
  * duplicated into the pool and the original string is returned.

Modified: trunk/GME/Include/apr-util/apu.h
==============================================================================
--- trunk/GME/Include/apr-util/apu.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apu.h	Tue May 21 15:37:55 2013	(r2202)
@@ -125,6 +125,13 @@
 #define APU_HAVE_ODBC           1
 #endif
 
+#define APU_HAVE_CRYPTO         0
+
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_OPENSSL        0
+#define APU_HAVE_NSS            0
+#endif
+
 #define APU_HAVE_APR_ICONV      1
 #define APU_HAVE_ICONV          0
 #define APR_HAS_XLATE           (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)

Modified: trunk/GME/Include/apr-util/apu.h.in
==============================================================================
--- trunk/GME/Include/apr-util/apu.h.in	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apu.h.in	Tue May 21 15:37:55 2013	(r2202)
@@ -42,6 +42,7 @@
  * conventions at compile time.
  */
 
+#if defined(DOXYGEN) || !defined(WIN32)
 /**
  * The public APR-UTIL functions are declared with APU_DECLARE(), so they may
  * use the most appropriate calling convention.  Public APR functions with 
@@ -66,6 +67,19 @@
  * declarations within headers to properly import the variable.
  */
 #define APU_DECLARE_DATA
+#elif defined(APU_DECLARE_STATIC)
+#define APU_DECLARE(type)            type __stdcall
+#define APU_DECLARE_NONSTD(type)     type __cdecl
+#define APU_DECLARE_DATA
+#elif defined(APU_DECLARE_EXPORT)
+#define APU_DECLARE(type)            __declspec(dllexport) type __stdcall
+#define APU_DECLARE_NONSTD(type)     __declspec(dllexport) type __cdecl
+#define APU_DECLARE_DATA             __declspec(dllexport)
+#else
+#define APU_DECLARE(type)            __declspec(dllimport) type __stdcall
+#define APU_DECLARE_NONSTD(type)     __declspec(dllimport) type __cdecl
+#define APU_DECLARE_DATA             __declspec(dllimport)
+#endif
 
 #if !defined(WIN32) || defined(APU_MODULE_DECLARE_STATIC)
 /**
@@ -102,6 +116,10 @@
 #define APU_HAVE_FREETDS       @apu_have_freetds@
 #define APU_HAVE_ODBC          @apu_have_odbc@
 
+#define APU_HAVE_CRYPTO        @apu_have_crypto@
+#define APU_HAVE_OPENSSL       @apu_have_openssl@
+#define APU_HAVE_NSS           @apu_have_nss@
+
 #define APU_HAVE_APR_ICONV     @have_apr_iconv@
 #define APU_HAVE_ICONV         @have_iconv@
 #define APR_HAS_XLATE          (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)

Modified: trunk/GME/Include/apr-util/apu.hnw
==============================================================================
--- trunk/GME/Include/apr-util/apu.hnw	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apu.hnw	Tue May 21 15:37:55 2013	(r2202)
@@ -108,6 +108,13 @@
 #define APU_HAVE_ODBC           0
 #endif
 
+#define APU_HAVE_CRYPTO         0
+
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_OPENSSL        0
+#define APU_HAVE_NSS            0
+#endif
+
 #define APU_HAVE_APR_ICONV      0
 #define APU_HAVE_ICONV          1
 #define APR_HAS_XLATE           (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)

Modified: trunk/GME/Include/apr-util/apu.hw
==============================================================================
--- trunk/GME/Include/apr-util/apu.hw	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apu.hw	Tue May 21 15:37:55 2013	(r2202)
@@ -125,6 +125,13 @@
 #define APU_HAVE_ODBC           1
 #endif
 
+#define APU_HAVE_CRYPTO         0
+
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_OPENSSL        0
+#define APU_HAVE_NSS            0
+#endif
+
 #define APU_HAVE_APR_ICONV      1
 #define APU_HAVE_ICONV          0
 #define APR_HAS_XLATE           (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)

Added: trunk/GME/Include/apr-util/apu_errno.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/GME/Include/apr-util/apu_errno.h	Tue May 21 15:37:55 2013	(r2202)
@@ -0,0 +1,173 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef APU_ERRNO_H
+#define APU_ERRNO_H
+
+/**
+ * @file apu_errno.h
+ * @brief APR-Util Error Codes
+ */
+
+#include "apr.h"
+#include "apr_errno.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apu_errno Error Codes
+ * @ingroup APR_Util
+ * @{
+ */
+
+/**
+ * @defgroup APR_Util_Error APR_Util Error Values
+ * <PRE>
+ * <b>APU ERROR VALUES</b>
+ * APR_ENOKEY         The key provided was empty or NULL
+ * APR_ENOIV          The initialisation vector provided was NULL
+ * APR_EKEYTYPE       The key type was not recognised
+ * APR_ENOSPACE       The buffer supplied was not big enough
+ * APR_ECRYPT         An error occurred while encrypting or decrypting
+ * APR_EPADDING       Padding was not supported
+ * APR_EKEYLENGTH     The key length was incorrect
+ * APR_ENOCIPHER      The cipher provided was not recognised
+ * APR_ENODIGEST      The digest provided was not recognised
+ * APR_ENOENGINE      The engine provided was not recognised
+ * APR_EINITENGINE    The engine could not be initialised
+ * APR_EREINIT        Underlying crypto has already been initialised
+ * </PRE>
+ *
+ * <PRE>
+ * <b>APR STATUS VALUES</b>
+ * APR_INCHILD        Program is currently executing in the child
+ * </PRE>
+ * @{
+ */
+/** @see APR_STATUS_IS_ENOKEY */
+#define APR_ENOKEY           (APR_UTIL_START_STATUS + 1)
+/** @see APR_STATUS_IS_ENOIV */
+#define APR_ENOIV            (APR_UTIL_START_STATUS + 2)
+/** @see APR_STATUS_IS_EKEYTYPE */
+#define APR_EKEYTYPE         (APR_UTIL_START_STATUS + 3)
+/** @see APR_STATUS_IS_ENOSPACE */
+#define APR_ENOSPACE         (APR_UTIL_START_STATUS + 4)
+/** @see APR_STATUS_IS_ECRYPT */
+#define APR_ECRYPT           (APR_UTIL_START_STATUS + 5)
+/** @see APR_STATUS_IS_EPADDING */
+#define APR_EPADDING         (APR_UTIL_START_STATUS + 6)
+/** @see APR_STATUS_IS_EKEYLENGTH */
+#define APR_EKEYLENGTH       (APR_UTIL_START_STATUS + 7)
+/** @see APR_STATUS_IS_ENOCIPHER */
+#define APR_ENOCIPHER        (APR_UTIL_START_STATUS + 8)
+/** @see APR_STATUS_IS_ENODIGEST */
+#define APR_ENODIGEST        (APR_UTIL_START_STATUS + 9)
+/** @see APR_STATUS_IS_ENOENGINE */
+#define APR_ENOENGINE        (APR_UTIL_START_STATUS + 10)
+/** @see APR_STATUS_IS_EINITENGINE */
+#define APR_EINITENGINE      (APR_UTIL_START_STATUS + 11)
+/** @see APR_STATUS_IS_EREINIT */
+#define APR_EREINIT          (APR_UTIL_START_STATUS + 12)
+/** @} */
+
+/**
+ * @defgroup APU_STATUS_IS Status Value Tests
+ * @warning For any particular error condition, more than one of these tests
+ *      may match. This is because platform-specific error codes may not
+ *      always match the semantics of the POSIX codes these tests (and the
+ *      corresponding APR error codes) are named after. A notable example
+ *      are the APR_STATUS_IS_ENOENT and APR_STATUS_IS_ENOTDIR tests on
+ *      Win32 platforms. The programmer should always be aware of this and
+ *      adjust the order of the tests accordingly.
+ * @{
+ */
+
+/** @} */
+
+/**
+ * @addtogroup APR_Util_Error
+ * @{
+ */
+/**
+ * The key was empty or not provided
+ */
+#define APR_STATUS_IS_ENOKEY(s)        ((s) == APR_ENOKEY)
+/**
+ * The initialisation vector was not provided
+ */
+#define APR_STATUS_IS_ENOIV(s)        ((s) == APR_ENOIV)
+/**
+ * The key type was not recognised
+ */
+#define APR_STATUS_IS_EKEYTYPE(s)        ((s) == APR_EKEYTYPE)
+/**
+ * The buffer provided was not big enough
+ */
+#define APR_STATUS_IS_ENOSPACE(s)        ((s) == APR_ENOSPACE)
+/**
+ * An error occurred while encrypting or decrypting
+ */
+#define APR_STATUS_IS_ECRYPT(s)        ((s) == APR_ECRYPT)
+/**
+ * An error occurred while padding
+ */
+#define APR_STATUS_IS_EPADDING(s)        ((s) == APR_EPADDING)
+/**
+ * An error occurred with the key length
+ */
+#define APR_STATUS_IS_EKEYLENGTH(s)        ((s) == APR_EKEYLENGTH)
+/**
+ * The cipher provided was not recognised
+ */
+#define APR_STATUS_IS_ENOCIPHER(s)        ((s) == APR_ENOCIPHER)
+/**
+ * The digest provided was not recognised
+ */
+#define APR_STATUS_IS_ENODIGEST(s)        ((s) == APR_ENODIGEST)
+/**
+ * The engine provided was not recognised
+ */
+#define APR_STATUS_IS_ENOENGINE(s)        ((s) == APR_ENOENGINE)
+/**
+ * The engine could not be initialised
+ */
+#define APR_STATUS_IS_EINITENGINE(s)        ((s) == APR_EINITENGINE)
+/**
+ * Crypto has already been initialised
+ */
+#define APR_STATUS_IS_EREINIT(s)        ((s) == APR_EREINIT)
+/** @} */
+
+/**
+ * This structure allows the underlying API error codes to be returned
+ * along with plain text error messages that explain to us mere mortals
+ * what really happened.
+ */
+typedef struct apu_err_t {
+    const char *reason;
+    const char *msg;
+    int rc;
+} apu_err_t;
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ! APU_ERRNO_H */

Modified: trunk/GME/Include/apr-util/apu_version.h
==============================================================================
--- trunk/GME/Include/apr-util/apu_version.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr-util/apu_version.h	Tue May 21 15:37:55 2013	(r2202)
@@ -53,20 +53,20 @@
  * Minor API changes that do not cause binary compatibility problems.
  * Reset to 0 when upgrading APU_MAJOR_VERSION
  */
-#define APU_MINOR_VERSION       3
+#define APU_MINOR_VERSION       5
 
 /** patch level 
  * The Patch Level never includes API changes, simply bug fixes.
  * Reset to 0 when upgrading APR_MINOR_VERSION
  */
-#define APU_PATCH_VERSION       9
+#define APU_PATCH_VERSION       2
 
 /** 
  * The symbol APU_IS_DEV_VERSION is only defined for internal,
  * "development" copies of APU.  It is undefined for released versions
  * of APU.
  */
-/* #undef APU_IS_DEV_VERSION */
+/* #define APU_IS_DEV_VERSION */
 
 
 #if defined(APU_IS_DEV_VERSION) || defined(DOXYGEN)

Modified: trunk/GME/Include/apr/apr.h
==============================================================================
--- trunk/GME/Include/apr/apr.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr.h	Tue May 21 15:37:55 2013	(r2202)
@@ -282,6 +282,7 @@
 #define APR_HAVE_SIGACTION      0
 #define APR_HAVE_SIGSUSPEND     0
 #define APR_HAVE_SIGWAIT        0
+#define APR_HAVE_SA_STORAGE     0
 #define APR_HAVE_STRCASECMP     0
 #define APR_HAVE_STRDUP         1
 #define APR_HAVE_STRNCASECMP    0

Modified: trunk/GME/Include/apr/apr.h.in
==============================================================================
--- trunk/GME/Include/apr/apr.h.in	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr.h.in	Tue May 21 15:37:55 2013	(r2202)
@@ -63,10 +63,10 @@
 #define __attribute__(__x)
 #endif
 #define APR_INLINE
-#define APR_HAS_INLINE		0
+#define APR_HAS_INLINE           0
 #else
 #define APR_INLINE __inline__
-#define APR_HAS_INLINE		1
+#define APR_HAS_INLINE           1
 #endif
 
 #define APR_HAVE_ARPA_INET_H     @arpa_ineth@
@@ -83,6 +83,7 @@
 #define APR_HAVE_NETINET_SCTP_H  @netinet_sctph@
 #define APR_HAVE_NETINET_SCTP_UIO_H @netinet_sctp_uioh@
 #define APR_HAVE_NETINET_TCP_H   @netinet_tcph@
+#define APR_HAVE_PROCESS_H       @processh@
 #define APR_HAVE_PTHREAD_H       @pthreadh@
 #define APR_HAVE_SEMAPHORE_H     @semaphoreh@
 #define APR_HAVE_SIGNAL_H        @signalh@
@@ -116,13 +117,49 @@
  */
 
 #if APR_HAVE_WINDOWS_H
-#include <windows.h>
+/* If windows.h was already included, our preferences don't matter.
+ * If not, include a restricted set of windows headers to our tastes.
+ */
+#ifndef _WINDOWS_
+
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
 #endif
 
-#if APR_HAVE_WINSOCK2_H
+#ifndef _WIN32_WINNT
+/* Restrict the server to a subset of Windows XP header files by default
+ */
+#define _WIN32_WINNT 0x0501
+#endif
+
+#ifndef NOUSER
+#define NOUSER
+#endif
+#ifndef NOMCX
+#define NOMCX
+#endif
+#ifndef NOIME
+#define NOIME
+#endif
+
+#include <windows.h>
+/* 
+ * Add a _very_few_ declarations missing from the restricted set of headers
+ * (If this list becomes extensive, re-enable the required headers above!)
+ * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
+ */
+#define SW_HIDE             0
+#ifndef _WIN32_WCE
 #include <winsock2.h>
+#include <ws2tcpip.h>
+#include <mswsock.h>
+#else
+#include <winsock.h>
 #endif
 
+#endif /* ndef _WINDOWS_ */
+#endif /* APR_HAVE_WINDOWS_H */
+
 #if APR_HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
@@ -238,12 +275,12 @@
 #define APR_HAS_SO_ACCEPTFILTER   @acceptfilter@
 #define APR_HAS_UNICODE_FS        @have_unicode_fs@
 #define APR_HAS_PROC_INVOKED      @have_proc_invoked@
-#define APR_HAS_USER              1
+#define APR_HAS_USER              @apr_has_user@
 #define APR_HAS_LARGE_FILES       @aprlfs@
-#define APR_HAS_XTHREAD_FILES     0
+#define APR_HAS_XTHREAD_FILES     @apr_has_xthread_files@
 #define APR_HAS_OS_UUID           @osuuid@
 
-#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0
+#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD @apr_procattr_user_set_requires_password@
 
 /* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible
  * to poll on files/pipes.
@@ -277,8 +314,44 @@
 typedef  @int_value@             apr_int32_t;
 typedef  unsigned @int_value@    apr_uint32_t;
 
-typedef  @long_value@            apr_int64_t;
-typedef  unsigned @long_value@   apr_uint64_t;
+#define APR_SIZEOF_VOIDP @voidp_size@
+
+/*
+ * Darwin 10's default compiler (gcc42) builds for both 64 and
+ * 32 bit architectures unless specifically told not to.
+ * In those cases, we need to override types depending on how
+ * we're being built at compile time.
+ * NOTE: This is an ugly work-around for Darwin's
+ * concept of universal binaries, a single package
+ * (executable, lib, etc...) which contains both 32
+ * and 64 bit versions. The issue is that if APR is
+ * built universally, if something else is compiled
+ * against it, some bit sizes will depend on whether
+ * it is 32 or 64 bit. This is determined by the __LP64__
+ * flag. Since we need to support both, we have to
+ * handle OS X unqiuely.
+ */
+#ifdef DARWIN_10
+#undef APR_SIZEOF_VOIDP
+#undef INT64_C
+#undef UINT64_C
+#ifdef __LP64__
+ typedef  long            apr_int64_t;
+ typedef  unsigned long   apr_uint64_t;
+ #define APR_SIZEOF_VOIDP     8
+ #define INT64_C(v)   (v ## L)
+ #define UINT64_C(v)  (v ## UL)
+#else
+ typedef  long long            apr_int64_t;
+ typedef  unsigned long long   apr_uint64_t;
+ #define APR_SIZEOF_VOIDP     4
+ #define INT64_C(v)   (v ## LL)
+ #define UINT64_C(v)  (v ## ULL)
+#endif
+#else
+ typedef  @long_value@            apr_int64_t;
+ typedef  unsigned @long_value@   apr_uint64_t;
+#endif
 
 typedef  @size_t_value@          apr_size_t;
 typedef  @ssize_t_value@         apr_ssize_t;
@@ -286,8 +359,6 @@
 typedef  @socklen_t_value@       apr_socklen_t;
 typedef  @ino_t_value@           apr_ino_t;
 
-#define APR_SIZEOF_VOIDP @voidp_size@
-
 #if APR_SIZEOF_VOIDP == 8
 typedef  apr_uint64_t            apr_uintptr_t;
 #else
@@ -380,7 +451,7 @@
  *
  * </PRE>
  */
-#define APR_THREAD_FUNC
+#define APR_THREAD_FUNC       @apr_thread_func@
 
 /**
  * The public APR functions are declared with APR_DECLARE(), so they may
@@ -442,6 +513,7 @@
  * to find the logic for this definition search for "ssize_t_fmt" in
  * configure.in.
  */
+
 @ssize_t_fmt@
 
 /* And APR_SIZE_T_FMT */
@@ -462,6 +534,43 @@
 /* And APR_UINT64_T_HEX_FMT */
 @uint64_t_hex_fmt@
 
+/*
+ * Ensure we work with universal binaries on Darwin
+ */
+#ifdef DARWIN_10
+
+#undef APR_HAS_LARGE_FILES
+#undef APR_SIZEOF_VOIDP
+#undef APR_INT64_T_FMT
+#undef APR_UINT64_T_FMT
+#undef APR_UINT64_T_HEX_FMT
+
+#ifdef __LP64__
+ #define APR_HAS_LARGE_FILES  0
+ #define APR_SIZEOF_VOIDP     8
+ #define APR_INT64_T_FMT      "ld"
+ #define APR_UINT64_T_FMT     "lu"
+ #define APR_UINT64_T_HEX_FMT "lx"
+#else
+ #define APR_HAS_LARGE_FILES  1
+ #define APR_SIZEOF_VOIDP     4
+ #define APR_INT64_T_FMT      "lld"
+ #define APR_UINT64_T_FMT     "llu"
+ #define APR_UINT64_T_HEX_FMT "llx"
+#endif
+
+#undef APR_IS_BIGENDIAN
+#ifdef __BIG_ENDIAN__
+ #define APR_IS_BIGENDIAN	1
+#else
+ #define APR_IS_BIGENDIAN	0
+#endif
+
+#undef APR_OFF_T_FMT
+#define APR_OFF_T_FMT "lld"
+
+#endif /* DARWIN_10 */
+
 /* Does the proc mutex lock threads too */
 #define APR_PROC_MUTEX_IS_GLOBAL      @proc_mutex_is_global@
 

Modified: trunk/GME/Include/apr/apr.hnw
==============================================================================
--- trunk/GME/Include/apr/apr.hnw	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr.hnw	Tue May 21 15:37:55 2013	(r2202)
@@ -25,19 +25,20 @@
  * And please, make an effort to stub apr.hw and apr.h.in in the process.
  *
  * This is the NetWare specific version of apr.h.  It is copied from
- * apr.hnw at the start of a NetWare build by prebuildNW.bat. 
+ * apr.hnw at the start of a NetWare build by the ./build/NWGNmakefile.
  */
 
 /**
  * @file apr.h
  * @brief APR Platform Definitions
  * @remark This is a generated header generated from include/apr.h.in by
- * ./configure, or copied from include/apr.hw or include/apr.hnw 
+ * ./configure, or copied from include/apr.hw or include/apr.hnw
  * for Win32 or Netware by those build environments, respectively.
  */
 
 #if defined(NETWARE) || defined(DOXYGEN)
 
+#undef  FD_SETSIZE
 #define FD_SETSIZE 1024
 
 #include <sys/types.h>
@@ -48,21 +49,22 @@
 #include <stdlib.h>
 #include <string.h>
 #include <limits.h>
+#include <netware.h>
 #include <nks/thread.h>
 #include <nks/synch.h>
 #include <nks/time.h>
 #include <signal.h>
 #ifdef USE_WINSOCK
 #include <novsock2.h>
+#ifdef NW_BUILD_IPV6
+#include <novtcpip.h>
+#endif
 #else
 #include <sys/socket.h>
+#include <sys/select.h>
 #endif
 #include <sys/types.h>
 
-#ifdef NW_BUILD_IPV6
-#include <novtcpip.h>
-#endif
-
 #define _POSIX_THREAD_SAFE_FUNCTIONS    1
 #define READDIR_IS_THREAD_SAFE          1
 
@@ -74,161 +76,161 @@
 
 /**
  * @defgroup apr_platform Platform Definitions
- * @ingroup APR 
+ * @ingroup APR
  * @{
  */
 
-#define APR_INLINE 
-#define APR_HAS_INLINE		0
+#define APR_INLINE
+#define APR_HAS_INLINE                  0
 #ifndef __attribute__
 #define __attribute__(__x)
 #endif
 #define ENUM_BITFIELD(e,n,w)  signed int n : w
 
-#define APR_HAVE_CONIO_H        0
-#define APR_HAVE_CRYPT_H        0
-#define APR_HAVE_CTYPE_H        1
-#define APR_HAVE_DIRENT_H       1
-#define APR_HAVE_ERRNO_H        1
-#define APR_HAVE_FCNTL_H        1
-#define APR_HAVE_IO_H           0
-#define APR_HAVE_LIMITS_H       1
+#define APR_HAVE_CONIO_H                0
+#define APR_HAVE_CRYPT_H                0
+#define APR_HAVE_CTYPE_H                1
+#define APR_HAVE_DIRENT_H               1
+#define APR_HAVE_ERRNO_H                1
+#define APR_HAVE_FCNTL_H                1
+#define APR_HAVE_IO_H                   0
+#define APR_HAVE_LIMITS_H               1
 #ifdef USE_WINSOCK
-#define APR_HAVE_ARPA_INET_H    0
-#define APR_HAVE_NETDB_H        0
-#define APR_HAVE_NETINET_IN_H   0
-#else
-#define APR_HAVE_ARPA_INET_H    1
-#define APR_HAVE_NETDB_H        1
-#define APR_HAVE_NETINET_IN_H   1
-#endif
-#define APR_HAVE_NETINET_SCTP_H 0
-#define APR_HAVE_NETINET_SCTP_UIO_H 0
-#define APR_HAVE_NETINET_TCP_H  0
-#define APR_HAVE_PTHREAD_H      0
-#define APR_HAVE_SIGNAL_H       1
-#define APR_HAVE_STDARG_H       1
-#define APR_HAVE_STDINT_H       0
-#define APR_HAVE_STDIO_H        1
-#define APR_HAVE_STDLIB_H       1
-#define APR_HAVE_STRING_H       1
-#define APR_HAVE_STRINGS_H      0
-#define APR_HAVE_STRTOLL	1
-#define APR_HAVE_SYS_SENDFILE_H 0
-#define APR_HAVE_SYS_SYSLIMITS_H 0
+#define APR_HAVE_ARPA_INET_H            0
+#define APR_HAVE_NETDB_H                0
+#define APR_HAVE_NETINET_IN_H           0
+#else
+#define APR_HAVE_ARPA_INET_H            1
+#define APR_HAVE_NETDB_H                1
+#define APR_HAVE_NETINET_IN_H           1
+#endif
+#define APR_HAVE_NETINET_SCTP_H         0
+#define APR_HAVE_NETINET_SCTP_UIO_H     0
+#define APR_HAVE_NETINET_TCP_H          0
+#define APR_HAVE_PTHREAD_H              0
+#define APR_HAVE_SIGNAL_H               1
+#define APR_HAVE_STDARG_H               1
+#define APR_HAVE_STDINT_H               0
+#define APR_HAVE_STDIO_H                1
+#define APR_HAVE_STDLIB_H               1
+#define APR_HAVE_STRING_H               1
+#define APR_HAVE_STRINGS_H              0
+#define APR_HAVE_STRTOLL                1
+#define APR_HAVE_SYS_SENDFILE_H         0
+#define APR_HAVE_SYS_SYSLIMITS_H        0
 #ifdef USE_WINSOCK
-#define APR_HAVE_SYS_SOCKET_H   0
-#define APR_HAVE_SYS_SOCKIO_H   0
-#define APR_HAVE_SYS_TIME_H     0
-#else
-#define APR_HAVE_SYS_SOCKET_H   1
-#define APR_HAVE_SYS_SOCKIO_H   1
-#define APR_HAVE_SYS_TIME_H     1
-#endif
-#define APR_HAVE_SYS_SIGNAL_H   1
-#define APR_HAVE_SYS_TYPES_H    1
-#define APR_HAVE_SYS_UIO_H      1
-#define APR_HAVE_SYS_UN_H       1
-#define APR_HAVE_SYS_WAIT_H     1
-#define APR_HAVE_TIME_H         1
-#define APR_HAVE_UNISTD_H       1
-
-#define APR_HAVE_SHMEM_MMAP_TMP     0
-#define APR_HAVE_SHMEM_MMAP_SHM     0
-#define APR_HAVE_SHMEM_MMAP_ZERO    0
-#define APR_HAVE_SHMEM_SHMGET_ANON  0
-#define APR_HAVE_SHMEM_SHMGET       0
-#define APR_HAVE_SHMEM_MMAP_ANON    0
-#define APR_HAVE_SHMEM_BEOS         0
-
-#define APR_USE_SHMEM_MMAP_TMP     0
-#define APR_USE_SHMEM_MMAP_SHM     0
-#define APR_USE_SHMEM_MMAP_ZERO    0
-#define APR_USE_SHMEM_SHMGET_ANON  0
-#define APR_USE_SHMEM_SHMGET       0
-#define APR_USE_SHMEM_MMAP_ANON    0
-#define APR_USE_SHMEM_BEOS         0
-
-#define APR_USE_FLOCK_SERIALIZE           0 
-#define APR_USE_SYSVSEM_SERIALIZE         0
-#define APR_USE_FCNTL_SERIALIZE           0
-#define APR_USE_PROC_PTHREAD_SERIALIZE    0 
-#define APR_USE_PTHREAD_SERIALIZE         0
-
-#define APR_HAS_FLOCK_SERIALIZE           0
-#define APR_HAS_SYSVSEM_SERIALIZE         0
-#define APR_HAS_FCNTL_SERIALIZE           0
-#define APR_HAS_PROC_PTHREAD_SERIALIZE    0
-#define APR_HAS_RWLOCK_SERIALIZE          0 
-
-#define APR_HAS_LOCK_CREATE_NP            0
-
-#define APR_PROCESS_LOCK_IS_GLOBAL        1
-
-#define APR_FILE_BASED_SHM      0
-
-#define APR_HAVE_CORKABLE_TCP	0
-#define APR_HAVE_GETRLIMIT      0
-#define APR_HAVE_ICONV          0
-#define APR_HAVE_IN_ADDR        1
-#define APR_HAVE_INET_ADDR      1
-#define APR_HAVE_INET_NETWORK   0
+#define APR_HAVE_SYS_SOCKET_H           0
+#define APR_HAVE_SYS_SOCKIO_H           0
+#define APR_HAVE_SYS_UN_H               0
+#else
+#define APR_HAVE_SYS_SOCKET_H           1
+#define APR_HAVE_SYS_SOCKIO_H           1
+#define APR_HAVE_SYS_UN_H               1
+#endif
+#define APR_HAVE_SYS_SIGNAL_H           1
+#define APR_HAVE_SYS_TIME_H             1
+#define APR_HAVE_SYS_TYPES_H            1
+#define APR_HAVE_SYS_UIO_H              1
+#define APR_HAVE_SYS_WAIT_H             1
+#define APR_HAVE_TIME_H                 1
+#define APR_HAVE_UNISTD_H               1
+
+#define APR_HAVE_SHMEM_MMAP_TMP         0
+#define APR_HAVE_SHMEM_MMAP_SHM         0
+#define APR_HAVE_SHMEM_MMAP_ZERO        0
+#define APR_HAVE_SHMEM_SHMGET_ANON      0
+#define APR_HAVE_SHMEM_SHMGET           0
+#define APR_HAVE_SHMEM_MMAP_ANON        0
+#define APR_HAVE_SHMEM_BEOS             0
+
+#define APR_USE_SHMEM_MMAP_TMP          0
+#define APR_USE_SHMEM_MMAP_SHM          0
+#define APR_USE_SHMEM_MMAP_ZERO         0
+#define APR_USE_SHMEM_SHMGET_ANON       0
+#define APR_USE_SHMEM_SHMGET            0
+#define APR_USE_SHMEM_MMAP_ANON         0
+#define APR_USE_SHMEM_BEOS              0
+
+#define APR_USE_FLOCK_SERIALIZE         0
+#define APR_USE_SYSVSEM_SERIALIZE       0
+#define APR_USE_FCNTL_SERIALIZE         0
+#define APR_USE_PROC_PTHREAD_SERIALIZE  0
+#define APR_USE_PTHREAD_SERIALIZE       0
+
+#define APR_HAS_FLOCK_SERIALIZE         0
+#define APR_HAS_SYSVSEM_SERIALIZE       0
+#define APR_HAS_FCNTL_SERIALIZE         0
+#define APR_HAS_PROC_PTHREAD_SERIALIZE  0
+#define APR_HAS_RWLOCK_SERIALIZE        0
+
+#define APR_HAS_LOCK_CREATE_NP          0
+
+#define APR_PROCESS_LOCK_IS_GLOBAL      1
+
+#define APR_FILE_BASED_SHM              0
+
+#define APR_HAVE_CORKABLE_TCP           0
+#define APR_HAVE_GETRLIMIT              0
+#define APR_HAVE_ICONV                  0
+#define APR_HAVE_IN_ADDR                1
+#define APR_HAVE_INET_ADDR              1
+#define APR_HAVE_INET_NETWORK           0
 #ifdef NW_BUILD_IPV6
-#define APR_HAVE_IPV6           1
+#define APR_HAVE_IPV6                   1
 #else
-#define APR_HAVE_IPV6           0
+#define APR_HAVE_IPV6                   0
 #endif
-#define APR_HAVE_MEMCHR         1
-#define APR_HAVE_MEMMOVE        1
-#define APR_HAVE_SETRLIMIT      0
-#define APR_HAVE_SIGACTION      0
-#define APR_HAVE_SIGSUSPEND     0
-#define APR_HAVE_SIGWAIT        0
-#define APR_HAVE_STRCASECMP     1
-#define APR_HAVE_STRDUP         1
-#define APR_HAVE_STRICMP        1
-#define APR_HAVE_STRNCASECMP    1
-#define APR_HAVE_STRNICMP       1
-#define APR_HAVE_STRSTR         1
-#define APR_HAVE_STRUCT_RLIMIT  0
-#define APR_HAVE_UNION_SEMUN    0
-#define APR_HAVE_SCTP           0
-#define APR_HAVE_IOVEC          1
+#define APR_HAVE_MEMCHR                 1
+#define APR_HAVE_MEMMOVE                1
+#define APR_HAVE_SETRLIMIT              0
+#define APR_HAVE_SIGACTION              0
+#define APR_HAVE_SIGSUSPEND             0
+#define APR_HAVE_SIGWAIT                0
+#define APR_HAVE_STRCASECMP             1
+#define APR_HAVE_STRDUP                 1
+#define APR_HAVE_STRICMP                1
+#define APR_HAVE_STRNCASECMP            1
+#define APR_HAVE_STRNICMP               1
+#define APR_HAVE_STRSTR                 1
+#define APR_HAVE_STRUCT_RLIMIT          0
+#define APR_HAVE_UNION_SEMUN            0
+#define APR_HAVE_SCTP                   0
+#define APR_HAVE_IOVEC                  1
 
 /*  APR Feature Macros */
-#define APR_HAS_SHARED_MEMORY     0
-#define APR_HAS_THREADS           1
-#define APR_HAS_SENDFILE          0
-#define APR_HAS_MMAP              0
-#define APR_HAS_FORK              0
-#define APR_HAS_RANDOM            1
-#define APR_HAS_OTHER_CHILD       0
-#define APR_HAS_DSO               1
-#define APR_HAS_SO_ACCEPTFILTER   0
-#define APR_HAS_UNICODE_FS        0
-#define APR_HAS_PROC_INVOKED      0
-#define APR_HAS_USER              1
-#define APR_HAS_LARGE_FILES       1
-#define APR_HAS_XTHREAD_FILES     0
-#define APR_HAS_OS_UUID           0
+#define APR_HAS_SHARED_MEMORY           0
+#define APR_HAS_THREADS                 1
+#define APR_HAS_SENDFILE                0
+#define APR_HAS_MMAP                    0
+#define APR_HAS_FORK                    0
+#define APR_HAS_RANDOM                  1
+#define APR_HAS_OTHER_CHILD             0
+#define APR_HAS_DSO                     1
+#define APR_HAS_SO_ACCEPTFILTER         0
+#define APR_HAS_UNICODE_FS              0
+#define APR_HAS_PROC_INVOKED            0
+#define APR_HAS_USER                    1
+#define APR_HAS_LARGE_FILES             1
+#define APR_HAS_XTHREAD_FILES           0
+#define APR_HAS_OS_UUID                 0
 
 #define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0
 
 /* Netware can poll on files/pipes.
  */
-#define APR_FILES_AS_SOCKETS      1
+#define APR_FILES_AS_SOCKETS            1
 
 /* This macro indicates whether or not EBCDIC is the native character set.
  */
-#define APR_CHARSET_EBCDIC        0
+#define APR_CHARSET_EBCDIC              0
 
 /* Is the TCP_NODELAY socket option inherited from listening sockets?
 */
-#define APR_TCP_NODELAY_INHERITED 1
+#define APR_TCP_NODELAY_INHERITED       1
 
 /* Is the O_NONBLOCK flag inherited from listening sockets?
 */
-#define APR_O_NONBLOCK_INHERITED  1
+#define APR_O_NONBLOCK_INHERITED        1
 
 /* Typedefs that APR needs. */
 
@@ -259,7 +261,7 @@
 
 /* Are we big endian? */
 /* XXX: Fatal assumption on Alpha platforms */
-#define APR_IS_BIGENDIAN	0
+#define APR_IS_BIGENDIAN        0
 
 #ifdef UNKNOWN_NETWARE_64BIT_FLAG_NEEDED
 #define APR_SIZEOF_VOIDP   8
@@ -349,8 +351,8 @@
 #define APR_END_DECLS
 #endif
 
-/** 
- * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC, 
+/**
+ * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC,
  * so that they follow the platform's calling convention.
  * @example
  */
@@ -360,7 +362,7 @@
 
 /**
  * The public APR functions are declared with APR_DECLARE(), so they may
- * use the most appropriate calling convention.  Public APR functions with 
+ * use the most appropriate calling convention.  Public APR functions with
  * variable arguments must use APR_DECLARE_NONSTD().
  *
  * @remark Both the declaration and implementations must use the same macro.
@@ -368,20 +370,20 @@
  */
 /** APR_DECLARE(rettype) apr_func(args)
  * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
- * @remark Note that when APR compiles the library itself, it passes the 
- * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32) 
+ * @remark Note that when APR compiles the library itself, it passes the
+ * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32)
  * to export public symbols from the dynamic library build.\n
  * The user must define the APR_DECLARE_STATIC when compiling to target
- * the static APR library on some platforms (e.g. Win32.)  The public symbols 
+ * the static APR library on some platforms (e.g. Win32.)  The public symbols
  * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
  * By default, compiling an application and including the APR public
  * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
  * linked to the dynamic library.
  */
-#define APR_DECLARE(type)            type 
+#define APR_DECLARE(type)            type
 
 /**
- * The public APR functions using variable arguments are declared with 
+ * The public APR functions using variable arguments are declared with
  * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
  * @see APR_DECLARE @see APR_DECLARE_DATA
  * @remark Both the declaration and implementations must use the same macro.
@@ -392,7 +394,7 @@
 #define APR_DECLARE_NONSTD(type)     type
 
 /**
- * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
+ * The public APR variables are declared with APR_DECLARE_DATA.
  * This assures the appropriate indirection is invoked at compile time.
  * @see APR_DECLARE @see APR_DECLARE_NONSTD
  * @remark Note that the declaration and implementations use different forms,

Modified: trunk/GME/Include/apr/apr.hw
==============================================================================
--- trunk/GME/Include/apr/apr.hw	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr.hw	Tue May 21 15:37:55 2013	(r2202)
@@ -282,6 +282,7 @@
 #define APR_HAVE_SIGACTION      0
 #define APR_HAVE_SIGSUSPEND     0
 #define APR_HAVE_SIGWAIT        0
+#define APR_HAVE_SA_STORAGE     0
 #define APR_HAVE_STRCASECMP     0
 #define APR_HAVE_STRDUP         1
 #define APR_HAVE_STRNCASECMP    0

Modified: trunk/GME/Include/apr/apr_env.h
==============================================================================
--- trunk/GME/Include/apr/apr_env.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_env.h	Tue May 21 15:37:55 2013	(r2202)
@@ -28,7 +28,7 @@
 #endif /* __cplusplus */
 
 /**
- * @defgroup apr_env Functions for manupulating the environment
+ * @defgroup apr_env Functions for manipulating the environment
  * @ingroup APR 
  * @{
  */

Modified: trunk/GME/Include/apr/apr_errno.h
==============================================================================
--- trunk/GME/Include/apr/apr_errno.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_errno.h	Tue May 21 15:37:55 2013	(r2202)
@@ -34,7 +34,7 @@
 
 /**
  * @defgroup apr_errno Error Codes
- * @ingroup APR 
+ * @ingroup APR
  * @{
  */
 
@@ -49,7 +49,7 @@
  * @param buf A buffer to hold the error string.
  * @param bufsize Size of the buffer to hold the string.
  */
-APR_DECLARE(char *) apr_strerror(apr_status_t statcode, char *buf, 
+APR_DECLARE(char *) apr_strerror(apr_status_t statcode, char *buf,
                                  apr_size_t bufsize);
 
 #if defined(DOXYGEN)
@@ -69,7 +69,7 @@
  * Fold an apr_status_t code back to the native platform defined error.
  * @param e The apr_status_t folded platform os error code.
  * @warning  macro implementation; the statcode argument may be evaluated
- *      multiple times.  If the statcode was not created by apr_get_os_error 
+ *      multiple times.  If the statcode was not created by apr_get_os_error
  *      or APR_FROM_OS_ERROR, the results are undefined.
  */
 #define APR_TO_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e - APR_OS_START_SYSERR)
@@ -105,7 +105,7 @@
  * @warning This is a macro implementation; the statcode argument may be evaluated
  *      multiple times.  If the statcode was not created by apr_get_os_error
  *      or APR_FROM_OS_ERROR, the results are undefined.  This macro sets
- *      errno, or calls a WSASetLastError() style function, unfolding 
+ *      errno, or calls a WSASetLastError() style function, unfolding
  *      socketcode with APR_TO_OS_ERROR.
  */
 
@@ -149,7 +149,7 @@
  *
  * In general applications should try and create unique error codes. To try
  * and assist in finding suitable ranges of numbers to use, the following
- * ranges are known to be used by the listed applications. If your 
+ * ranges are known to be used by the listed applications. If your
  * application defines error codes please advise the range of numbers it
  * uses to dev at apr.apache.org for inclusion in this list.
  *
@@ -158,6 +158,8 @@
  * Subversion - Defined ranges, of less than 100, at intervals of 5000
  *              starting at an offset of 5000, e.g.
  *               +5000 to 5100,  +10000 to 10100
+ *
+ * Apache HTTPD - +2000 to 2999
  */
 #define APR_OS_START_USERERR    (APR_OS_START_STATUS + APR_OS_ERRSPACE_SIZE)
 /**
@@ -172,12 +174,12 @@
 #define APR_OS_START_CANONERR  (APR_OS_START_USERERR \
                                  + (APR_OS_ERRSPACE_SIZE * 10))
 /**
- * APR_OS_START_EAIERR folds EAI_ error codes from getaddrinfo() into 
+ * APR_OS_START_EAIERR folds EAI_ error codes from getaddrinfo() into
  *     apr_status_t values.
  */
 #define APR_OS_START_EAIERR    (APR_OS_START_CANONERR + APR_OS_ERRSPACE_SIZE)
 /**
- * APR_OS_START_SYSERR folds platform-specific system error values into 
+ * APR_OS_START_SYSERR folds platform-specific system error values into
  *     apr_status_t values.
  */
 #define APR_OS_START_SYSERR    (APR_OS_START_EAIERR + APR_OS_ERRSPACE_SIZE)
@@ -188,7 +190,7 @@
  * The following attempts to show the relation of the various constants
  * used for mapping APR Status codes.
  *
- *       0          
+ *       0
  *
  *  20,000     APR_OS_START_ERROR
  *
@@ -222,13 +224,13 @@
 /** no error. */
 #define APR_SUCCESS 0
 
-/** 
+/**
  * @defgroup APR_Error APR Error Values
  * <PRE>
  * <b>APR ERROR VALUES</b>
- * APR_ENOSTAT      APR was unable to perform a stat on the file 
+ * APR_ENOSTAT      APR was unable to perform a stat on the file
  * APR_ENOPOOL      APR was not provided a pool with which to allocate memory
- * APR_EBADDATE     APR was given an invalid date 
+ * APR_EBADDATE     APR was given an invalid date
  * APR_EINVALSOCK   APR was given an invalid socket
  * APR_ENOPROC      APR was not given a process structure
  * APR_ENOTIME      APR was not given a time structure
@@ -239,7 +241,7 @@
  * APR_ENOTHREAD    APR was not given a thread structure
  * APR_ENOTHDKEY    APR was not given a thread key structure
  * APR_ENOSHMAVAIL  There is no more shared memory available
- * APR_EDSOOPEN     APR was unable to open the dso object.  For more 
+ * APR_EDSOOPEN     APR was unable to open the dso object.  For more
  *                  information call apr_dso_error().
  * APR_EGENERAL     General failure (specific information not available)
  * APR_EBADIP       The specified IP address is invalid
@@ -260,17 +262,17 @@
  * APR_INCOMPLETE     The operation was incomplete although some processing
  *                    was performed and the results are partially valid
  * APR_BADCH          Getopt found an option not in the option string
- * APR_BADARG         Getopt found an option that is missing an argument 
+ * APR_BADARG         Getopt found an option that is missing an argument
  *                    and an argument was specified in the option string
  * APR_EOF            APR has encountered the end of the file
  * APR_NOTFOUND       APR was unable to find the socket in the poll structure
  * APR_ANONYMOUS      APR is using anonymous shared memory
  * APR_FILEBASED      APR is using a file name as the key to the shared memory
  * APR_KEYBASED       APR is using a shared key as the key to the shared memory
- * APR_EINIT          Ininitalizer value.  If no option has been found, but 
+ * APR_EINIT          Ininitalizer value.  If no option has been found, but
  *                    the status variable requires a value, this should be used
- * APR_ENOTIMPL       The APR function has not been implemented on this 
- *                    platform, either because nobody has gotten to it yet, 
+ * APR_ENOTIMPL       The APR function has not been implemented on this
+ *                    platform, either because nobody has gotten to it yet,
  *                    or the function is impossible on this platform.
  * APR_EMISMATCH      Two passwords do not match.
  * APR_EABSOLUTE      The given path was absolute.
@@ -338,7 +340,7 @@
 #define APR_ENOTENOUGHENTROPY (APR_OS_START_ERROR + 28)
 /** @} */
 
-/** 
+/**
  * @defgroup APR_STATUS_IS Status Value Tests
  * @warning For any particular error condition, more than one of these tests
  *      may match. This is because platform-specific error codes may not
@@ -349,16 +351,16 @@
  *      adjust the order of the tests accordingly.
  * @{
  */
-/** 
- * APR was unable to perform a stat on the file 
+/**
+ * APR was unable to perform a stat on the file
  * @warning always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_ENOSTAT(s)        ((s) == APR_ENOSTAT)
-/** 
- * APR was not provided a pool with which to allocate memory 
+/**
+ * APR was not provided a pool with which to allocate memory
  * @warning always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_ENOPOOL(s)        ((s) == APR_ENOPOOL)
 /** APR was given an invalid date  */
@@ -390,8 +392,8 @@
 /** The specified netmask is invalid */
 #define APR_STATUS_IS_EBADMASK(s)       ((s) == APR_EBADMASK)
 /* empty slot: +18 */
-/** 
- * APR was unable to open the dso object.  
+/**
+ * APR was unable to open the dso object.
  * For more information call apr_dso_error().
  */
 #if defined(WIN32)
@@ -428,7 +430,7 @@
 
 /** @} */
 
-/** 
+/**
  * @addtogroup APR_Error
  * @{
  */
@@ -469,7 +471,7 @@
 /** @see APR_STATUS_IS_KEYBASED */
 #define APR_KEYBASED       (APR_OS_START_STATUS + 21)
 /** @see APR_STATUS_IS_EINIT */
-#define APR_EINIT          (APR_OS_START_STATUS + 22)  
+#define APR_EINIT          (APR_OS_START_STATUS + 22)
 /** @see APR_STATUS_IS_ENOTIMPL */
 #define APR_ENOTIMPL       (APR_OS_START_STATUS + 23)
 /** @see APR_STATUS_IS_EMISMATCH */
@@ -478,156 +480,156 @@
 #define APR_EBUSY          (APR_OS_START_STATUS + 25)
 /** @} */
 
-/** 
+/**
  * @addtogroup APR_STATUS_IS
  * @{
  */
-/** 
- * Program is currently executing in the child 
+/**
+ * Program is currently executing in the child
  * @warning
  * always use this test, as platform-specific variances may meet this
  * more than one error code */
 #define APR_STATUS_IS_INCHILD(s)        ((s) == APR_INCHILD)
-/** 
- * Program is currently executing in the parent 
+/**
+ * Program is currently executing in the parent
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_INPARENT(s)       ((s) == APR_INPARENT)
-/** 
- * The thread is detached 
+/**
+ * The thread is detached
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_DETACH(s)         ((s) == APR_DETACH)
-/** 
- * The thread is not detached 
+/**
+ * The thread is not detached
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_NOTDETACH(s)      ((s) == APR_NOTDETACH)
-/** 
+/**
  * The child has finished executing
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_CHILD_DONE(s)     ((s) == APR_CHILD_DONE)
-/** 
+/**
  * The child has not finished executing
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_CHILD_NOTDONE(s)  ((s) == APR_CHILD_NOTDONE)
-/** 
+/**
  * The operation did not finish before the timeout
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_TIMEUP(s)         ((s) == APR_TIMEUP)
-/** 
+/**
  * The operation was incomplete although some processing was performed
  * and the results are partially valid.
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_INCOMPLETE(s)     ((s) == APR_INCOMPLETE)
 /* empty slot: +9 */
 /* empty slot: +10 */
 /* empty slot: +11 */
-/** 
+/**
  * Getopt found an option not in the option string
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_BADCH(s)          ((s) == APR_BADCH)
-/** 
- * Getopt found an option not in the option string and an argument was 
+/**
+ * Getopt found an option not in the option string and an argument was
  * specified in the option string
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_BADARG(s)         ((s) == APR_BADARG)
-/** 
+/**
  * APR has encountered the end of the file
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_EOF(s)            ((s) == APR_EOF)
-/** 
+/**
  * APR was unable to find the socket in the poll structure
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_NOTFOUND(s)       ((s) == APR_NOTFOUND)
 /* empty slot: +16 */
 /* empty slot: +17 */
 /* empty slot: +18 */
-/** 
+/**
  * APR is using anonymous shared memory
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_ANONYMOUS(s)      ((s) == APR_ANONYMOUS)
-/** 
+/**
  * APR is using a file name as the key to the shared memory
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_FILEBASED(s)      ((s) == APR_FILEBASED)
-/** 
+/**
  * APR is using a shared key as the key to the shared memory
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_KEYBASED(s)       ((s) == APR_KEYBASED)
-/** 
- * Ininitalizer value.  If no option has been found, but 
+/**
+ * Ininitalizer value.  If no option has been found, but
  * the status variable requires a value, this should be used
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_EINIT(s)          ((s) == APR_EINIT)
-/** 
- * The APR function has not been implemented on this 
- * platform, either because nobody has gotten to it yet, 
+/**
+ * The APR function has not been implemented on this
+ * platform, either because nobody has gotten to it yet,
  * or the function is impossible on this platform.
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_ENOTIMPL(s)       ((s) == APR_ENOTIMPL)
-/** 
+/**
  * Two passwords do not match.
  * @warning
  * always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_EMISMATCH(s)      ((s) == APR_EMISMATCH)
-/** 
+/**
  * The given lock was busy
  * @warning always use this test, as platform-specific variances may meet this
- * more than one error code 
+ * more than one error code
  */
 #define APR_STATUS_IS_EBUSY(s)          ((s) == APR_EBUSY)
 
 /** @} */
 
-/** 
+/**
  * @addtogroup APR_Error APR Error Values
  * @{
  */
@@ -716,8 +718,8 @@
 #define APR_ESPIPE         (APR_OS_START_CANONERR + 12)
 #endif
 
-/** 
- * @see APR_STATUS_IS_EAGAIN 
+/**
+ * @see APR_STATUS_IS_EAGAIN
  * @warning use APR_STATUS_IS_EAGAIN instead of just testing this value
  */
 #ifdef EAGAIN
@@ -756,7 +758,7 @@
 #define APR_EINPROGRESS    (APR_OS_START_CANONERR + 17)
 #endif
 
-/** 
+/**
  * @see APR_STATUS_IS_ECONNABORTED
  * @warning use APR_STATUS_IS_ECONNABORTED instead of just testing this value
  */
@@ -774,7 +776,7 @@
 #define APR_ECONNRESET     (APR_OS_START_CANONERR + 19)
 #endif
 
-/** @see APR_STATUS_IS_ETIMEDOUT 
+/** @see APR_STATUS_IS_ETIMEDOUT
  *  @deprecated */
 #ifdef ETIMEDOUT
 #define APR_ETIMEDOUT ETIMEDOUT
@@ -859,7 +861,7 @@
  */
 #define APR_OS2_STATUS(e) (APR_FROM_OS_ERROR(e))
 
-/* These can't sit in a private header, so in spite of the extra size, 
+/* These can't sit in a private header, so in spite of the extra size,
  * they need to be made available here.
  */
 #define SOCBASEERR              10000
@@ -956,10 +958,10 @@
                 || (s) == APR_OS_START_SYSERR + SOCECONNRESET)
 /* XXX deprecated */
 #define APR_STATUS_IS_ETIMEDOUT(s)         ((s) == APR_ETIMEDOUT \
-                || (s) == APR_OS_START_SYSERR + SOCETIMEDOUT)    
+                || (s) == APR_OS_START_SYSERR + SOCETIMEDOUT)
 #undef APR_STATUS_IS_TIMEUP
 #define APR_STATUS_IS_TIMEUP(s)         ((s) == APR_TIMEUP \
-                || (s) == APR_OS_START_SYSERR + SOCETIMEDOUT)    
+                || (s) == APR_OS_START_SYSERR + SOCETIMEDOUT)
 #define APR_STATUS_IS_EHOSTUNREACH(s)   ((s) == APR_EHOSTUNREACH \
                 || (s) == APR_OS_START_SYSERR + SOCEHOSTUNREACH)
 #define APR_STATUS_IS_ENETUNREACH(s)    ((s) == APR_ENETUNREACH \
@@ -1046,7 +1048,8 @@
                 || (s) == APR_OS_START_SYSERR + ERROR_BAD_NETPATH \
                 || (s) == APR_OS_START_SYSERR + ERROR_BAD_NET_NAME \
                 || (s) == APR_OS_START_SYSERR + ERROR_BAD_PATHNAME \
-                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_DRIVE)
+                || (s) == APR_OS_START_SYSERR + ERROR_INVALID_DRIVE \
+                || (s) == APR_OS_START_SYSERR + ERROR_DIRECTORY)
 #define APR_STATUS_IS_ENOSPC(s)         ((s) == APR_ENOSPC \
                 || (s) == APR_OS_START_SYSERR + ERROR_DISK_FULL)
 #define APR_STATUS_IS_ENOMEM(s)         ((s) == APR_ENOMEM \
@@ -1197,7 +1200,7 @@
 #define apr_get_netos_error() (errno)
 #define apr_set_netos_error(e) (errno = (e))
 
-/** 
+/**
  * @addtogroup APR_STATUS_IS
  * @{
  */
@@ -1261,15 +1264,15 @@
 /** operation now in progress */
 #define APR_STATUS_IS_EINPROGRESS(s)    ((s) == APR_EINPROGRESS)
 
-/** 
- * Software caused connection abort 
+/**
+ * Software caused connection abort
  * @remark
- * EPROTO on certain older kernels really means ECONNABORTED, so we need to 
+ * EPROTO on certain older kernels really means ECONNABORTED, so we need to
  * ignore it for them.  See discussion in new-httpd archives nh.9701 & nh.9603
  *
- * There is potentially a bug in Solaris 2.x x<6, and other boxes that 
+ * There is potentially a bug in Solaris 2.x x<6, and other boxes that
  * implement tcp sockets in userland (i.e. on top of STREAMS).  On these
- * systems, EPROTO can actually result in a fatal loop.  See PR#981 for 
+ * systems, EPROTO can actually result in a fatal loop.  See PR#981 for
  * example.  It's hard to handle both uses of EPROTO.
  */
 #ifdef EPROTO

Modified: trunk/GME/Include/apr/apr_file_io.h
==============================================================================
--- trunk/GME/Include/apr/apr_file_io.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_file_io.h	Tue May 21 15:37:55 2013	(r2202)
@@ -113,7 +113,7 @@
  * to decipher a sparse file, so it's critical that the sparse file
  * flag should only be used for files accessed only by APR or other
  * applications known to be able to decipher them.  APR does not
- * guarentee that it will compress the file into sparse segments
+ * guarantee that it will compress the file into sparse segments
  * if it was previously created and written without the sparse flag.
  * On platforms which do not understand, or on file systems which
  * cannot handle sparse files, the flag is ignored by apr_file_open().
@@ -265,6 +265,15 @@
                                           apr_pool_t *pool);
 
 /**
+ * Create a hard link to the specified file.
+ * @param from_path The full path to the original file (using / on all systems)
+ * @param to_path The full path to the new file (using / on all systems)
+ * @remark Both files must reside on the same device.
+ */
+APR_DECLARE(apr_status_t) apr_file_link(const char *from_path, 
+                                          const char *to_path);
+
+/**
  * Copy the specified file to another file.
  * @param from_path The full path to the original file (using / on all systems)
  * @param to_path The full path to the new file (using / on all systems)
@@ -533,11 +542,12 @@
 APR_DECLARE(apr_status_t) apr_file_ungetc(char ch, apr_file_t *thefile);
 
 /**
- * Read a string from the specified file.
+ * Read a line from the specified file
  * @param str The buffer to store the string in. 
  * @param len The length of the string
  * @param thefile The file descriptor to read from
  * @remark The buffer will be NUL-terminated if any characters are stored.
+ *         The newline at the end of the line will not be stripped.
  */
 APR_DECLARE(apr_status_t) apr_file_gets(char *str, int len, 
                                         apr_file_t *thefile);
@@ -556,6 +566,18 @@
 APR_DECLARE(apr_status_t) apr_file_flush(apr_file_t *thefile);
 
 /**
+ * Transfer all file modified data and metadata to disk.
+ * @param thefile The file descriptor to sync
+ */
+APR_DECLARE(apr_status_t) apr_file_sync(apr_file_t *thefile);
+
+/**
+ * Transfer all file modified data to disk.
+ * @param thefile The file descriptor to sync
+ */
+APR_DECLARE(apr_status_t) apr_file_datasync(apr_file_t *thefile);
+
+/**
  * Duplicate the specified file descriptor.
  * @param new_file The structure to duplicate into. 
  * @param old_file The file to duplicate.
@@ -653,6 +675,7 @@
  * @param in The newly created pipe's file for reading.
  * @param out The newly created pipe's file for writing.
  * @param blocking one of these values defined in apr_thread_proc.h;
+ * @param pool The pool to operate on.
  * <pre>
  *       APR_FULL_BLOCK
  *       APR_READ_BLOCK
@@ -671,7 +694,7 @@
 APR_DECLARE(apr_status_t) apr_file_pipe_create_ex(apr_file_t **in, 
                                                   apr_file_t **out, 
                                                   apr_int32_t blocking, 
-                                                  apr_pool_t *p);
+                                                  apr_pool_t *pool);
 
 /**
  * Create a named pipe.
@@ -732,7 +755,7 @@
 /**
  * Return the data associated with the current file.
  * @param data The user data associated with the file.  
- * @param key The key to use for retreiving data associated with this file.
+ * @param key The key to use for retrieving data associated with this file.
  * @param file The currently open file.
  */                     
 APR_DECLARE(apr_status_t) apr_file_data_get(void **data, const char *key, 
@@ -742,7 +765,7 @@
  * Set the data associated with the current file.
  * @param file The currently open file.
  * @param data The user data to associate with the file.  
- * @param key The key to use for assocaiteing data with the file.
+ * @param key The key to use for associating data with the file.
  * @param cleanup The cleanup routine to use when the file is destroyed.
  */                     
 APR_DECLARE(apr_status_t) apr_file_data_set(apr_file_t *file, void *data,
@@ -786,7 +809,7 @@
  * </PRE>
  * @param attr_mask Mask of valid bits in attributes.
  * @param pool the pool to use.
- * @remark This function should be used in preference to explict manipulation
+ * @remark This function should be used in preference to explicit manipulation
  *      of the file permissions, because the operations to provide these
  *      attributes are platform specific and may involve more than simply
  *      setting permission bits.
@@ -813,7 +836,7 @@
 /**
  * Create a new directory on the file system.
  * @param path the path for the directory to be created. (use / on all systems)
- * @param perm Permissions for the new direcoty.
+ * @param perm Permissions for the new directory.
  * @param pool the pool to use.
  */                        
 APR_DECLARE(apr_status_t) apr_dir_make(const char *path, apr_fileperms_t perm, 
@@ -823,7 +846,7 @@
  * 'mkdir -p'. Creates intermediate directories as required. No error
  * will be reported if PATH already exists.
  * @param path the path for the directory to be created. (use / on all systems)
- * @param perm Permissions for the new direcoty.
+ * @param perm Permissions for the new directory.
  * @param pool the pool to use.
  */
 APR_DECLARE(apr_status_t) apr_dir_make_recursive(const char *path,

Modified: trunk/GME/Include/apr/apr_general.h
==============================================================================
--- trunk/GME/Include/apr/apr_general.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_general.h	Tue May 21 15:37:55 2013	(r2202)
@@ -169,7 +169,8 @@
 
 /**
  * Setup any APR internal data structures.  This MUST be the first function 
- * called for any APR library.
+ * called for any APR library. It is safe to call apr_initialize several
+ * times as long as apr_terminate is called the same number of times.
  * @remark See apr_app_initialize if this is an application, rather than
  * a library consumer of apr.
  */
@@ -193,7 +194,8 @@
 
 /**
  * Tear down any APR internal data structures which aren't torn down 
- * automatically.
+ * automatically. apr_terminate must be called once for every call to
+ * apr_initialize() or apr_app_initialize().
  * @remark An APR program must call this function at termination once it 
  *         has stopped using APR services.  The APR developers suggest using
  *         atexit to ensure this is called.  When using APR from a language

Modified: trunk/GME/Include/apr/apr_global_mutex.h
==============================================================================
--- trunk/GME/Include/apr/apr_global_mutex.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_global_mutex.h	Tue May 21 15:37:55 2013	(r2202)
@@ -121,6 +121,20 @@
 APR_DECLARE(apr_status_t) apr_global_mutex_destroy(apr_global_mutex_t *mutex);
 
 /**
+ * Return the name of the lockfile for the mutex, or NULL
+ * if the mutex doesn't use a lock file
+ */
+APR_DECLARE(const char *) apr_global_mutex_lockfile(apr_global_mutex_t *mutex);
+
+/**
+ * Display the name of the mutex, as it relates to the actual method used
+ * for the underlying apr_proc_mutex_t, if any.  NULL is returned if
+ * there is no underlying apr_proc_mutex_t.
+ * @param mutex the name of the mutex
+ */
+APR_DECLARE(const char *) apr_global_mutex_name(apr_global_mutex_t *mutex);
+
+/**
  * Get the pool used by this global_mutex.
  * @return apr_pool_t the pool
  */
@@ -140,6 +154,8 @@
 #define apr_global_mutex_trylock    apr_proc_mutex_trylock
 #define apr_global_mutex_unlock     apr_proc_mutex_unlock
 #define apr_global_mutex_destroy    apr_proc_mutex_destroy
+#define apr_global_mutex_lockfile   apr_proc_mutex_lockfile
+#define apr_global_mutex_name       apr_proc_mutex_name
 #define apr_global_mutex_pool_get   apr_proc_mutex_pool_get
 
 #endif

Modified: trunk/GME/Include/apr/apr_hash.h
==============================================================================
--- trunk/GME/Include/apr/apr_hash.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_hash.h	Tue May 21 15:37:55 2013	(r2202)
@@ -122,16 +122,15 @@
  * @param p The pool to allocate the apr_hash_index_t iterator. If this
  *          pool is NULL, then an internal, non-thread-safe iterator is used.
  * @param ht The hash table
+ * @return The iteration state
  * @remark  There is no restriction on adding or deleting hash entries during
  * an iteration (although the results may be unpredictable unless all you do
  * is delete the current entry) and multiple iterations can be in
  * progress at the same time.
- */
-/**
- * @example
  *
- * <PRE>
- * 
+ * @par Example:
+ *
+ * @code
  * int sum_values(apr_pool_t *p, apr_hash_t *ht)
  * {
  *     apr_hash_index_t *hi;
@@ -143,7 +142,7 @@
  *     }
  *     return sum;
  * }
- * </PRE>
+ * @endcode
  */
 APR_DECLARE(apr_hash_index_t *) apr_hash_first(apr_pool_t *p, apr_hash_t *ht);
 
@@ -219,6 +218,36 @@
                                          const void *data);
 
 /**
+ * Declaration prototype for the iterator callback function of apr_hash_do().
+ *
+ * @param rec The data passed as the first argument to apr_hash_[v]do()
+ * @param key The key from this iteration of the hash table
+ * @param klen The key length from this iteration of the hash table
+ * @param value The value from this iteration of the hash table
+ * @remark Iteration continues while this callback function returns non-zero.
+ * To export the callback function for apr_hash_do() it must be declared 
+ * in the _NONSTD convention.
+ */
+typedef int (apr_hash_do_callback_fn_t)(void *rec, const void *key,
+                                                   apr_ssize_t klen,
+                                                   const void *value);
+
+/** 
+ * Iterate over a hash table running the provided function once for every
+ * element in the hash table. The @param comp function will be invoked for
+ * every element in the hash table.
+ *
+ * @param comp The function to run
+ * @param rec The data to pass as the first argument to the function
+ * @param ht The hash table to iterate over
+ * @return FALSE if one of the comp() iterations returned zero; TRUE if all
+ *            iterations returned non-zero
+ * @see apr_hash_do_callback_fn_t
+ */
+APR_DECLARE(int) apr_hash_do(apr_hash_do_callback_fn_t *comp,
+                             void *rec, const apr_hash_t *ht);
+
+/**
  * Get a pointer to the pool which the hash table was created in
  */
 APR_POOL_DECLARE_ACCESSOR(hash);

Modified: trunk/GME/Include/apr/apr_lib.h
==============================================================================
--- trunk/GME/Include/apr/apr_lib.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_lib.h	Tue May 21 15:37:55 2013	(r2202)
@@ -125,9 +125,10 @@
  * %%pF same as above, but takes a apr_off_t *
  * %%pS same as above, but takes a apr_size_t *
  *
+ * %%pA, %%pI, %%pT, %%pp are available from APR 1.0.0 onwards (and in 0.9.x).
  * %%pt is only available from APR 1.2.0 onwards.
  * %%pm, %%pB, %%pF and %%pS are only available from APR 1.3.0 onwards.
- * 
+ *
  * The %%p hacks are to force gcc's printf warning code to skip
  * over a pointer argument without complaining.  This does
  * mean that the ANSI-style %%p (output a void * in hex format) won't

Modified: trunk/GME/Include/apr/apr_network_io.h
==============================================================================
--- trunk/GME/Include/apr/apr_network_io.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_network_io.h	Tue May 21 15:37:55 2013	(r2202)
@@ -348,6 +348,21 @@
                                              apr_sockaddr_t *sa);
 
 /**
+ * Determine whether the receive part of the socket has been closed by
+ * the peer (such that a subsequent call to apr_socket_read would
+ * return APR_EOF), if the socket's receive buffer is empty.  This
+ * function does not block waiting for I/O.
+ *
+ * @param sock The socket to check
+ * @param atreadeof If APR_SUCCESS is returned, *atreadeof is set to
+ *                  non-zero if a subsequent read would return APR_EOF
+ * @return an error is returned if it was not possible to determine the
+ *         status, in which case *atreadeof is not changed.
+ */
+APR_DECLARE(apr_status_t) apr_socket_atreadeof(apr_socket_t *sock,
+                                               int *atreadeof);
+
+/**
  * Create apr_sockaddr_t from hostname, address family, and port.
  * @param sa The new apr_sockaddr_t.
  * @param hostname The hostname or numeric address string to resolve/parse, or
@@ -509,9 +524,10 @@
 
 /**
  * Read data from a socket.  On success, the address of the peer from
- * which the data was sent is copied into the @param from parameter,
- * and the @param len parameter is updated to give the number of bytes
- * written to @param buf.
+ * which the data was sent is copied into the @a from parameter, and the
+ * @a len parameter is updated to give the number of bytes written to
+ * @a buf.
+ *
  * @param from Updated with the address from which the data was received
  * @param sock The socket to use
  * @param flags The flags to use

Modified: trunk/GME/Include/apr/apr_poll.h
==============================================================================
--- trunk/GME/Include/apr/apr_poll.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_poll.h	Tue May 21 15:37:55 2013	(r2202)
@@ -49,13 +49,36 @@
 #define APR_POLLOUT   0x004     /**< Can write without blocking */
 #define APR_POLLERR   0x010     /**< Pending error */
 #define APR_POLLHUP   0x020     /**< Hangup occurred */
-#define APR_POLLNVAL  0x040     /**< Descriptior invalid */
+#define APR_POLLNVAL  0x040     /**< Descriptor invalid */
 
 /**
  * Pollset Flags
  */
-#define APR_POLLSET_THREADSAFE 0x001 /**< Adding or Removing a Descriptor is thread safe */
-#define APR_POLLSET_NOCOPY     0x002 /**< Descriptors passed to apr_pollset_create() are not copied */
+#define APR_POLLSET_THREADSAFE 0x001 /**< Adding or removing a descriptor is
+                                      * thread-safe
+                                      */
+#define APR_POLLSET_NOCOPY     0x002 /**< Descriptors passed to apr_pollset_add()
+                                      * are not copied
+                                      */
+#define APR_POLLSET_WAKEABLE   0x004 /**< Poll operations are interruptable by
+                                      * apr_pollset_wakeup()
+                                      */
+#define APR_POLLSET_NODEFAULT  0x010 /**< Do not try to use the default method if
+                                      * the specified non-default method cannot be
+                                      * used
+                                      */
+
+/**
+ * Pollset Methods
+ */
+typedef enum {
+    APR_POLLSET_DEFAULT,        /**< Platform default poll method */
+    APR_POLLSET_SELECT,         /**< Poll uses select method */
+    APR_POLLSET_KQUEUE,         /**< Poll uses kqueue method */
+    APR_POLLSET_PORT,           /**< Poll uses Solaris event port method */
+    APR_POLLSET_EPOLL,          /**< Poll uses epoll method */
+    APR_POLLSET_POLL            /**< Poll uses poll method */
+} apr_pollset_method_e;
 
 /** Used in apr_pollfd_t to determine what the apr_descriptor is */
 typedef enum { 
@@ -93,18 +116,33 @@
 typedef struct apr_pollset_t apr_pollset_t;
 
 /**
- * Setup a pollset object
+ * Set up a pollset object
  * @param pollset  The pointer in which to return the newly created object 
  * @param size The maximum number of descriptors that this pollset can hold
  * @param p The pool from which to allocate the pollset
  * @param flags Optional flags to modify the operation of the pollset.
  *
- * @remark If flags equals APR_POLLSET_THREADSAFE, then a pollset is
- * created on which it is safe to make concurrent calls to
- * apr_pollset_add(), apr_pollset_remove() and apr_pollset_poll() from
- * separate threads.  This feature is only supported on some
- * platforms; the apr_pollset_create() call will fail with
- * APR_ENOTIMPL on platforms where it is not supported.
+ * @remark If flags contains APR_POLLSET_THREADSAFE, then a pollset is
+ *         created on which it is safe to make concurrent calls to
+ *         apr_pollset_add(), apr_pollset_remove() and apr_pollset_poll()
+ *         from separate threads.  This feature is only supported on some
+ *         platforms; the apr_pollset_create() call will fail with
+ *         APR_ENOTIMPL on platforms where it is not supported.
+ * @remark If flags contains APR_POLLSET_WAKEABLE, then a pollset is
+ *         created with an additional internal pipe object used for the
+ *         apr_pollset_wakeup() call. The actual size of pollset is
+ *         in that case size + 1. This feature is only supported on some
+ *         platforms; the apr_pollset_create() call will fail with
+ *         APR_ENOTIMPL on platforms where it is not supported.
+ * @remark If flags contains APR_POLLSET_NOCOPY, then the apr_pollfd_t
+ *         structures passed to apr_pollset_add() are not copied and
+ *         must have a lifetime at least as long as the pollset.
+ * @remark Some poll methods (including APR_POLLSET_KQUEUE,
+ *         APR_POLLSET_PORT, and APR_POLLSET_EPOLL) do not have a
+ *         fixed limit on the size of the pollset. For these methods,
+ *         the size parameter controls the maximum number of
+ *         descriptors that will be returned by a single call to
+ *         apr_pollset_poll().
  */
 APR_DECLARE(apr_status_t) apr_pollset_create(apr_pollset_t **pollset,
                                              apr_uint32_t size,
@@ -112,6 +150,44 @@
                                              apr_uint32_t flags);
 
 /**
+ * Set up a pollset object
+ * @param pollset  The pointer in which to return the newly created object 
+ * @param size The maximum number of descriptors that this pollset can hold
+ * @param p The pool from which to allocate the pollset
+ * @param flags Optional flags to modify the operation of the pollset.
+ * @param method Poll method to use. See #apr_pollset_method_e.  If this
+ *         method cannot be used, the default method will be used unless the
+ *         APR_POLLSET_NODEFAULT flag has been specified.
+ *
+ * @remark If flags contains APR_POLLSET_THREADSAFE, then a pollset is
+ *         created on which it is safe to make concurrent calls to
+ *         apr_pollset_add(), apr_pollset_remove() and apr_pollset_poll()
+ *         from separate threads.  This feature is only supported on some
+ *         platforms; the apr_pollset_create_ex() call will fail with
+ *         APR_ENOTIMPL on platforms where it is not supported.
+ * @remark If flags contains APR_POLLSET_WAKEABLE, then a pollset is
+ *         created with additional internal pipe object used for the
+ *         apr_pollset_wakeup() call. The actual size of pollset is
+ *         in that case size + 1. This feature is only supported on some
+ *         platforms; the apr_pollset_create_ex() call will fail with
+ *         APR_ENOTIMPL on platforms where it is not supported.
+ * @remark If flags contains APR_POLLSET_NOCOPY, then the apr_pollfd_t
+ *         structures passed to apr_pollset_add() are not copied and
+ *         must have a lifetime at least as long as the pollset.
+ * @remark Some poll methods (including APR_POLLSET_KQUEUE,
+ *         APR_POLLSET_PORT, and APR_POLLSET_EPOLL) do not have a
+ *         fixed limit on the size of the pollset. For these methods,
+ *         the size parameter controls the maximum number of
+ *         descriptors that will be returned by a single call to
+ *         apr_pollset_poll().
+ */
+APR_DECLARE(apr_status_t) apr_pollset_create_ex(apr_pollset_t **pollset,
+                                                apr_uint32_t size,
+                                                apr_pool_t *p,
+                                                apr_uint32_t flags,
+                                                apr_pollset_method_e method);
+
+/**
  * Destroy a pollset object
  * @param pollset The pollset to destroy
  */
@@ -133,6 +209,15 @@
  *         with APR_EINTR.  Option (1) is recommended, but option (2) is
  *         allowed for implementations where option (1) is impossible
  *         or impractical.
+ * @remark If the pollset has been created with APR_POLLSET_NOCOPY, the 
+ *         apr_pollfd_t structure referenced by descriptor will not be copied
+ *         and must have a lifetime at least as long as the pollset.
+ * @remark Do not add the same socket or file descriptor to the same pollset
+ *         multiple times, even if the requested events differ for the 
+ *         different calls to apr_pollset_add().  If the events of interest
+ *         for a descriptor change, you must first remove the descriptor 
+ *         from the pollset with apr_pollset_remove(), then add it again 
+ *         specifying all requested events.
  */
 APR_DECLARE(apr_status_t) apr_pollset_add(apr_pollset_t *pollset,
                                           const apr_pollfd_t *descriptor);
@@ -150,6 +235,9 @@
  *         with APR_EINTR.  Option (1) is recommended, but option (2) is
  *         allowed for implementations where option (1) is impossible
  *         or impractical.
+ * @remark apr_pollset_remove() cannot be used to remove a subset of requested
+ *         events for a descriptor.  The reqevents field in the apr_pollfd_t
+ *         parameter must contain the same value when removing as when adding.
  */
 APR_DECLARE(apr_status_t) apr_pollset_remove(apr_pollset_t *pollset,
                                              const apr_pollfd_t *descriptor);
@@ -157,43 +245,75 @@
 /**
  * Block for activity on the descriptor(s) in a pollset
  * @param pollset The pollset to use
- * @param timeout The amount of time in microseconds to wait.  This is 
- *                a maximum, not a minimum.  If a descriptor is signalled, we 
- *                will wake up before this time.  A negative number means 
- *                wait until a descriptor is signalled.
+ * @param timeout The amount of time in microseconds to wait.  This is a
+ *                maximum, not a minimum.  If a descriptor is signalled, the
+ *                function will return before this time.  If timeout is
+ *                negative, the function will block until a descriptor is
+ *                signalled or until apr_pollset_wakeup() has been called.
  * @param num Number of signalled descriptors (output parameter)
  * @param descriptors Array of signalled descriptors (output parameter)
+ * @remark APR_EINTR will be returned if the pollset has been created with
+ *         APR_POLLSET_WAKEABLE, apr_pollset_wakeup() has been called while
+ *         waiting for activity, and there were no signalled descriptors at the
+ *         time of the wakeup call.
+ * @remark Multiple signalled conditions for the same descriptor may be reported
+ *         in one or more returned apr_pollfd_t structures, depending on the
+ *         implementation.
+ * @bug With versions 1.4.2 and prior on Windows, a call with no descriptors
+ *      and timeout will return immediately with the wrong error code.
  */
 APR_DECLARE(apr_status_t) apr_pollset_poll(apr_pollset_t *pollset,
                                            apr_interval_time_t timeout,
                                            apr_int32_t *num,
                                            const apr_pollfd_t **descriptors);
 
+/**
+ * Interrupt the blocked apr_pollset_poll() call.
+ * @param pollset The pollset to use
+ * @remark If the pollset was not created with APR_POLLSET_WAKEABLE the
+ *         return value is APR_EINIT.
+ */
+APR_DECLARE(apr_status_t) apr_pollset_wakeup(apr_pollset_t *pollset);
 
 /**
  * Poll the descriptors in the poll structure
  * @param aprset The poll structure we will be using. 
  * @param numsock The number of descriptors we are polling
  * @param nsds The number of descriptors signalled (output parameter)
- * @param timeout The amount of time in microseconds to wait.  This is 
- *                a maximum, not a minimum.  If a descriptor is signalled, we 
- *                will wake up before this time.  A negative number means 
- *                wait until a descriptor is signalled.
+ * @param timeout The amount of time in microseconds to wait.  This is a
+ *                maximum, not a minimum.  If a descriptor is signalled, the
+ *                function will return before this time.  If timeout is
+ *                negative, the function will block until a descriptor is
+ *                signalled or until apr_pollset_wakeup() has been called.
  * @remark The number of descriptors signalled is returned in the third argument. 
  *         This is a blocking call, and it will not return until either a 
- *         descriptor has been signalled, or the timeout has expired. 
+ *         descriptor has been signalled or the timeout has expired. 
  * @remark The rtnevents field in the apr_pollfd_t array will only be filled-
  *         in if the return value is APR_SUCCESS.
+ * @bug With versions 1.4.2 and prior on Windows, a call with no descriptors
+ *      and timeout will return immediately with the wrong error code.
  */
 APR_DECLARE(apr_status_t) apr_poll(apr_pollfd_t *aprset, apr_int32_t numsock,
                                    apr_int32_t *nsds, 
                                    apr_interval_time_t timeout);
 
+/**
+ * Return a printable representation of the pollset method.
+ * @param pollset The pollset to use
+ */
+APR_DECLARE(const char *) apr_pollset_method_name(apr_pollset_t *pollset);
+
+/**
+ * Return a printable representation of the default pollset method
+ * (APR_POLLSET_DEFAULT).
+ */
+APR_DECLARE(const char *) apr_poll_method_defname(void);
+
 /** Opaque structure used for pollset API */
 typedef struct apr_pollcb_t apr_pollcb_t;
 
 /**
- * Setup a pollcb object
+ * Set up a pollcb object
  * @param pollcb  The pointer in which to return the newly created object 
  * @param size The maximum number of descriptors that a single _poll can return.
  * @param p The pool from which to allocate the pollcb
@@ -204,19 +324,44 @@
  */
 APR_DECLARE(apr_status_t) apr_pollcb_create(apr_pollcb_t **pollcb,
                                             apr_uint32_t size,
-                                            apr_pool_t *pool,
+                                            apr_pool_t *p,
                                             apr_uint32_t flags);
 
 /**
+ * Set up a pollcb object
+ * @param pollcb  The pointer in which to return the newly created object 
+ * @param size The maximum number of descriptors that a single _poll can return.
+ * @param p The pool from which to allocate the pollcb
+ * @param flags Optional flags to modify the operation of the pollcb.
+ * @param method Poll method to use. See #apr_pollset_method_e.  If this
+ *         method cannot be used, the default method will be used unless the
+ *         APR_POLLSET_NODEFAULT flag has been specified.
+ *
+ * @remark Pollcb is only supported on some platforms; the apr_pollcb_create_ex()
+ * call will fail with APR_ENOTIMPL on platforms where it is not supported.
+ */
+APR_DECLARE(apr_status_t) apr_pollcb_create_ex(apr_pollcb_t **pollcb,
+                                               apr_uint32_t size,
+                                               apr_pool_t *p,
+                                               apr_uint32_t flags,
+                                               apr_pollset_method_e method);
+
+/**
  * Add a socket or file descriptor to a pollcb
  * @param pollcb The pollcb to which to add the descriptor
  * @param descriptor The descriptor to add
- * @remark If you set client_data in the descriptor, that value
- *         will be returned in the client_data field whenever this
- *         descriptor is signalled in apr_pollcb_poll().
+ * @remark If you set client_data in the descriptor, that value will be
+ *         returned in the client_data field whenever this descriptor is
+ *         signalled in apr_pollcb_poll().
  * @remark Unlike the apr_pollset API, the descriptor is not copied, and users 
- *         must retain the memory used by descriptor, as the same pointer will be 
- *         returned to them from apr_pollcb_poll.
+ *         must retain the memory used by descriptor, as the same pointer will
+ *         be returned to them from apr_pollcb_poll.
+ * @remark Do not add the same socket or file descriptor to the same pollcb
+ *         multiple times, even if the requested events differ for the 
+ *         different calls to apr_pollcb_add().  If the events of interest
+ *         for a descriptor change, you must first remove the descriptor 
+ *         from the pollcb with apr_pollcb_remove(), then add it again 
+ *         specifying all requested events.
  */
 APR_DECLARE(apr_status_t) apr_pollcb_add(apr_pollcb_t *pollcb,
                                          apr_pollfd_t *descriptor);
@@ -224,12 +369,15 @@
  * Remove a descriptor from a pollcb
  * @param pollcb The pollcb from which to remove the descriptor
  * @param descriptor The descriptor to remove
+ * @remark apr_pollcb_remove() cannot be used to remove a subset of requested
+ *         events for a descriptor.  The reqevents field in the apr_pollfd_t
+ *         parameter must contain the same value when removing as when adding.
  */
 APR_DECLARE(apr_status_t) apr_pollcb_remove(apr_pollcb_t *pollcb,
                                             apr_pollfd_t *descriptor);
 
 /** Function prototype for pollcb handlers 
- * @param baton Opaque baton passed into apr_pollcb_poll
+ * @param baton Opaque baton passed into apr_pollcb_poll()
  * @param descriptor Contains the notification for an active descriptor, 
  *                   the rtnevents member contains what events were triggered
  *                   for this descriptor.
@@ -239,12 +387,18 @@
 /**
  * Block for activity on the descriptor(s) in a pollcb
  * @param pollcb The pollcb to use
- * @param timeout The amount of time in microseconds to wait.  This is 
- *                a maximum, not a minimum.  If a descriptor is signalled, we 
- *                will wake up before this time.  A negative number means 
- *                wait until a descriptor is signalled.
- * @param func Callback function to call for each active socket
+ * @param timeout The amount of time in microseconds to wait.  This is a
+ *                maximum, not a minimum.  If a descriptor is signalled, the
+ *                function will return before this time.  If timeout is
+ *                negative, the function will block until a descriptor is
+ *                signalled.
+ * @param func Callback function to call for each active descriptor.
  * @param baton Opaque baton passed to the callback function.
+ * @remark Multiple signalled conditions for the same descriptor may be reported
+ *         in one or more calls to the callback function, depending on the
+ *         implementation.
+ * @bug With versions 1.4.2 and prior on Windows, a call with no descriptors
+ *      and timeout will return immediately with the wrong error code.
  */
 APR_DECLARE(apr_status_t) apr_pollcb_poll(apr_pollcb_t *pollcb,
                                           apr_interval_time_t timeout,

Modified: trunk/GME/Include/apr/apr_portable.h
==============================================================================
--- trunk/GME/Include/apr/apr_portable.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_portable.h	Tue May 21 15:37:55 2013	(r2202)
@@ -16,7 +16,7 @@
 
 /* This header file is where you should put ANY platform specific information.
  * This should be the only header file that programs need to include that 
- * actually has platform dependant code which refers to the .
+ * actually has platform dependent code which refers to the .
  */
 #ifndef APR_PORTABLE_H
 #define APR_PORTABLE_H
@@ -145,7 +145,7 @@
 typedef int                   apr_os_file_t;        /**< native file */
 typedef DIR                   apr_os_dir_t;         /**< native dir */
 typedef int                   apr_os_sock_t;        /**< native dir */
-typedef struct apr_os_proc_mutex_t  apr_os_proc_mutex_t; /**< native proces
+typedef struct apr_os_proc_mutex_t  apr_os_proc_mutex_t; /**< native process
                                                           *   mutex
                                                           */
 #if APR_HAS_THREADS && APR_HAVE_PTHREAD_H 
@@ -235,7 +235,7 @@
 /**
  * Convert the socket from an apr type to an OS specific socket
  * @param thesock The socket to convert.
- * @param sock The os specifc equivelant of the apr socket..
+ * @param sock The os specific equivalent of the apr socket..
  */
 APR_DECLARE(apr_status_t) apr_os_sock_get(apr_os_sock_t *thesock,
                                           apr_socket_t *sock);
@@ -321,6 +321,7 @@
  * Compare two thread id's
  * @param tid1 1st Thread ID to compare
  * @param tid2 2nd Thread ID to compare
+ * @return non-zero if the two threads are equal, zero otherwise
  */ 
 APR_DECLARE(int) apr_os_thread_equal(apr_os_thread_t tid1, 
                                      apr_os_thread_t tid2);
@@ -450,7 +451,7 @@
 
 #if APR_HAS_DSO || defined(DOXYGEN)
 /** 
- * @defgroup apr_os_dso DSO (Dynamic Loading) Portabiliity Routines
+ * @defgroup apr_os_dso DSO (Dynamic Loading) Portability Routines
  * @{
  */
 /**
@@ -471,6 +472,10 @@
 APR_DECLARE(apr_status_t) apr_os_dso_handle_get(apr_os_dso_handle_t *dso,
                                                 apr_dso_handle_t *aprdso);
 
+/** @} */
+#endif /* APR_HAS_DSO */
+
+
 #if APR_HAS_OS_UUID
 /**
  * Private: apr-util's apr_uuid module when supported by the platform
@@ -478,12 +483,9 @@
 APR_DECLARE(apr_status_t) apr_os_uuid_get(unsigned char *uuid_data);
 #endif
 
-/** @} */
-#endif /* APR_HAS_DSO */
-
 
 /**
- * Get the name of the system default characer set.
+ * Get the name of the system default character set.
  * @param pool the pool to allocate the name from, if needed
  */
 APR_DECLARE(const char*) apr_os_default_encoding(apr_pool_t *pool);
@@ -493,7 +495,7 @@
  * Get the name of the current locale character set.
  * @param pool the pool to allocate the name from, if needed
  * @remark Defers to apr_os_default_encoding if the current locale's
- * data can't be retreved on this system.
+ * data can't be retrieved on this system.
  */
 APR_DECLARE(const char*) apr_os_locale_encoding(apr_pool_t *pool);
 

Modified: trunk/GME/Include/apr/apr_ring.h
==============================================================================
--- trunk/GME/Include/apr/apr_ring.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_ring.h	Tue May 21 15:37:55 2013	(r2202)
@@ -90,8 +90,8 @@
  */
 #define APR_RING_HEAD(head, elem)					\
     struct head {							\
-	struct elem *next;						\
-	struct elem *prev;						\
+	struct elem * volatile next;					\
+	struct elem * volatile prev;					\
     }
 
 /**

Modified: trunk/GME/Include/apr/apr_strings.h
==============================================================================
--- trunk/GME/Include/apr/apr_strings.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_strings.h	Tue May 21 15:37:55 2013	(r2202)
@@ -136,7 +136,11 @@
  * @param ... The strings to concatenate.  The final string must be NULL
  * @return The new string
  */
-APR_DECLARE_NONSTD(char *) apr_pstrcat(apr_pool_t *p, ...);
+APR_DECLARE_NONSTD(char *) apr_pstrcat(apr_pool_t *p, ...)
+#if defined(__GNUC__) && __GNUC__ >= 4
+    __attribute__((sentinel))
+#endif
+    ;
 
 /**
  * Concatenate multiple strings specified in a writev-style vector
@@ -330,7 +334,7 @@
  *   digits are prefixed with '0x', in which case it will be treated as
  *   base 16.
  * @return The numeric value of the string.  On overflow, errno is set
- * to ERANGE.
+ * to ERANGE.  On success, errno is set to 0.
  */
 APR_DECLARE(apr_int64_t) apr_strtoi64(const char *buf, char **end, int base);
 
@@ -338,7 +342,8 @@
  * parse a base-10 numeric string into a 64-bit numeric value.
  * Equivalent to apr_strtoi64(buf, (char**)NULL, 10).
  * @param buf The string to parse
- * @return The numeric value of the string
+ * @return The numeric value of the string.  On overflow, errno is set
+ * to ERANGE.  On success, errno is set to 0.
  */
 APR_DECLARE(apr_int64_t) apr_atoi64(const char *buf);
 

Modified: trunk/GME/Include/apr/apr_tables.h
==============================================================================
--- trunk/GME/Include/apr/apr_tables.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_tables.h	Tue May 21 15:37:55 2013	(r2202)
@@ -36,9 +36,19 @@
 /**
  * @defgroup apr_tables Table and Array Functions
  * @ingroup APR 
- * Tables are used to store entirely opaque structures 
- * for applications, while Arrays are usually used to
- * deal with string lists.
+ * Arrays are used to store data which is referenced sequentially or
+ * as a stack.  Functions are provided to push and pop individual
+ * elements as well as to operate on the entire array.
+ *
+ * Tables are used to store data which can be referenced by key.
+ * Limited capabilities are provided for tables with multiple elements
+ * which share a key; while key lookup will return only a single
+ * element, iteration is available.  Additionally, a table can be
+ * compressed to resolve duplicates.
+ *
+ * Both arrays and tables may store string or binary data; some features,
+ * such as concatenation or merging of elements, work only for string
+ * data.
  * @{
  */
 
@@ -81,28 +91,28 @@
 };
 
 /**
- * Get the elements from a table
+ * Get the elements from a table.
  * @param t The table
  * @return An array containing the contents of the table
  */
 APR_DECLARE(const apr_array_header_t *) apr_table_elts(const apr_table_t *t);
 
 /**
- * Determine if the table is empty (either NULL or having no elements)
+ * Determine if the table is empty (either NULL or having no elements).
  * @param t The table to check
  * @return True if empty, False otherwise
  */
 APR_DECLARE(int) apr_is_empty_table(const apr_table_t *t);
 
 /**
- * Determine if the array is empty (either NULL or having no elements)
+ * Determine if the array is empty (either NULL or having no elements).
  * @param a The array to check
  * @return True if empty, False otherwise
  */
 APR_DECLARE(int) apr_is_empty_array(const apr_array_header_t *a);
 
 /**
- * Create an array
+ * Create an array.
  * @param p The pool to allocate the memory out of
  * @param nelts the number of elements in the initial array
  * @param elt_size The size of each element in the array.
@@ -112,7 +122,7 @@
                                                  int nelts, int elt_size);
 
 /**
- * Add a new element to an array (as a first-in, last-out stack)
+ * Add a new element to an array (as a first-in, last-out stack).
  * @param arr The array to add an element to.
  * @return Location for the new element in the array.
  * @remark If there are no free spots in the array, then this function will
@@ -140,7 +150,7 @@
 #define APR_ARRAY_PUSH(ary,type) (*((type *)apr_array_push(ary)))
 
 /**
- * Remove an element from an array (as a first-in, last-out stack)
+ * Remove an element from an array (as a first-in, last-out stack).
  * @param arr The array to remove an element from.
  * @return Location of the element in the array.
  * @remark If there are no elements in the array, NULL is returned.
@@ -156,7 +166,7 @@
 APR_DECLARE(void) apr_array_clear(apr_array_header_t *arr);
 
 /**
- * Concatenate two arrays together
+ * Concatenate two arrays together.
  * @param dst The destination array, and the one to go first in the combined 
  *            array
  * @param src The source array to add to the destination array
@@ -165,7 +175,7 @@
 			        const apr_array_header_t *src);
 
 /**
- * Copy the entire array
+ * Copy the entire array.
  * @param p The pool to allocate the copy of the array out of
  * @param arr The array to copy
  * @return An exact copy of the array passed in
@@ -198,7 +208,7 @@
                                       const apr_array_header_t *second);
 
 /**
- * Generates a new string from the apr_pool_t containing the concatenated 
+ * Generate a new string from the apr_pool_t containing the concatenated 
  * sequence of substrings referenced as elements within the array.  The string 
  * will be empty if all substrings are empty or null, or if there are no 
  * elements in the array.  If sep is non-NUL, it will be inserted between 
@@ -213,7 +223,7 @@
 				      const char sep);
 
 /**
- * Make a new table
+ * Make a new table.
  * @param p The pool to allocate the pool out of
  * @param nelts The number of elements in the initial table.
  * @return The new table.
@@ -222,7 +232,7 @@
 APR_DECLARE(apr_table_t *) apr_table_make(apr_pool_t *p, int nelts);
 
 /**
- * Create a new table and copy another table into it
+ * Create a new table and copy another table into it.
  * @param p The pool to allocate the new table out of
  * @param t The table to copy
  * @return A copy of the table passed in
@@ -243,25 +253,25 @@
                                            const apr_table_t *t);
 
 /**
- * Delete all of the elements from a table
+ * Delete all of the elements from a table.
  * @param t The table to clear
  */
 APR_DECLARE(void) apr_table_clear(apr_table_t *t);
 
 /**
  * Get the value associated with a given key from the table.  After this call,
- * The data is still in the table
+ * the data is still in the table.
  * @param t The table to search for the key
- * @param key The key to search for
+ * @param key The key to search for (case does not matter)
  * @return The value associated with the key, or NULL if the key does not exist. 
  */
 APR_DECLARE(const char *) apr_table_get(const apr_table_t *t, const char *key);
 
 /**
- * Add a key/value pair to a table, if another element already exists with the
- * same key, this will over-write the old data.
+ * Add a key/value pair to a table.  If another element already exists with the
+ * same key, this will overwrite the old data.
  * @param t The table to add the data to.
- * @param key The key fo use
+ * @param key The key to use (case does not matter)
  * @param val The value to add
  * @remark When adding data, this function makes a copy of both the key and the
  *         value.
@@ -270,10 +280,10 @@
                                 const char *val);
 
 /**
- * Add a key/value pair to a table, if another element already exists with the
- * same key, this will over-write the old data.
+ * Add a key/value pair to a table.  If another element already exists with the
+ * same key, this will overwrite the old data.
  * @param t The table to add the data to.
- * @param key The key to use
+ * @param key The key to use (case does not matter)
  * @param val The value to add
  * @warning When adding data, this function does not make a copy of the key or 
  *          the value, so care should be taken to ensure that the values will 
@@ -283,17 +293,18 @@
                                  const char *val);
 
 /**
- * Remove data from the table
+ * Remove data from the table.
  * @param t The table to remove data from
- * @param key The key of the data being removed
+ * @param key The key of the data being removed (case does not matter)
  */
 APR_DECLARE(void) apr_table_unset(apr_table_t *t, const char *key);
 
 /**
  * Add data to a table by merging the value with data that has already been 
- * stored
+ * stored. The merging is done by concatenating the two values, separated
+ * by the string ", ".
  * @param t The table to search for the data
- * @param key The key to merge data for
+ * @param key The key to merge data for (case does not matter)
  * @param val The data to add
  * @remark If the key is not found, then this function acts like apr_table_add
  */
@@ -302,9 +313,10 @@
 
 /**
  * Add data to a table by merging the value with data that has already been 
- * stored
+ * stored. The merging is done by concatenating the two values, separated
+ * by the string ", ".
  * @param t The table to search for the data
- * @param key The key to merge data for
+ * @param key The key to merge data for (case does not matter)
  * @param val The data to add
  * @remark If the key is not found, then this function acts like apr_table_addn
  */
@@ -331,13 +343,13 @@
  * @param val The value to add.
  * @remark When adding data, this function does not make a copy of the key or the
  *         value, so care should be taken to ensure that the values will not 
- *         change after they have been added..
+ *         change after they have been added.
  */
 APR_DECLARE(void) apr_table_addn(apr_table_t *t, const char *key,
                                  const char *val);
 
 /**
- * Merge two tables into one new table
+ * Merge two tables into one new table.
  * @param p The pool to use for the new table
  * @param overlay The first table to put in the new table
  * @param base The table to add at the end of the new table
@@ -380,11 +392,15 @@
  * @see apr_table_do_callback_fn_t
  */
 APR_DECLARE_NONSTD(int) apr_table_do(apr_table_do_callback_fn_t *comp,
-                                     void *rec, const apr_table_t *t, ...);
+                                     void *rec, const apr_table_t *t, ...)
+#if defined(__GNUC__) && __GNUC__ >= 4
+    __attribute__((sentinel))
+#endif
+    ;
 
 /** 
  * Iterate over a table running the provided function once for every
- * element in the table.  The @param vp varargs paramater must be a
+ * element in the table.  The @param vp varargs parameter must be a
  * list of zero or more (char *) keys followed by a NULL pointer.  If
  * zero keys are given, the @param comp function will be invoked for
  * every element in the table.  Otherwise, the function is invoked
@@ -416,6 +432,8 @@
  * @param flags How to add the table to table a.  One of:
  *          APR_OVERLAP_TABLES_SET        Use apr_table_setn
  *          APR_OVERLAP_TABLES_MERGE      Use apr_table_mergen
+ * @remark  When merging duplicates, the two values are concatenated,
+ *          separated by the string ", ".
  * @remark  This function is highly optimized, and uses less memory and CPU cycles
  *          than a function that just loops through table b calling other functions.
  */
@@ -450,11 +468,13 @@
 
 /**
  * Eliminate redundant entries in a table by either overwriting
- * or merging duplicates
+ * or merging duplicates.
  *
  * @param t Table.
  * @param flags APR_OVERLAP_TABLES_MERGE to merge, or
  *              APR_OVERLAP_TABLES_SET to overwrite
+ * @remark When merging duplicates, the two values are concatenated,
+ *         separated by the string ", ".
  */
 APR_DECLARE(void) apr_table_compress(apr_table_t *t, unsigned flags);
 

Modified: trunk/GME/Include/apr/apr_thread_proc.h
==============================================================================
--- trunk/GME/Include/apr/apr_thread_proc.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_thread_proc.h	Tue May 21 15:37:55 2013	(r2202)
@@ -730,13 +730,13 @@
  * <pre>
  * rv = apr_proc_wait_all_procs(&proc, &exitcode, &status, APR_WAIT, p);
  * if (APR_STATUS_IS_CHILD_DONE(rv)) {
- * #if APR_HAS_OTHER_CHILD
+ * \#if APR_HAS_OTHER_CHILD
  *     if (apr_proc_other_child_alert(&proc, APR_OC_REASON_DEATH, status)
  *             == APR_SUCCESS) {
  *         ;  (already handled)
  *     }
  *     else
- * #endif
+ * \#endif
  *         [... handling non-otherchild processes death ...]
  * </pre>
  */

Modified: trunk/GME/Include/apr/apr_time.h
==============================================================================
--- trunk/GME/Include/apr/apr_time.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_time.h	Tue May 21 15:37:55 2013	(r2202)
@@ -72,7 +72,10 @@
 /** @return apr_time_t as a msec */
 #define apr_time_as_msec(time) ((time) / 1000)
 
-/** @return a second as an apr_time_t */
+/** @return milliseconds as an apr_time_t */
+#define apr_time_from_msec(msec) ((apr_time_t)(msec) * 1000)
+
+/** @return seconds as an apr_time_t */
 #define apr_time_from_sec(sec) ((apr_time_t)(sec) * APR_USEC_PER_SEC)
 
 /** @return a second and usec combination as an apr_time_t */

Modified: trunk/GME/Include/apr/apr_version.h
==============================================================================
--- trunk/GME/Include/apr/apr_version.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_version.h	Tue May 21 15:37:55 2013	(r2202)
@@ -53,13 +53,13 @@
  * Minor API changes that do not cause binary compatibility problems.
  * Reset to 0 when upgrading APR_MAJOR_VERSION
  */
-#define APR_MINOR_VERSION       3
+#define APR_MINOR_VERSION       4
 
 /** patch level 
  * The Patch Level never includes API changes, simply bug fixes.
  * Reset to 0 when upgrading APR_MINOR_VERSION
  */
-#define APR_PATCH_VERSION       9
+#define APR_PATCH_VERSION       6
 
 /** 
  * The symbol APR_IS_DEV_VERSION is only defined for internal,

Modified: trunk/GME/Include/apr/apr_want.h
==============================================================================
--- trunk/GME/Include/apr/apr_want.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/apr_want.h	Tue May 21 15:37:55 2013	(r2202)
@@ -30,9 +30,9 @@
  *
  * Typical usage:
  *
- *   #define APR_WANT_STRFUNC
- *   #define APR_WANT_MEMFUNC
- *   #include "apr_want.h"
+ *   \#define APR_WANT_STRFUNC
+ *   \#define APR_WANT_MEMFUNC
+ *   \#include "apr_want.h"
  *
  * The appropriate headers will be included.
  *
@@ -89,19 +89,16 @@
 
 #else
 
+#ifndef APR_IOVEC_DEFINED
+#define APR_IOVEC_DEFINED
 struct iovec
 {
-    char *iov_base;
+    void *iov_base;
     size_t iov_len;
 };
+#endif /* !APR_IOVEC_DEFINED */
 
-#endif
-
-/* apr_want is included at several layers; redefining APR_HAVE_IOVEC
- * now to ensure that our struct is not introduced several times.
- */
-#undef APR_HAVE_IOVEC
-#define APR_HAVE_IOVEC 1
+#endif /* APR_HAVE_IOVEC */
 
 #undef APR_WANT_IOVEC
 #endif

Modified: trunk/GME/Include/apr/arch/netware/apr_arch_file_io.h
==============================================================================
--- trunk/GME/Include/apr/arch/netware/apr_arch_file_io.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/arch/netware/apr_arch_file_io.h	Tue May 21 15:37:55 2013	(r2202)
@@ -165,6 +165,9 @@
 apr_status_t apr_unix_file_cleanup(void *);
 apr_status_t apr_unix_child_file_cleanup(void *);
 
+mode_t apr_unix_perms2mode(apr_fileperms_t perms);
+apr_fileperms_t apr_unix_mode2perms(mode_t mode);
+
 apr_status_t apr_file_flush_locked(apr_file_t *thefile);
 apr_status_t apr_file_info_get_locked(apr_finfo_t *finfo, apr_int32_t wanted,
                                       apr_file_t *thefile);

Modified: trunk/GME/Include/apr/arch/netware/apr_arch_pre_nw.h
==============================================================================
--- trunk/GME/Include/apr/arch/netware/apr_arch_pre_nw.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/arch/netware/apr_arch_pre_nw.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,16 +1,3 @@
-#ifndef __pre_nw__
-#define __pre_nw__
-
-#include <stdint.h>
-
-#ifndef __GNUC__
-#pragma precompile_target "precomp.mch"
-#endif
-
-#define NETWARE
-
-#define N_PLAT_NLM
-
 /* Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -26,6 +13,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#ifndef __pre_nw__
+#define __pre_nw__
+
+#include <stdint.h>
+
+#ifndef __GNUC__
+#pragma precompile_target "precomp.mch"
+#endif
+
+#define NETWARE
+
+#define N_PLAT_NLM
+
 #define FAR
 #define far
 
@@ -51,16 +51,6 @@
 #define __int64 long long
 #endif
 
-/* expat version */
-#define VERSION "expat_1.95.1"
-#define EXPAT_MAJOR_VERSION     1
-#define EXPAT_MINOR_VERSION     95
-#define EXPAT_EDIT              2
-
-#define XML_MAJOR_VERSION       EXPAT_MAJOR_VERSION
-#define XML_MINOR_VERSION       EXPAT_MINOR_VERSION
-#define XML_MICRO_VERSION       EXPAT_EDIT
-
 #endif
 
 

Modified: trunk/GME/Include/apr/arch/netware/apr_arch_threadproc.h
==============================================================================
--- trunk/GME/Include/apr/arch/netware/apr_arch_threadproc.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/arch/netware/apr_arch_threadproc.h	Tue May 21 15:37:55 2013	(r2202)
@@ -68,11 +68,13 @@
     unsigned long value;
 };
 
-//struct apr_proc_t {
-//    apr_pool_t *pool;
-//    pid_t pid;
-//    apr_procattr_t *attr;
-//};
+/*
+struct apr_proc_t {
+    apr_pool_t *pool;
+    pid_t pid;
+    apr_procattr_t *attr;
+};
+*/
 
 #endif  /* ! THREAD_PROC_H */
 

Modified: trunk/GME/Include/apr/arch/netware/apr_private.h
==============================================================================
--- trunk/GME/Include/apr/arch/netware/apr_private.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/arch/netware/apr_private.h	Tue May 21 15:37:55 2013	(r2202)
@@ -16,8 +16,8 @@
 
 /*
  * Note: 
- * This is the windows specific autoconf-like config file
- * which unix would create at build time.
+ * This is the netware-specific autoconf-like config file
+ * which unix creates at ./configure time.
  */
 
 #ifdef NETWARE
@@ -25,10 +25,16 @@
 #ifndef APR_PRIVATE_H
 #define APR_PRIVATE_H
 
-/* Include the public APR symbols, include our idea of the 'right'
- * subset of the Windows.h header.  This saves us repetition.
+/* Pick up publicly advertised headers and symbols before the
+ * APR internal private headers and symbols
  */
-#include "apr.h"
+#include <apr.h>
+
+/* Pick up privately consumed headers */
+#include <ndkvers.h>
+
+/* Include alloca.h to get compiler-dependent defines */ 
+#include <alloca.h>
 
 #include <sys/types.h>
 #include <stddef.h>
@@ -72,16 +78,13 @@
 
 #define HAVE_GETPASS_R  1
 /*
- * check for older NDKs which have only the getpassword() function.
+ * Hack around older NDKs which have only the getpassword() function,
+ * a threadsafe, API-equivilant of getpass_r().
  */
-#include <ndkvers.h>
 #if (CURRENT_NDK_THRESHOLD < 709060000)
-#define getpass_r getpassword
+#define getpass_r       getpassword
 #endif
 
-/* 64-bit integer conversion function */
-#define APR_INT64_STRFN	      strtoll
-
 /*#define DSO_USE_DLFCN */
 
 #ifdef NW_BUILD_IPV6
@@ -97,8 +100,8 @@
 /* 6 is used for SIGTERM on netware */
 /* 7 is used for SIGPOLL on netware */
 
+#if (CURRENT_NDK_THRESHOLD < 306030000)
 #define SIGKILL         11
-#define SA_NOCLDSTOP    12
 #define SIGALRM         13
 #define SIGCHLD         14 
 #define SIGCONT         15
@@ -111,10 +114,10 @@
 #define SIGTTOU         22
 #define SIGUSR1         23
 #define SIGUSR2         24
-    
+#endif
+
 #define SIGTRAP         25
 #define SIGIOT          26
-#define SIGBUS          27
 #define SIGSTKFLT       28
 #define SIGURG          29
 #define SIGXCPU         30
@@ -124,29 +127,23 @@
 #define SIGWINCH        34
 #define SIGIO           35
 
-#if 0
-#define __attribute__(__x) 
-
-/* APR COMPATABILITY FUNCTIONS
- * This section should be used to define functions and
- * macros which are need to make Windows features look
- * like POSIX features.
- */
-typedef void (Sigfunc)(int);
+#if (CURRENT_NDK_THRESHOLD < 406230000)
+#undef  SA_NOCLDSTOP
+#define SA_NOCLDSTOP    0x00000001
+#endif
+#ifndef SIGBUS
+#define SIGBUS          SIGSEGV
 #endif
 
-#define strcasecmp(s1, s2)       stricmp(s1, s2)
-#define Sleep(t)                 delay(t)
-#define lstat(a,b)               stat(a,b)
-#define _getch()                 getcharacter()
+#define _getch          getcharacter
 
-#define SIZEOF_SHORT           2
-#define SIZEOF_INT             4
-#define SIZEOF_LONGLONG        8
-#define SIZEOF_CHAR            1
-#define SIZEOF_SSIZE_T         SIZEOF_INT
+#define SIZEOF_SHORT    2
+#define SIZEOF_INT      4
+#define SIZEOF_LONGLONG 8
+#define SIZEOF_CHAR     1
+#define SIZEOF_SSIZE_T  SIZEOF_INT
 
-void netware_pool_proc_cleanup ();
+void netware_pool_proc_cleanup();
 
 /* NLM registration routines for managing which NLMs
     are using the library. */
@@ -183,15 +180,21 @@
     and can be shared by the library. */
 #undef malloc
 #define malloc(x) library_malloc(gLibHandle,x)
+#ifndef __MWERKS__
+#define _alloca         alloca
+#endif
+
+/* 64-bit integer conversion function */
+#define APR_INT64_STRFN strtoll
 
 #if APR_HAS_LARGE_FILES
-#define APR_OFF_T_STRFN       strtoll
+#define APR_OFF_T_STRFN strtoll
 #else
-#define APR_OFF_T_STRFN       strtol
+#define APR_OFF_T_STRFN strtol
 #endif
 
 /* used to check DWORD overflow for 64bit compiles */
-#define APR_DWORD_MAX 0xFFFFFFFFUL
+#define APR_DWORD_MAX   0xFFFFFFFFUL
 
 /*
  * Include common private declarations.

Modified: trunk/GME/Include/apr/arch/os2/apr_arch_file_io.h
==============================================================================
--- trunk/GME/Include/apr/arch/os2/apr_arch_file_io.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/arch/os2/apr_arch_file_io.h	Tue May 21 15:37:55 2013	(r2202)
@@ -49,12 +49,13 @@
 
     /* Stuff for buffered mode */
     char *buffer;
-    apr_size_t bufsize;       // Read/Write position in buffer
-    apr_size_t bufpos;        // Read/Write position in buffer
-    unsigned long dataRead;   // amount of valid data read into buffer
-    int direction;            // buffer being used for 0 = read, 1 = write
-    unsigned long filePtr;    // position in file of handle
-    apr_thread_mutex_t *mutex;// mutex semaphore, must be owned to access the above fields
+    apr_size_t bufsize;        /* Read/Write position in buffer             */
+    apr_size_t bufpos;         /* Read/Write position in buffer             */
+    unsigned long dataRead;    /* amount of valid data read into buffer     */
+    int direction;             /* buffer being used for 0 = read, 1 = write */
+    unsigned long filePtr;     /* position in file of handle                */
+    apr_thread_mutex_t *mutex; /* mutex semaphore, must be owned to access
+                                  the above fields                          */
 };
 
 struct apr_dir_t {

Modified: trunk/GME/Include/apr/arch/unix/apr_arch_inherit.h
==============================================================================
--- trunk/GME/Include/apr/arch/unix/apr_arch_inherit.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/arch/unix/apr_arch_inherit.h	Tue May 21 15:37:55 2013	(r2202)
@@ -24,7 +24,7 @@
 #define APR_IMPLEMENT_INHERIT_SET(name, flag, pool, cleanup)        \
 apr_status_t apr_##name##_inherit_set(apr_##name##_t *the##name)    \
 {                                                                   \
-    if (the##name->flag & APR_FILE_NOCLEANUP)                       \
+    if (the##name->flag & APR_FOPEN_NOCLEANUP)                      \
         return APR_EINVAL;                                          \
     if (!(the##name->flag & APR_INHERIT)) {                         \
         int flags = fcntl(the##name->name##des, F_GETFD);           \
@@ -44,7 +44,7 @@
 #define APR_IMPLEMENT_INHERIT_UNSET(name, flag, pool, cleanup)      \
 apr_status_t apr_##name##_inherit_unset(apr_##name##_t *the##name)  \
 {                                                                   \
-    if (the##name->flag & APR_FILE_NOCLEANUP)                       \
+    if (the##name->flag & APR_FOPEN_NOCLEANUP)                      \
         return APR_EINVAL;                                          \
     if (the##name->flag & APR_INHERIT) {                            \
         int flags;                                                  \

Modified: trunk/GME/Include/apr/arch/unix/apr_arch_poll_private.h
==============================================================================
--- trunk/GME/Include/apr/arch/unix/apr_arch_poll_private.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/arch/unix/apr_arch_poll_private.h	Tue May 21 15:37:55 2013	(r2202)
@@ -17,13 +17,6 @@
 #ifndef APR_ARCH_POLL_PRIVATE_H
 #define APR_ARCH_POLL_PRIVATE_H
 
-#include "apr.h"
-#include "apr_poll.h"
-#include "apr_time.h"
-#include "apr_portable.h"
-#include "apr_arch_networkio.h"
-#include "apr_arch_file_io.h"
-
 #if HAVE_POLL_H
 #include <poll.h>
 #endif
@@ -55,21 +48,32 @@
 /* Choose the best method platform specific to use in apr_pollset */
 #ifdef HAVE_KQUEUE
 #define POLLSET_USES_KQUEUE
+#define POLLSET_DEFAULT_METHOD APR_POLLSET_KQUEUE
 #elif defined(HAVE_PORT_CREATE)
 #define POLLSET_USES_PORT
+#define POLLSET_DEFAULT_METHOD APR_POLLSET_PORT
 #elif defined(HAVE_EPOLL)
 #define POLLSET_USES_EPOLL
+#define POLLSET_DEFAULT_METHOD APR_POLLSET_EPOLL
 #elif defined(HAVE_POLL)
 #define POLLSET_USES_POLL
+#define POLLSET_DEFAULT_METHOD APR_POLLSET_POLL
 #else
 #define POLLSET_USES_SELECT
+#define POLLSET_DEFAULT_METHOD APR_POLLSET_SELECT
 #endif
 
+#ifdef WIN32
+#define POLL_USES_SELECT
+#undef POLLSET_DEFAULT_METHOD
+#define POLLSET_DEFAULT_METHOD APR_POLLSET_SELECT
+#else
 #ifdef HAVE_POLL
 #define POLL_USES_POLL
 #else
 #define POLL_USES_SELECT
 #endif
+#endif
 
 #if defined(POLLSET_USES_KQUEUE) || defined(POLLSET_USES_EPOLL) || defined(POLLSET_USES_PORT)
 
@@ -79,10 +83,10 @@
 #include "apr_thread_mutex.h"
 #define pollset_lock_rings() \
     if (pollset->flags & APR_POLLSET_THREADSAFE) \
-        apr_thread_mutex_lock(pollset->ring_lock);
+        apr_thread_mutex_lock(pollset->p->ring_lock);
 #define pollset_unlock_rings() \
     if (pollset->flags & APR_POLLSET_THREADSAFE) \
-        apr_thread_mutex_unlock(pollset->ring_lock);
+        apr_thread_mutex_unlock(pollset->p->ring_lock);
 #else
 #define pollset_lock_rings()
 #define pollset_unlock_rings()
@@ -93,8 +97,73 @@
 struct pfd_elem_t {
     APR_RING_ENTRY(pfd_elem_t) link;
     apr_pollfd_t pfd;
+#ifdef HAVE_PORT_CREATE
+   int on_query_ring;
+#endif
 };
 
 #endif
 
+typedef struct apr_pollset_private_t apr_pollset_private_t;
+typedef struct apr_pollset_provider_t apr_pollset_provider_t;
+typedef struct apr_pollcb_provider_t apr_pollcb_provider_t;
+struct apr_pollset_t
+{
+    apr_pool_t *pool;
+    apr_uint32_t nelts;
+    apr_uint32_t nalloc;
+    apr_uint32_t flags;
+    /* Pipe descriptors used for wakeup */
+    apr_file_t *wakeup_pipe[2];
+    apr_pollfd_t wakeup_pfd;
+    apr_pollset_private_t *p;
+    apr_pollset_provider_t *provider;
+};
+
+typedef union {
+#if defined(HAVE_EPOLL)
+    struct epoll_event *epoll;
+#endif
+#if defined(HAVE_PORT_CREATE)
+    port_event_t *port;
+#endif
+#if defined(HAVE_KQUEUE)
+    struct kevent *ke;
+#endif
+#if defined(HAVE_POLL)
+    struct pollfd *ps;
+#endif
+    void *undef;
+} apr_pollcb_pset;
+
+struct apr_pollcb_t {
+    apr_pool_t *pool;
+    apr_uint32_t nelts;
+    apr_uint32_t nalloc;
+    int fd;
+    apr_pollcb_pset pollset;
+    apr_pollfd_t **copyset;
+    apr_pollcb_provider_t *provider;
+};
+
+struct apr_pollset_provider_t {
+    apr_status_t (*create)(apr_pollset_t *, apr_uint32_t, apr_pool_t *, apr_uint32_t);
+    apr_status_t (*add)(apr_pollset_t *, const apr_pollfd_t *);
+    apr_status_t (*remove)(apr_pollset_t *, const apr_pollfd_t *);
+    apr_status_t (*poll)(apr_pollset_t *, apr_interval_time_t, apr_int32_t *, const apr_pollfd_t **);
+    apr_status_t (*cleanup)(apr_pollset_t *);
+    const char *name;
+};
+
+struct apr_pollcb_provider_t {
+    apr_status_t (*create)(apr_pollcb_t *, apr_uint32_t, apr_pool_t *, apr_uint32_t);
+    apr_status_t (*add)(apr_pollcb_t *, apr_pollfd_t *);
+    apr_status_t (*remove)(apr_pollcb_t *, apr_pollfd_t *);
+    apr_status_t (*poll)(apr_pollcb_t *, apr_interval_time_t, apr_pollcb_cb_t, void *);
+    const char *name;
+};
+
+/* Private functions */
+void apr_pollset_drain_wakeup_pipe(apr_pollset_t *pollset);
+
 #endif /* APR_ARCH_POLL_PRIVATE_H */

Modified: trunk/GME/Include/apr/arch/win32/apr_arch_file_io.h
==============================================================================
--- trunk/GME/Include/apr/arch/win32/apr_arch_file_io.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/arch/win32/apr_arch_file_io.h	Tue May 21 15:37:55 2013	(r2202)
@@ -155,13 +155,13 @@
  *           correctly when writing to a file with this flag set TRUE.
  */
 
-// for apr_poll.c;
+/* for apr_poll.c */
 #define filedes filehand
 
 struct apr_file_t {
     apr_pool_t *pool;
     HANDLE filehand;
-    BOOLEAN pipe;              // Is this a pipe of a file?
+    BOOLEAN pipe;              /* Is this a pipe of a file? */
     OVERLAPPED *pOverlapped;
     apr_interval_time_t timeout;
     apr_int32_t flags;
@@ -252,4 +252,12 @@
 
 apr_status_t file_cleanup(void *);
 
+extern apr_status_t
+apr_file_socket_pipe_create(apr_file_t **in,
+                            apr_file_t **out,
+                            apr_pool_t *p);
+
+extern apr_status_t
+apr_file_socket_pipe_close(apr_file_t *file);
+
 #endif  /* ! FILE_IO_H */

Modified: trunk/GME/Include/apr/arch/win32/apr_arch_misc.h
==============================================================================
--- trunk/GME/Include/apr/arch/win32/apr_arch_misc.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/apr/arch/win32/apr_arch_misc.h	Tue May 21 15:37:55 2013	(r2202)
@@ -66,7 +66,7 @@
  */
 extern int APR_DECLARE_DATA apr_app_init_complete;
 
-int apr_wastrtoastr(char const * const * *retarr, 
+int apr_wastrtoastr(char const * const * *retarr,
                     wchar_t const * const *arr, int args);
 
 /* Platform specific designation of run time os version.
@@ -74,38 +74,38 @@
  * export new kernel or winsock functions or behavior.
  */
 typedef enum {
-        APR_WIN_UNK =       0,
-        APR_WIN_UNSUP =     1,
-        APR_WIN_95 =       10,
-        APR_WIN_95_B =     11,
-        APR_WIN_95_OSR2 =  12,
-        APR_WIN_98 =       14,
-        APR_WIN_98_SE =    16,
-        APR_WIN_ME =       18,
-
-	APR_WIN_UNICODE =  20, /* Prior versions support only narrow chars */
-
-        APR_WIN_CE_3 =     23, /* CE is an odd beast, not supporting */
-                               /* some pre-NT features, such as the    */
-        APR_WIN_NT =       30, /* narrow charset APIs (fooA fns), while  */
-        APR_WIN_NT_3_5 =   35, /* not supporting some NT-family features.  */
-        APR_WIN_NT_3_51 =  36,
-
-        APR_WIN_NT_4 =     40,
-        APR_WIN_NT_4_SP2 = 42,
-        APR_WIN_NT_4_SP3 = 43,
-        APR_WIN_NT_4_SP4 = 44,
-        APR_WIN_NT_4_SP5 = 45,
-        APR_WIN_NT_4_SP6 = 46,
-
-        APR_WIN_2000 =     50,
-        APR_WIN_2000_SP1 = 51,
-        APR_WIN_2000_SP2 = 52,
-        APR_WIN_XP =       60,
-        APR_WIN_XP_SP1 =   61,
-        APR_WIN_XP_SP2 =   62,
-        APR_WIN_2003 =     70,
-        APR_WIN_VISTA =    80
+    APR_WIN_UNK =       0,
+    APR_WIN_UNSUP =     1,
+    APR_WIN_95 =       10,
+    APR_WIN_95_B =     11,
+    APR_WIN_95_OSR2 =  12,
+    APR_WIN_98 =       14,
+    APR_WIN_98_SE =    16,
+    APR_WIN_ME =       18,
+
+    APR_WIN_UNICODE =  20, /* Prior versions support only narrow chars */
+
+    APR_WIN_CE_3 =     23, /* CE is an odd beast, not supporting */
+                           /* some pre-NT features, such as the    */
+    APR_WIN_NT =       30, /* narrow charset APIs (fooA fns), while  */
+    APR_WIN_NT_3_5 =   35, /* not supporting some NT-family features.  */
+    APR_WIN_NT_3_51 =  36,
+
+    APR_WIN_NT_4 =     40,
+    APR_WIN_NT_4_SP2 = 42,
+    APR_WIN_NT_4_SP3 = 43,
+    APR_WIN_NT_4_SP4 = 44,
+    APR_WIN_NT_4_SP5 = 45,
+    APR_WIN_NT_4_SP6 = 46,
+
+    APR_WIN_2000 =     50,
+    APR_WIN_2000_SP1 = 51,
+    APR_WIN_2000_SP2 = 52,
+    APR_WIN_XP =       60,
+    APR_WIN_XP_SP1 =   61,
+    APR_WIN_XP_SP2 =   62,
+    APR_WIN_2003 =     70,
+    APR_WIN_VISTA =    80
 } apr_oslevel_e;
 
 extern APR_DECLARE_DATA apr_oslevel_e apr_os_level;
@@ -172,13 +172,13 @@
 #endif  /* ! _MSC_VER */
 
 typedef enum {
-    DLL_WINBASEAPI = 0,    // kernel32 From WinBase.h
-    DLL_WINADVAPI = 1,     // advapi32 From WinBase.h
-    DLL_WINSOCKAPI = 2,    // mswsock  From WinSock.h
-    DLL_WINSOCK2API = 3,   // ws2_32   From WinSock2.h
-    DLL_SHSTDAPI = 4,      // shell32  From ShellAPI.h
-    DLL_NTDLL = 5,         // shell32  From our real kernel
-    DLL_defined = 6        // must define as last idx_ + 1
+    DLL_WINBASEAPI = 0,    /* kernel32 From WinBase.h       */
+    DLL_WINADVAPI = 1,     /* advapi32 From WinBase.h       */
+    DLL_WINSOCKAPI = 2,    /* mswsock  From WinSock.h       */
+    DLL_WINSOCK2API = 3,   /* ws2_32   From WinSock2.h      */
+    DLL_SHSTDAPI = 4,      /* shell32  From ShellAPI.h      */
+    DLL_NTDLL = 5,         /* shell32  From our real kernel */
+    DLL_defined = 6        /* must define as last idx_ + 1  */
 } apr_dlltoken_e;
 
 FARPROC apr_load_dll_func(apr_dlltoken_e fnLib, char *fnName, int ordinal);
@@ -186,18 +186,24 @@
 /* The apr_load_dll_func call WILL return 0 set error to
  * ERROR_INVALID_FUNCTION if the function cannot be loaded
  */
-
 #define APR_DECLARE_LATE_DLL_FUNC(lib, rettype, calltype, fn, ord, args, names) \
     typedef rettype (calltype *apr_winapi_fpt_##fn) args; \
     static apr_winapi_fpt_##fn apr_winapi_pfn_##fn = NULL; \
-    static APR_INLINE rettype apr_winapi_##fn args \
-    {   if (!apr_winapi_pfn_##fn) \
+    static int apr_winapi_chk_##fn = 0; \
+    static APR_INLINE int apr_winapi_ld_##fn(void) \
+    {   if (apr_winapi_pfn_##fn) return 1; \
+        if (apr_winapi_chk_##fn ++) return 0; \
+        if (!apr_winapi_pfn_##fn) \
             apr_winapi_pfn_##fn = (apr_winapi_fpt_##fn) \
                                       apr_load_dll_func(lib, #fn, ord); \
-        if (apr_winapi_pfn_##fn) \
+        if (apr_winapi_pfn_##fn) return 1; else return 0; }; \
+    static APR_INLINE rettype apr_winapi_##fn args \
+    {   if (apr_winapi_ld_##fn()) \
             return (*(apr_winapi_pfn_##fn)) names; \
         else { SetLastError(ERROR_INVALID_FUNCTION); return 0;} }; \
 
+#define APR_HAVE_LATE_DLL_FUNC(fn) apr_winapi_ld_##fn()
+
 /* Provide late bound declarations of every API function missing from
  * one or more supported releases of the Win32 API
  *
@@ -273,8 +279,8 @@
     OUT PACL *ppDacl,
     OUT PACL *ppSacl,
     OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor),
-    (pObjectName, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup, 
-	 ppDacl, ppSacl, ppSecurityDescriptor));
+    (pObjectName, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup,
+        ppDacl, ppSacl, ppSecurityDescriptor));
 #define GetNamedSecurityInfoW apr_winapi_GetNamedSecurityInfoW
 
 APR_DECLARE_LATE_DLL_FUNC(DLL_WINADVAPI, BOOL, WINAPI, GetNamedSecurityInfoA, 0, (
@@ -286,8 +292,8 @@
     OUT PACL *ppDacl,
     OUT PACL *ppSacl,
     OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor),
-    (pObjectName, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup, 
-	 ppDacl, ppSacl, ppSecurityDescriptor));
+    (pObjectName, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup,
+        ppDacl, ppSacl, ppSecurityDescriptor));
 #define GetNamedSecurityInfoA apr_winapi_GetNamedSecurityInfoA
 #undef GetNamedSecurityInfo
 #define GetNamedSecurityInfo apr_winapi_GetNamedSecurityInfoA
@@ -301,12 +307,12 @@
     OUT PACL *ppDacl,
     OUT PACL *ppSacl,
     OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor),
-    (handle, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup, 
-	 ppDacl, ppSacl, ppSecurityDescriptor));
+    (handle, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup,
+        ppDacl, ppSacl, ppSecurityDescriptor));
 #define GetSecurityInfo apr_winapi_GetSecurityInfo
 
 APR_DECLARE_LATE_DLL_FUNC(DLL_SHSTDAPI, LPWSTR *, WINAPI, CommandLineToArgvW, 0, (
-    LPCWSTR lpCmdLine, 
+    LPCWSTR lpCmdLine,
     int *pNumArgs),
     (lpCmdLine, pNumArgs));
 #define CommandLineToArgvW apr_winapi_CommandLineToArgvW
@@ -432,6 +438,49 @@
     (hSnapshot, lppe));
 #define Process32NextW apr_winapi_Process32NextW
 
+#if !defined(POLLERR)
+/* Event flag definitions for WSAPoll(). */
+#define POLLRDNORM  0x0100
+#define POLLRDBAND  0x0200
+#define POLLIN      (POLLRDNORM | POLLRDBAND)
+#define POLLPRI     0x0400
+
+#define POLLWRNORM  0x0010
+#define POLLOUT     (POLLWRNORM)
+#define POLLWRBAND  0x0020
+
+#define POLLERR     0x0001
+#define POLLHUP     0x0002
+#define POLLNVAL    0x0004
+
+typedef struct pollfd {
+    SOCKET  fd;
+    SHORT   events;
+    SHORT   revents;
+
+} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;
+
+#endif /* !defined(POLLERR) */
+#ifdef WSAPoll
+#undef WSAPoll
+#endif
+APR_DECLARE_LATE_DLL_FUNC(DLL_WINSOCK2API, int, WSAAPI, WSAPoll, 0, (
+    IN OUT LPWSAPOLLFD fdArray,
+    IN ULONG fds,
+    IN INT timeout),
+    (fdArray, fds, timeout));
+#define WSAPoll apr_winapi_WSAPoll
+#define HAVE_POLL   1
+
+#ifdef SetDllDirectoryW
+#undef SetDllDirectoryW
+#endif
+APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, SetDllDirectoryW, 0, (
+    IN LPCWSTR lpPathName),
+    (lpPathName));
+#define SetDllDirectoryW apr_winapi_SetDllDirectoryW
+
 #endif /* !defined(_WIN32_WCE) */
 
 #endif  /* ! MISC_H */
+

Modified: trunk/GME/Include/subversion/mod_authz_svn.h
==============================================================================
--- trunk/GME/Include/subversion/mod_authz_svn.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/mod_authz_svn.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2007 CollabNet.  All rights reserved.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
  *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *

Modified: trunk/GME/Include/subversion/mod_dav_svn.h
==============================================================================
--- trunk/GME/Include/subversion/mod_dav_svn.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/mod_dav_svn.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2007 CollabNet.  All rights reserved.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
  *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -32,22 +37,25 @@
 #endif /* __cplusplus */
 
 
-/* Given an apache request R, a URI, and a ROOT_PATH to the svn
-   location block, process URI and return many things, allocated in
-   r->pool:
+/**
+   Given an apache request @a r, a @a uri, and a @a root_path to the svn
+   location block, process @a uri and return many things, allocated in
+   @a r->pool:
 
-   * CLEANED_URI:     The uri with duplicate and trailing slashes removed.
+   - @a cleaned_uri:    The uri with duplicate and trailing slashes removed.
 
-   * TRAILING_SLASH:  Whether the uri had a trailing slash on it.
+   - @a trailing_slash: Whether the uri had a trailing slash on it.
 
    Three special substrings of the uri are returned for convenience:
 
-   * REPOS_NAME:      The single path component that is the directory
-                      which contains the repository.
+   - @a repos_basename: The single path component that is the directory
+                      which contains the repository.  (Don't confuse
+                      this with the "repository name" as optionally
+                      defined via the SVNReposName directive!)
 
-   * RELATIVE_PATH:   The remaining imaginary path components.
+   - @a relative_path:  The remaining imaginary path components.
 
-   * REPOS_PATH:      The actual path within the repository filesystem, or
+   - @a repos_path:     The actual path within the repository filesystem, or
                       NULL if no part of the uri refers to a path in
                       the repository (e.g. "!svn/vcc/default" or
                       "!svn/bln/25").
@@ -57,29 +65,29 @@
 
        /svn/repos/proj1/!svn/blah/13//A/B/alpha
 
-   In the SVNPath case, this function would receive a ROOT_PATH of
+   In the SVNPath case, this function would receive a @a root_path of
    '/svn/repos/proj1', and in the SVNParentPath case would receive a
-   ROOT_PATH of '/svn/repos'.  But either way, we would get back:
+   @a root_path of '/svn/repos'.  But either way, we would get back:
 
-     * CLEANED_URI:    /svn/repos/proj1/!svn/blah/13/A/B/alpha
-     * REPOS_NAME:     proj1
-     * RELATIVE_PATH:  /!svn/blah/13/A/B/alpha
-     * REPOS_PATH:     A/B/alpha
-     * TRAILING_SLASH: FALSE
+     - @a cleaned_uri:    /svn/repos/proj1/!svn/blah/13/A/B/alpha
+     - @a repos_basename: proj1
+     - @a relative_path:  /!svn/blah/13/A/B/alpha
+     - @a repos_path:     A/B/alpha
+     - @a trailing_slash: FALSE
 */
 AP_MODULE_DECLARE(dav_error *) dav_svn_split_uri(request_rec *r,
                                                  const char *uri,
                                                  const char *root_path,
                                                  const char **cleaned_uri,
                                                  int *trailing_slash,
-                                                 const char **repos_name,
+                                                 const char **repos_basename,
                                                  const char **relative_path,
                                                  const char **repos_path);
 
 
-/* Given an apache request R and a ROOT_PATH to the svn location
-   block sets *REPOS_PATH to the path of the repository on disk.
-*/
+/**
+ * Given an apache request @a r and a @a root_path to the svn location
+ * block, set @a *repos_path to the path of the repository on disk.  */
 AP_MODULE_DECLARE(dav_error *) dav_svn_get_repos_path(request_rec *r,
                                                       const char *root_path,
                                                       const char **repos_path);

Modified: trunk/GME/Include/subversion/svn_auth.h
==============================================================================
--- trunk/GME/Include/subversion/svn_auth.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_auth.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2002-2009 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -29,7 +34,6 @@
 
 #include "svn_types.h"
 #include "svn_config.h"
-#include "svn_version.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -159,9 +163,9 @@
 } svn_auth_provider_object_t;
 
 /** The type of function returning authentication provider. */
-typedef void (*svn_auth_simple_provider_func_t)
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+typedef void (*svn_auth_simple_provider_func_t)(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 
 /** Specific types of credentials **/
@@ -245,9 +249,9 @@
 
 
 /** A function returning an SSL client certificate passphrase provider. */
-typedef void (*svn_auth_ssl_client_cert_pw_provider_func_t)
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+typedef void (*svn_auth_ssl_client_cert_pw_provider_func_t)(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 /** SSL client certificate passphrase credential type.
  *
@@ -369,13 +373,13 @@
  * client with a remember password checkbox would grey out the checkbox if
  * @a may_save is FALSE.
  */
-typedef svn_error_t *(*svn_auth_simple_prompt_func_t)
-  (svn_auth_cred_simple_t **cred,
-   void *baton,
-   const char *realm,
-   const char *username,
-   svn_boolean_t may_save,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_auth_simple_prompt_func_t)(
+  svn_auth_cred_simple_t **cred,
+  void *baton,
+  const char *realm,
+  const char *username,
+  svn_boolean_t may_save,
+  apr_pool_t *pool);
 
 
 /** Set @a *cred by prompting the user, allocating @a *cred in @a pool.
@@ -389,12 +393,12 @@
  * client with a remember username checkbox would grey out the checkbox if
  * @a may_save is FALSE.
  */
-typedef svn_error_t *(*svn_auth_username_prompt_func_t)
-  (svn_auth_cred_username_t **cred,
-   void *baton,
-   const char *realm,
-   svn_boolean_t may_save,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_auth_username_prompt_func_t)(
+  svn_auth_cred_username_t **cred,
+  void *baton,
+  const char *realm,
+  svn_boolean_t may_save,
+  apr_pool_t *pool);
 
 
 /** @name SSL server certificate failure bits
@@ -432,14 +436,14 @@
  * client with a trust permanently checkbox would grey out the checkbox if
  * @a may_save is FALSE.
  */
-typedef svn_error_t *(*svn_auth_ssl_server_trust_prompt_func_t)
-  (svn_auth_cred_ssl_server_trust_t **cred,
-   void *baton,
-   const char *realm,
-   apr_uint32_t failures,
-   const svn_auth_ssl_server_cert_info_t *cert_info,
-   svn_boolean_t may_save,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_auth_ssl_server_trust_prompt_func_t)(
+  svn_auth_cred_ssl_server_trust_t **cred,
+  void *baton,
+  const char *realm,
+  apr_uint32_t failures,
+  const svn_auth_ssl_server_cert_info_t *cert_info,
+  svn_boolean_t may_save,
+  apr_pool_t *pool);
 
 
 /** Set @a *cred by prompting the user, allocating @a *cred in @a pool.
@@ -452,12 +456,12 @@
  * client with a remember certificate checkbox would grey out the checkbox
  * if @a may_save is FALSE.
  */
-typedef svn_error_t *(*svn_auth_ssl_client_cert_prompt_func_t)
-  (svn_auth_cred_ssl_client_cert_t **cred,
-   void *baton,
-   const char *realm,
-   svn_boolean_t may_save,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_auth_ssl_client_cert_prompt_func_t)(
+  svn_auth_cred_ssl_client_cert_t **cred,
+  void *baton,
+  const char *realm,
+  svn_boolean_t may_save,
+  apr_pool_t *pool);
 
 
 /** Set @a *cred by prompting the user, allocating @a *cred in @a pool.
@@ -470,12 +474,12 @@
  * client with a remember password checkbox would grey out the checkbox if
  * @a may_save is FALSE.
  */
-typedef svn_error_t *(*svn_auth_ssl_client_cert_pw_prompt_func_t)
-  (svn_auth_cred_ssl_client_cert_pw_t **cred,
-   void *baton,
-   const char *realm,
-   svn_boolean_t may_save,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_auth_ssl_client_cert_pw_prompt_func_t)(
+  svn_auth_cred_ssl_client_cert_pw_t **cred,
+  void *baton,
+  const char *realm,
+  svn_boolean_t may_save,
+  apr_pool_t *pool);
 
 /** A type of callback function for asking whether storing a password to
  * disk in plaintext is allowed.
@@ -490,11 +494,11 @@
  *
  * @since New in 1.6
  */
-typedef svn_error_t *(*svn_auth_plaintext_prompt_func_t)
-  (svn_boolean_t *may_save_plaintext,
-   const char *realmstring,
-   void *baton,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_auth_plaintext_prompt_func_t)(
+  svn_boolean_t *may_save_plaintext,
+  const char *realmstring,
+  void *baton,
+  apr_pool_t *pool);
 
 /** A type of callback function for asking whether storing a passphrase to
  * disk in plaintext is allowed.
@@ -509,11 +513,11 @@
  *
  * @since New in 1.6
  */
-typedef svn_error_t *(*svn_auth_plaintext_passphrase_prompt_func_t)
-  (svn_boolean_t *may_save_plaintext,
-   const char *realmstring,
-   void *baton,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_auth_plaintext_passphrase_prompt_func_t)(
+  svn_boolean_t *may_save_plaintext,
+  const char *realmstring,
+  void *baton,
+  apr_pool_t *pool);
 
 
 /** Initialize an authentication system.
@@ -528,7 +532,7 @@
  */
 void
 svn_auth_open(svn_auth_baton_t **auth_baton,
-              apr_array_header_t *providers,
+              const apr_array_header_t *providers,
               apr_pool_t *pool);
 
 /** Set an authentication run-time parameter.
@@ -719,12 +723,12 @@
  * @since New in 1.4.
  */
 void
-svn_auth_get_username_prompt_provider
-  (svn_auth_provider_object_t **provider,
-   svn_auth_username_prompt_func_t prompt_func,
-   void *prompt_baton,
-   int retry_limit,
-   apr_pool_t *pool);
+svn_auth_get_username_prompt_provider(
+  svn_auth_provider_object_t **provider,
+  svn_auth_username_prompt_func_t prompt_func,
+  void *prompt_baton,
+  int retry_limit,
+  apr_pool_t *pool);
 
 
 /** Set @a *provider to an authentication provider of type @c
@@ -759,11 +763,11 @@
  * @since New in 1.6.
  */
 void
-svn_auth_get_simple_provider2
-  (svn_auth_provider_object_t **provider,
-   svn_auth_plaintext_prompt_func_t plaintext_prompt_func,
-   void *prompt_baton,
-   apr_pool_t *pool);
+svn_auth_get_simple_provider2(
+  svn_auth_provider_object_t **provider,
+  svn_auth_plaintext_prompt_func_t plaintext_prompt_func,
+  void *prompt_baton,
+  apr_pool_t *pool);
 
 /** Like svn_auth_get_simple_provider2, but without the ability to
  * call the svn_auth_plaintext_prompt_func_t callback, and the provider
@@ -778,7 +782,7 @@
                              apr_pool_t *pool);
 
 /** Set @a *provider to an authentication provider of type @c
- * svn_auth_provider_object_t, or return @a NULL if the provider is not
+ * svn_auth_provider_object_t, or return @c NULL if the provider is not
  * available for the requested platform or the requested provider is unknown.
  *
  * Valid @a provider_name values are: "gnome_keyring", "keychain", "kwallet"
@@ -797,11 +801,11 @@
  * @since New in 1.6.
  */
 svn_error_t *
-svn_auth_get_platform_specific_provider
-  (svn_auth_provider_object_t **provider,
-   const char *provider_name,
-   const char *provider_type,
-   apr_pool_t *pool);
+svn_auth_get_platform_specific_provider(
+  svn_auth_provider_object_t **provider,
+  const char *provider_name,
+  const char *provider_type,
+  apr_pool_t *pool);
 
 /** Set @a *providers to an array of <tt>svn_auth_provider_object_t *</tt>
  * objects.
@@ -821,10 +825,10 @@
  * @since New in 1.6.
  */
 svn_error_t *
-svn_auth_get_platform_specific_client_providers
-  (apr_array_header_t **providers,
-   svn_config_t *config,
-   apr_pool_t *pool);
+svn_auth_get_platform_specific_client_providers(
+  apr_array_header_t **providers,
+  svn_config_t *config,
+  apr_pool_t *pool);
 
 #if (defined(WIN32) && !defined(__MINGW32__)) || defined(DOXYGEN)
 /**
@@ -869,9 +873,9 @@
  * if the password were not cached at all.
  */
 void
-svn_auth_get_windows_ssl_client_cert_pw_provider
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+svn_auth_get_windows_ssl_client_cert_pw_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 /**
  * Set @a *provider to an authentication provider of type @c
@@ -886,9 +890,9 @@
  * @note This function is only available on Windows.
  */
 void
-svn_auth_get_windows_ssl_server_trust_provider
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+svn_auth_get_windows_ssl_server_trust_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 #endif /* WIN32 && !__MINGW32__ || DOXYGEN */
 
@@ -922,9 +926,9 @@
  * @note This function is only available on Mac OS 10.2 and higher.
  */
 void
-svn_auth_get_keychain_ssl_client_cert_pw_provider
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+svn_auth_get_keychain_ssl_client_cert_pw_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 #endif /* DARWIN || DOXYGEN */
 
 #if (!defined(DARWIN) && !defined(WIN32)) || defined(DOXYGEN)
@@ -939,11 +943,11 @@
  *
  * @since New in 1.6
  */
-typedef svn_error_t *(*svn_auth_gnome_keyring_unlock_prompt_func_t)
-  (char **keyring_password,
-   const char *keyring_name,
-   void *baton,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_auth_gnome_keyring_unlock_prompt_func_t)(
+  char **keyring_password,
+  const char *keyring_name,
+  void *baton,
+  apr_pool_t *pool);
 
 
 /** libsvn_auth_gnome_keyring-specific run-time parameters. */
@@ -989,9 +993,9 @@
  * libsvn_auth_gnome_keyring and GNOME Keyring installed.
  */
 void
-svn_auth_get_gnome_keyring_simple_provider
-    (svn_auth_provider_object_t **provider,
-     apr_pool_t *pool);
+svn_auth_get_gnome_keyring_simple_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 
 /**
@@ -1016,9 +1020,9 @@
  * libsvn_auth_gnome_keyring and GNOME Keyring installed.
  */
 void
-svn_auth_get_gnome_keyring_ssl_client_cert_pw_provider
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+svn_auth_get_gnome_keyring_ssl_client_cert_pw_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 
 /**
@@ -1062,9 +1066,9 @@
  * and KWallet installed.
  */
 void
-svn_auth_get_kwallet_ssl_client_cert_pw_provider
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+svn_auth_get_kwallet_ssl_client_cert_pw_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 #endif /* (!DARWIN && !WIN32) || DOXYGEN */
 
 
@@ -1094,9 +1098,9 @@
  * @since New in 1.4.
  */
 void
-svn_auth_get_ssl_server_trust_file_provider
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+svn_auth_get_ssl_server_trust_file_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 /** Set @a *provider to an authentication provider of type @c
  * svn_auth_cred_ssl_client_cert_t, allocated in @a pool.
@@ -1108,9 +1112,9 @@
  * @since New in 1.4.
  */
 void
-svn_auth_get_ssl_client_cert_file_provider
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+svn_auth_get_ssl_client_cert_file_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 
 /** Set @a *provider to an authentication provider of type @c
@@ -1136,11 +1140,11 @@
  * @since New in 1.6.
  */
 void
-svn_auth_get_ssl_client_cert_pw_file_provider2
-  (svn_auth_provider_object_t **provider,
-   svn_auth_plaintext_passphrase_prompt_func_t plaintext_passphrase_prompt_func,
-   void *prompt_baton,
-   apr_pool_t *pool);
+svn_auth_get_ssl_client_cert_pw_file_provider2(
+  svn_auth_provider_object_t **provider,
+  svn_auth_plaintext_passphrase_prompt_func_t plaintext_passphrase_prompt_func,
+  void *prompt_baton,
+  apr_pool_t *pool);
 
 /** Like svn_auth_get_ssl_client_cert_pw_file_provider2, but without
  * the ability to call the svn_auth_plaintext_passphrase_prompt_func_t
@@ -1152,9 +1156,9 @@
  */
 SVN_DEPRECATED
 void
-svn_auth_get_ssl_client_cert_pw_file_provider
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+svn_auth_get_ssl_client_cert_pw_file_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 
 /** Set @a *provider to an authentication provider of type @c
@@ -1167,11 +1171,11 @@
  * @since New in 1.4.
  */
 void
-svn_auth_get_ssl_server_trust_prompt_provider
-  (svn_auth_provider_object_t **provider,
-   svn_auth_ssl_server_trust_prompt_func_t prompt_func,
-   void *prompt_baton,
-   apr_pool_t *pool);
+svn_auth_get_ssl_server_trust_prompt_provider(
+  svn_auth_provider_object_t **provider,
+  svn_auth_ssl_server_trust_prompt_func_t prompt_func,
+  void *prompt_baton,
+  apr_pool_t *pool);
 
 
 /** Set @a *provider to an authentication provider of type @c
@@ -1186,12 +1190,12 @@
  * @since New in 1.4.
  */
 void
-svn_auth_get_ssl_client_cert_prompt_provider
-  (svn_auth_provider_object_t **provider,
-   svn_auth_ssl_client_cert_prompt_func_t prompt_func,
-   void *prompt_baton,
-   int retry_limit,
-   apr_pool_t *pool);
+svn_auth_get_ssl_client_cert_prompt_provider(
+  svn_auth_provider_object_t **provider,
+  svn_auth_ssl_client_cert_prompt_func_t prompt_func,
+  void *prompt_baton,
+  int retry_limit,
+  apr_pool_t *pool);
 
 
 /** Set @a *provider to an authentication provider of type @c
@@ -1206,12 +1210,13 @@
  * @since New in 1.4.
  */
 void
-svn_auth_get_ssl_client_cert_pw_prompt_provider
-  (svn_auth_provider_object_t **provider,
-   svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func,
-   void *prompt_baton,
-   int retry_limit,
-   apr_pool_t *pool);
+svn_auth_get_ssl_client_cert_pw_prompt_provider(
+  svn_auth_provider_object_t **provider,
+  svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func,
+  void *prompt_baton,
+  int retry_limit,
+  apr_pool_t *pool);
+
 
 #ifdef __cplusplus
 }

Modified: trunk/GME/Include/subversion/svn_base64.h
==============================================================================
--- trunk/GME/Include/subversion/svn_base64.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_base64.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -41,17 +46,17 @@
  */
 
 /** Return a writable generic stream which will encode binary data in
- * base64 format and write the encoded data to @c output.  Be sure to
+ * base64 format and write the encoded data to @a output.  Be sure to
  * close the stream when done writing in order to squeeze out the last
- * bit of encoded data.  The stream is allocated in @c pool.
+ * bit of encoded data.  The stream is allocated in @a pool.
  */
 svn_stream_t *
 svn_base64_encode(svn_stream_t *output,
                   apr_pool_t *pool);
 
 /** Return a writable generic stream which will decode base64-encoded
- * data and write the decoded data to @c output.  The stream is allocated
- * in @c pool.
+ * data and write the decoded data to @a output.  The stream is allocated
+ * in @a pool.
  */
 svn_stream_t *
 svn_base64_decode(svn_stream_t *output,
@@ -64,7 +69,7 @@
  * it present at once.  If @a break_lines is true, newlines will be
  * inserted periodically; otherwise the string will only consist of
  * base64 encoding characters.  The returned string will be allocated
- * from @c pool.
+ * from @a pool.
  *
  * @since New in 1.6.
  */
@@ -96,10 +101,10 @@
                          apr_pool_t *pool);
 
 
-/** Return a base64-encoded checksum for finalized @c digest.
+/** Return a base64-encoded checksum for finalized @a digest.
  *
- * @c digest contains @c APR_MD5_DIGESTSIZE bytes of finalized data.
- * Allocate the returned checksum in @c pool.
+ * @a digest contains @c APR_MD5_DIGESTSIZE bytes of finalized data.
+ * Allocate the returned checksum in @a pool.
  *
  * @deprecated Provided for backward compatibility with the 1.5 API.
  */

Added: trunk/GME/Include/subversion/svn_cache_config.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/GME/Include/subversion/svn_cache_config.h	Tue May 21 15:37:55 2013	(r2202)
@@ -0,0 +1,90 @@
+/**
+ * @copyright
+ * ====================================================================
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file svn_cache_config.h
+ * @brief Configuration interface to internal Subversion caches.
+ */
+
+#ifndef SVN_CACHE_CONFIG_H
+#define SVN_CACHE_CONFIG_H
+
+#include <apr.h>
+#include "svn_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/** @defgroup svn_fs_cache_config caching configuration
+ * @{
+ * @since New in 1.7. */
+
+/** Cache resource settings. It controls what caches, in what size and
+   how they will be created. The settings apply for the whole process.
+
+   @since New in 1.7.
+ */
+typedef struct svn_cache_config_t
+{
+  /** total cache size in bytes. Please note that this is only soft limit
+     to the total application memory usage and will be exceeded due to
+     temporary objects and other program state.
+     May be 0, resulting in default caching code being used. */
+  apr_uint64_t cache_size;
+
+  /** maximum number of files kept open */
+  apr_size_t file_handle_count;
+
+  /** is this application guaranteed to be single-threaded? */
+  svn_boolean_t single_threaded;
+} svn_cache_config_t;
+
+/** Get the current cache configuration. If it has not been set,
+   this function will return the default settings.
+
+   @since New in 1.7.
+ */
+const svn_cache_config_t *
+svn_cache_config_get(void);
+
+/** Set the cache configuration. Please note that it may not change
+   the actual configuration *in use*. Therefore, call it before reading
+   data from any repo and call it only once.
+
+   This function is not thread-safe. Therefore, it should be called
+   from the processes' initialization code only.
+
+   @since New in 1.7.
+ */
+void
+svn_cache_config_set(const svn_cache_config_t *settings);
+
+/** @} */
+
+/** @} */
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_CACHE_CONFIG_H */

Modified: trunk/GME/Include/subversion/svn_checksum.h
==============================================================================
--- trunk/GME/Include/subversion/svn_checksum.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_checksum.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -37,7 +42,7 @@
  *
  * @since New in 1.6.
  */
-typedef enum
+typedef enum svn_checksum_kind_t
 {
   /** The checksum is (or should be set to) an MD5 checksum. */
   svn_checksum_md5,
@@ -75,7 +80,7 @@
 svn_checksum_create(svn_checksum_kind_t kind,
                     apr_pool_t *pool);
 
-/** Set @c checksum->digest to all zeros, which, by convention, matches
+/** Set @a checksum->digest to all zeros, which, by convention, matches
  * all other checksums.
  *
  * @since New in 1.6.
@@ -116,15 +121,43 @@
 
 /** Return the hex representation of @a checksum, allocating the
  * string in @a pool.  If @a checksum->digest is all zeros (that is,
- * 0, not '0'), then return NULL.
+ * 0, not '0') then return NULL. In 1.7+, @a checksum may be NULL
+ * and NULL will be returned in that case.
  *
  * @since New in 1.6.
+ * @note Passing NULL for @a checksum in 1.6 will cause a segfault.
  */
 const char *
 svn_checksum_to_cstring(const svn_checksum_t *checksum,
                         apr_pool_t *pool);
 
 
+/** Return a serialized representation of @a checksum, allocated in
+ * @a result_pool. Temporary allocations are performed in @a scratch_pool.
+ *
+ * Note that @a checksum may not be NULL.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_checksum_serialize(const svn_checksum_t *checksum,
+                       apr_pool_t *result_pool,
+                       apr_pool_t *scratch_pool);
+
+
+/** Return @a checksum from the serialized format at @a data. The checksum
+ * will be allocated in @a result_pool, with any temporary allocations
+ * performed in @a scratch_pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_checksum_deserialize(const svn_checksum_t **checksum,
+                         const char *data,
+                         apr_pool_t *result_pool,
+                         apr_pool_t *scratch_pool);
+
+
 /** Parse the hex representation @a hex of a checksum of kind @a kind and
  * set @a *checksum to the result, allocating in @a pool.
  *
@@ -208,6 +241,28 @@
 
 
 /**
+ * Return an error of type #SVN_ERR_CHECKSUM_MISMATCH for @a actual and
+ * @a expected checksums which do not match.  Use @a fmt, and the following
+ * parameters to populate the error message.
+ *
+ * @note This function does not actually check for the mismatch, it just
+ * constructs the error.
+ *
+ * @a scratch_pool is used for temporary allocations; the returned error
+ * will be allocated in its own pool (as is typical).
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_checksum_mismatch_err(const svn_checksum_t *expected,
+                          const svn_checksum_t *actual,
+                          apr_pool_t *scratch_pool,
+                          const char *fmt,
+                          ...)
+  __attribute__ ((format(printf, 4, 5)));
+
+
+/**
  * Internal function for creating a checksum from a binary digest.
  *
  * @since New in 1.6

Modified: trunk/GME/Include/subversion/svn_client.h
==============================================================================
--- trunk/GME/Include/subversion/svn_client.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_client.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -38,7 +43,6 @@
 #include "svn_string.h"
 #include "svn_wc.h"
 #include "svn_opt.h"
-#include "svn_version.h"
 #include "svn_ra.h"
 #include "svn_diff.h"
 #include "svn_auth.h"
@@ -48,18 +52,6 @@
 #endif /* __cplusplus */
 
 
-/**
-   ### @todo  Multiple Targets
-    - Up for debate:  an update on multiple targets is *not* atomic.
-    Right now, svn_client_update only takes one path.  What's
-    debatable is whether this should ever change.  On the one hand,
-    it's kind of losing to have the client application loop over
-    targets and call svn_client_update() on each one;  each call to
-    update initializes a whole new repository session (network
-    overhead, etc.)  On the other hand, it's a very simple
-    implementation, and allows for the possibility that different
-    targets may come from different repositories.  */
-
 
 /**
  * Get libsvn_client version information.
@@ -95,8 +87,8 @@
  * with @a prompt_func and @a prompt_baton.  Allocate @a *provider in
  * @a pool.
  *
- * If both @c SVN_AUTH_PARAM_DEFAULT_USERNAME and
- * @c SVN_AUTH_PARAM_DEFAULT_PASSWORD are defined as runtime
+ * If both #SVN_AUTH_PARAM_DEFAULT_USERNAME and
+ * #SVN_AUTH_PARAM_DEFAULT_PASSWORD are defined as runtime
  * parameters in the @c auth_baton, then @a *provider will return the
  * default arguments when svn_auth_first_credentials() is called.  If
  * svn_auth_first_credentials() fails, then @a *provider will
@@ -108,20 +100,20 @@
  */
 SVN_DEPRECATED
 void
-svn_client_get_simple_prompt_provider
-  (svn_auth_provider_object_t **provider,
-   svn_auth_simple_prompt_func_t prompt_func,
-   void *prompt_baton,
-   int retry_limit,
-   apr_pool_t *pool);
+svn_client_get_simple_prompt_provider(
+  svn_auth_provider_object_t **provider,
+  svn_auth_simple_prompt_func_t prompt_func,
+  void *prompt_baton,
+  int retry_limit,
+  apr_pool_t *pool);
 
 
-/** Create and return @a *provider, an authentication provider of type @c
- * svn_auth_cred_username_t that gets information by prompting the
+/** Create and return @a *provider, an authentication provider of type
+ * #svn_auth_cred_username_t that gets information by prompting the
  * user with @a prompt_func and @a prompt_baton.  Allocate @a *provider
  * in @a pool.
  *
- * If @c SVN_AUTH_PARAM_DEFAULT_USERNAME is defined as a runtime
+ * If #SVN_AUTH_PARAM_DEFAULT_USERNAME is defined as a runtime
  * parameter in the @c auth_baton, then @a *provider will return the
  * default argument when svn_auth_first_credentials() is called.  If
  * svn_auth_first_credentials() fails, then @a *provider will
@@ -133,24 +125,23 @@
  */
 SVN_DEPRECATED
 void
-svn_client_get_username_prompt_provider
-  (svn_auth_provider_object_t **provider,
-   svn_auth_username_prompt_func_t prompt_func,
-   void *prompt_baton,
-   int retry_limit,
-   apr_pool_t *pool);
+svn_client_get_username_prompt_provider(
+  svn_auth_provider_object_t **provider,
+  svn_auth_username_prompt_func_t prompt_func,
+  void *prompt_baton,
+  int retry_limit,
+  apr_pool_t *pool);
 
 
-/** Create and return @a *provider, an authentication provider of type @c
- * svn_auth_cred_simple_t that gets/sets information from the user's
+/** Create and return @a *provider, an authentication provider of type
+ * #svn_auth_cred_simple_t that gets/sets information from the user's
  * ~/.subversion configuration directory.  Allocate @a *provider in
  * @a pool.
  *
  * If a default username or password is available, @a *provider will
  * honor them as well, and return them when
- * svn_auth_first_credentials() is called.  (see @c
- * SVN_AUTH_PARAM_DEFAULT_USERNAME and @c
- * SVN_AUTH_PARAM_DEFAULT_PASSWORD).
+ * svn_auth_first_credentials() is called.  (see
+ * #SVN_AUTH_PARAM_DEFAULT_USERNAME and #SVN_AUTH_PARAM_DEFAULT_PASSWORD).
  *
  * @deprecated Provided for backward compatibility with the 1.3 API.
  * Use svn_auth_get_simple_provider2() instead.
@@ -163,8 +154,8 @@
 
 #if (defined(WIN32) && !defined(__MINGW32__)) || defined(DOXYGEN) || defined(CTYPESGEN) || defined(SWIG)
 /**
- * Create and return @a *provider, an authentication provider of type @c
- * svn_auth_cred_simple_t that gets/sets information from the user's
+ * Create and return @a *provider, an authentication provider of type
+ * #svn_auth_cred_simple_t that gets/sets information from the user's
  * ~/.subversion configuration directory.  Allocate @a *provider in
  * @a pool.
  *
@@ -190,14 +181,14 @@
                                        apr_pool_t *pool);
 #endif /* WIN32 && !__MINGW32__ || DOXYGEN || CTYPESGEN || SWIG */
 
-/** Create and return @a *provider, an authentication provider of type @c
- * svn_auth_cred_username_t that gets/sets information from a user's
+/** Create and return @a *provider, an authentication provider of type
+ * #svn_auth_cred_username_t that gets/sets information from a user's
  * ~/.subversion configuration directory.  Allocate @a *provider in
  * @a pool.
  *
  * If a default username is available, @a *provider will honor it,
  * and return it when svn_auth_first_credentials() is called.  (see
- * @c SVN_AUTH_PARAM_DEFAULT_USERNAME).
+ * #SVN_AUTH_PARAM_DEFAULT_USERNAME).
  *
  * @deprecated Provided for backward compatibility with the 1.3 API.
  * Use svn_auth_get_username_provider() instead.
@@ -208,8 +199,8 @@
                                  apr_pool_t *pool);
 
 
-/** Create and return @a *provider, an authentication provider of type @c
- * svn_auth_cred_ssl_server_trust_t, allocated in @a pool.
+/** Create and return @a *provider, an authentication provider of type
+ * #svn_auth_cred_ssl_server_trust_t, allocated in @a pool.
  *
  * @a *provider retrieves its credentials from the configuration
  * mechanism.  The returned credential is used to override SSL
@@ -220,13 +211,13 @@
  */
 SVN_DEPRECATED
 void
-svn_client_get_ssl_server_trust_file_provider
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+svn_client_get_ssl_server_trust_file_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 
-/** Create and return @a *provider, an authentication provider of type @c
- * svn_auth_cred_ssl_client_cert_t, allocated in @a pool.
+/** Create and return @a *provider, an authentication provider of type
+ * #svn_auth_cred_ssl_client_cert_t, allocated in @a pool.
  *
  * @a *provider retrieves its credentials from the configuration
  * mechanism.  The returned credential is used to load the appropriate
@@ -237,13 +228,13 @@
  */
 SVN_DEPRECATED
 void
-svn_client_get_ssl_client_cert_file_provider
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+svn_client_get_ssl_client_cert_file_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 
-/** Create and return @a *provider, an authentication provider of type @c
- * svn_auth_cred_ssl_client_cert_pw_t, allocated in @a pool.
+/** Create and return @a *provider, an authentication provider of type
+ * #svn_auth_cred_ssl_client_cert_pw_t, allocated in @a pool.
  *
  * @a *provider retrieves its credentials from the configuration
  * mechanism.  The returned credential is used when a loaded client
@@ -254,13 +245,13 @@
  */
 SVN_DEPRECATED
 void
-svn_client_get_ssl_client_cert_pw_file_provider
-  (svn_auth_provider_object_t **provider,
-   apr_pool_t *pool);
+svn_client_get_ssl_client_cert_pw_file_provider(
+  svn_auth_provider_object_t **provider,
+  apr_pool_t *pool);
 
 
-/** Create and return @a *provider, an authentication provider of type @c
- * svn_auth_cred_ssl_server_trust_t, allocated in @a pool.
+/** Create and return @a *provider, an authentication provider of type
+ * #svn_auth_cred_ssl_server_trust_t, allocated in @a pool.
  *
  * @a *provider retrieves its credentials by using the @a prompt_func
  * and @a prompt_baton.  The returned credential is used to override
@@ -271,15 +262,15 @@
  */
 SVN_DEPRECATED
 void
-svn_client_get_ssl_server_trust_prompt_provider
-  (svn_auth_provider_object_t **provider,
-   svn_auth_ssl_server_trust_prompt_func_t prompt_func,
-   void *prompt_baton,
-   apr_pool_t *pool);
+svn_client_get_ssl_server_trust_prompt_provider(
+  svn_auth_provider_object_t **provider,
+  svn_auth_ssl_server_trust_prompt_func_t prompt_func,
+  void *prompt_baton,
+  apr_pool_t *pool);
 
 
-/** Create and return @a *provider, an authentication provider of type @c
- * svn_auth_cred_ssl_client_cert_t, allocated in @a pool.
+/** Create and return @a *provider, an authentication provider of type
+ * #svn_auth_cred_ssl_client_cert_t, allocated in @a pool.
  *
  * @a *provider retrieves its credentials by using the @a prompt_func
  * and @a prompt_baton.  The returned credential is used to load the
@@ -292,16 +283,16 @@
  */
 SVN_DEPRECATED
 void
-svn_client_get_ssl_client_cert_prompt_provider
-  (svn_auth_provider_object_t **provider,
-   svn_auth_ssl_client_cert_prompt_func_t prompt_func,
-   void *prompt_baton,
-   int retry_limit,
-   apr_pool_t *pool);
+svn_client_get_ssl_client_cert_prompt_provider(
+  svn_auth_provider_object_t **provider,
+  svn_auth_ssl_client_cert_prompt_func_t prompt_func,
+  void *prompt_baton,
+  int retry_limit,
+  apr_pool_t *pool);
 
 
-/** Create and return @a *provider, an authentication provider of type @c
- * svn_auth_cred_ssl_client_cert_pw_t, allocated in @a pool.
+/** Create and return @a *provider, an authentication provider of type
+ * #svn_auth_cred_ssl_client_cert_pw_t, allocated in @a pool.
  *
  * @a *provider retrieves its credentials by using the @a prompt_func
  * and @a prompt_baton.  The returned credential is used when a loaded
@@ -314,16 +305,32 @@
  */
 SVN_DEPRECATED
 void
-svn_client_get_ssl_client_cert_pw_prompt_provider
-  (svn_auth_provider_object_t **provider,
-   svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func,
-   void *prompt_baton,
-   int retry_limit,
-   apr_pool_t *pool);
+svn_client_get_ssl_client_cert_pw_prompt_provider(
+  svn_auth_provider_object_t **provider,
+  svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func,
+  void *prompt_baton,
+  int retry_limit,
+  apr_pool_t *pool);
 
 /** @} */
 
 /**
+ * Revisions and Peg Revisions
+ *
+ * @defgroup clnt_revisions Revisions and Peg Revisions
+ *
+ * A brief word on operative and peg revisions.
+ *
+ * If the kind of the peg revision is #svn_opt_revision_unspecified, then it
+ * defaults to #svn_opt_revision_head for URLs and #svn_opt_revision_working
+ * for local paths.
+ *
+ * For deeper insight, please see the
+ * <a href="http://svnbook.red-bean.com/nightly/en/svn.advanced.pegrevs.html">
+ * Peg and Operative Revisions</a> section of the Subversion Book.
+ */
+
+/**
  * Commit operations
  *
  * @defgroup clnt_commit Client commit subsystem
@@ -349,16 +356,17 @@
 
 /**
  * The callback invoked by svn_client_proplist3().  Each invocation
- * describes the property specified by @a item.  Use @a pool for all
- * temporary allocation.
+ * provides the regular properties of @a path which is either a WC path or
+ * a URL.  @a prop_hash maps property names (char *) to property
+   values (svn_string_t *).  Use @a pool for all temporary allocation.
  *
  * @since New in 1.5.
  */
-typedef svn_error_t *(*svn_proplist_receiver_t)
-  (void *baton,
-   const char *path,
-   apr_hash_t *prop_hash,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_proplist_receiver_t)(
+  void *baton,
+  const char *path,
+  apr_hash_t *prop_hash,
+  apr_pool_t *pool);
 
 /**
  * Return a duplicate of @a item, allocated in @a pool. No part of the new
@@ -393,7 +401,7 @@
 
 /**
  * @name Commit state flags
- * @brief State flags for use with the @c svn_client_commit_item3_t structure
+ * @brief State flags for use with the #svn_client_commit_item3_t structure
  * (see the note about the namespace for that structure, which also
  * applies to these flags).
  * @{
@@ -407,8 +415,9 @@
 #define SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN  0x20
 /** @} */
 
-/** The commit candidate structure.  In order to avoid backwards
- * compatibility problems clients should use
+/** The commit candidate structure.
+ *
+ * In order to avoid backwards compatibility problems clients should use
  * svn_client_commit_item3_create() to allocate and initialize this
  * structure instead of doing so themselves.
  *
@@ -416,6 +425,8 @@
  */
 typedef struct svn_client_commit_item3_t
 {
+  /* IMPORTANT: If you extend this structure, add new fields to the end. */
+
   /** absolute working-copy path of item */
   const char *path;
 
@@ -437,11 +448,11 @@
   /** state flags */
   apr_byte_t state_flags;
 
-  /** An array of @c svn_prop_t *'s, which are incoming changes from
+  /** An array of #svn_prop_t *'s, which are incoming changes from
    * the repository to WC properties.  These changes are applied
    * post-commit.
    *
-   * When adding to this array, allocate the @c svn_prop_t and its
+   * When adding to this array, allocate the #svn_prop_t and its
    * contents in @c incoming_prop_changes->pool, so that it has the
    * same lifetime as this data structure.
    *
@@ -452,21 +463,27 @@
    */
   apr_array_header_t *incoming_prop_changes;
 
-  /** An array of @c svn_prop_t *'s, which are outgoing changes to
+  /** An array of #svn_prop_t *'s, which are outgoing changes to
    * make to properties in the repository.  These extra property
    * changes are declared pre-commit, and applied to the repository as
    * part of a commit.
    *
-   * When adding to this array, allocate the @c svn_prop_t and its
+   * When adding to this array, allocate the #svn_prop_t and its
    * contents in @c outgoing_prop_changes->pool, so that it has the
    * same lifetime as this data structure.
    */
   apr_array_header_t *outgoing_prop_changes;
+
+  /**
+   * When processing the commit this contains the relative path for
+   * the commit session. #NULL until the commit item is preprocessed.
+   */
+  const char *session_relpath;
 } svn_client_commit_item3_t;
 
 /** The commit candidate structure.
  *
- * @deprecated Provided for backward compatibility with the 1.3 API.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 typedef struct svn_client_commit_item2_t
 {
@@ -491,7 +508,7 @@
   /** state flags */
   apr_byte_t state_flags;
 
-  /** Analogous to the @c svn_client_commit_item3_t.incoming_prop_changes
+  /** Analogous to the #svn_client_commit_item3_t.incoming_prop_changes
    * field.
    */
   apr_array_header_t *wcprop_changes;
@@ -521,7 +538,7 @@
   /** state flags */
   apr_byte_t state_flags;
 
-  /** Analogous to the @c svn_client_commit_item3_t.incoming_prop_changes
+  /** Analogous to the #svn_client_commit_item3_t.incoming_prop_changes
    * field.
    */
   apr_array_header_t *wcprop_changes;
@@ -531,7 +548,7 @@
 /** Return a new commit item object, allocated in @a pool.
  *
  * In order to avoid backwards compatibility problems, this function
- * is used to initialize and allocate the @c svn_client_commit_item3_t
+ * is used to initialize and allocate the #svn_client_commit_item3_t
  * structure rather than doing so explicitly, as the size of this
  * structure may change in the future.
  *
@@ -540,19 +557,21 @@
 svn_client_commit_item3_t *
 svn_client_commit_item3_create(apr_pool_t *pool);
 
-/** Like svn_client_commit_item_create2() but with a stupid "const"
+/** Like svn_client_commit_item3_create() but with a stupid "const"
  * qualifier on the returned structure, and it returns an error that
  * will never happen.
  *
  * @deprecated Provided for backward compatibility with the 1.5 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_commit_item_create(const svn_client_commit_item3_t **item,
                               apr_pool_t *pool);
 
 /**
- * Return a duplicate of @a item, allocated in @a pool. No part of the new
- * structure will be shared with @a item.
+ * Return a duplicate of @a item, allocated in @a pool. No part of the
+ * new structure will be shared with @a item, except for the adm_access
+ * member.
  *
  * @since New in 1.5.
  */
@@ -564,7 +583,7 @@
  * Return a duplicate of @a item, allocated in @a pool. No part of the new
  * structure will be shared with @a item.
  *
- * @deprecated Provided for backward compatibility with the 1.3 API.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_client_commit_item2_t *
@@ -581,7 +600,7 @@
  * @c NULL, this value is undefined).  The log message MUST be a UTF8
  * string with LF line separators.
  *
- * @a commit_items is a read-only array of @c svn_client_commit_item3_t
+ * @a commit_items is a read-only array of #svn_client_commit_item3_t
  * structures, which may be fully or only partially filled-in,
  * depending on the type of commit operation.
  *
@@ -591,12 +610,12 @@
  *
  * @since New in 1.5.
  */
-typedef svn_error_t *(*svn_client_get_commit_log3_t)
-  (const char **log_msg,
-   const char **tmp_file,
-   const apr_array_header_t *commit_items,
-   void *baton,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_client_get_commit_log3_t)(
+  const char **log_msg,
+  const char **tmp_file,
+  const apr_array_header_t *commit_items,
+  void *baton,
+  apr_pool_t *pool);
 
 /** Callback type used by commit-y operations to get a commit log message
  * from the caller.
@@ -608,7 +627,7 @@
  * @c NULL, this value is undefined).  The log message MUST be a UTF8
  * string with LF line separators.
  *
- * @a commit_items is a read-only array of @c svn_client_commit_item2_t
+ * @a commit_items is a read-only array of #svn_client_commit_item2_t
  * structures, which may be fully or only partially filled-in,
  * depending on the type of commit operation.
  *
@@ -618,12 +637,12 @@
  *
  * @deprecated Provided for backward compatibility with the 1.3 API.
  */
-typedef svn_error_t *(*svn_client_get_commit_log2_t)
-  (const char **log_msg,
-   const char **tmp_file,
-   const apr_array_header_t *commit_items,
-   void *baton,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_client_get_commit_log2_t)(
+  const char **log_msg,
+  const char **tmp_file,
+  const apr_array_header_t *commit_items,
+  void *baton,
+  apr_pool_t *pool);
 
 /** Callback type used by commit-y operations to get a commit log message
  * from the caller.
@@ -635,7 +654,7 @@
  * @c NULL, this value is undefined).  The log message MUST be a UTF8
  * string with LF line separators.
  *
- * @a commit_items is a read-only array of @c svn_client_commit_item_t
+ * @a commit_items is a read-only array of #svn_client_commit_item_t
  * structures, which may be fully or only partially filled-in,
  * depending on the type of commit operation.
  *
@@ -645,12 +664,12 @@
  *
  * @deprecated Provided for backward compatibility with the 1.2 API.
  */
-typedef svn_error_t *(*svn_client_get_commit_log_t)
-  (const char **log_msg,
-   const char **tmp_file,
-   apr_array_header_t *commit_items,
-   void *baton,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_client_get_commit_log_t)(
+  const char **log_msg,
+  const char **tmp_file,
+  apr_array_header_t *commit_items,
+  void *baton,
+  apr_pool_t *pool);
 
 /** @} */
 
@@ -662,39 +681,68 @@
  * @{
  */
 
-/** Callback type used by svn_client_blame4() to notify the caller
- * that line @a line_no of the blamed file was last changed in
- * @a revision by @a author on @a date, and that the contents were
+/** Callback type used by svn_client_blame5() to notify the caller
+ * that line @a line_no of the blamed file was last changed in @a revision
+ * which has the revision properties @a rev_props, and that the contents were
  * @a line.
  *
- * If svn_client_blame4() was called with @a include_merged_revisions set to
- * TRUE, @a merged_revision, @a merged_author, @a merged_date, and
- * @a merged_path will be set, otherwise they will be NULL.  @a merged_path
- * will be set to the absolute repository path.
+ * @a start_revnum and @a end_revnum contain the start and end revision
+ * number of the entire blame operation, as determined from the repository
+ * inside svn_client_blame5(). This can be useful for the blame receiver
+ * to format the blame output.
+ *
+ * If svn_client_blame5() was called with @a include_merged_revisions set to
+ * TRUE, @a merged_revision, @a merged_rev_props and @a merged_path will be
+ * set, otherwise they will be NULL. @a merged_path will be set to the
+ * absolute repository path.
  *
  * All allocations should be performed in @a pool.
  *
  * @note If there is no blame information for this line, @a revision will be
- * invalid and @a author and @a date will be NULL.
- *
+ * invalid and @a rev_props will be NULL. In this case @a local_change
+ * will be true if the reason there is no blame information is that the line
+ * was modified locally. In all other cases @a local_change will be false.
+ *
+ * @since New in 1.7.
+ */
+typedef svn_error_t *(*svn_client_blame_receiver3_t)(
+  void *baton,
+  svn_revnum_t start_revnum,
+  svn_revnum_t end_revnum,
+  apr_int64_t line_no,
+  svn_revnum_t revision,
+  apr_hash_t *rev_props,
+  svn_revnum_t merged_revision,
+  apr_hash_t *merged_rev_props,
+  const char *merged_path,
+  const char *line,
+  svn_boolean_t local_change,
+  apr_pool_t *pool);
+
+/**
+ * Similar to #svn_client_blame_receiver3_t, but with separate author and
+ * date revision properties instead of all revision properties, and without
+ * information about local changes.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  *
  * @since New in 1.5.
  */
-typedef svn_error_t *(*svn_client_blame_receiver2_t)
-  (void *baton,
-   apr_int64_t line_no,
-   svn_revnum_t revision,
-   const char *author,
-   const char *date,
-   svn_revnum_t merged_revision,
-   const char *merged_author,
-   const char *merged_date,
-   const char *merged_path,
-   const char *line,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_client_blame_receiver2_t)(
+  void *baton,
+  apr_int64_t line_no,
+  svn_revnum_t revision,
+  const char *author,
+  const char *date,
+  svn_revnum_t merged_revision,
+  const char *merged_author,
+  const char *merged_date,
+  const char *merged_path,
+  const char *line,
+  apr_pool_t *pool);
 
 /**
- * Similar to @c svn_client_blame_receiver2_t, but without @a merged_revision,
+ * Similar to #svn_client_blame_receiver2_t, but without @a merged_revision,
  * @a merged_author, @a merged_date, or @a merged_path members.
  *
  * @note New in 1.4 is that the line is defined to contain only the line
@@ -704,14 +752,14 @@
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
-typedef svn_error_t *(*svn_client_blame_receiver_t)
-  (void *baton,
-   apr_int64_t line_no,
-   svn_revnum_t revision,
-   const char *author,
-   const char *date,
-   const char *line,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_client_blame_receiver_t)(
+  void *baton,
+  apr_int64_t line_no,
+  svn_revnum_t revision,
+  const char *author,
+  const char *date,
+  const char *line,
+  apr_pool_t *pool);
 
 
 /** @} */
@@ -744,7 +792,7 @@
 
 
 /** A struct that describes the diff of an item. Passed to
- * @c svn_diff_summarize_func_t.
+ * #svn_client_diff_summarize_func_t.
  *
  * @note Fields may be added to the end of this structure in future
  * versions.  Therefore, users shouldn't allocate structures of this
@@ -761,7 +809,8 @@
   /** Change kind */
   svn_client_diff_summarize_kind_t summarize_kind;
 
-  /** Properties changed? */
+  /** Properties changed?  For consistency with 'svn status' output,
+   * this should be false if summarize_kind is _added or _deleted. */
   svn_boolean_t prop_changed;
 
   /** File or dir */
@@ -789,10 +838,10 @@
  *
  * @since New in 1.4.
  */
-typedef svn_error_t *(*svn_client_diff_summarize_func_t)
-  (const svn_client_diff_summarize_t *diff,
-   void *baton,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_client_diff_summarize_func_t)(
+  const svn_client_diff_summarize_t *diff,
+  void *baton,
+  apr_pool_t *pool);
 
 
 
@@ -841,7 +890,7 @@
   void *log_msg_baton;
 
   /** a hash mapping of <tt>const char *</tt> configuration file names to
-   * @c svn_config_t *'s. For example, the '~/.subversion/config' file's
+   * #svn_config_t *'s. For example, the '~/.subversion/config' file's
    * contents should have the key "config".  May be left unset (or set to
    * NULL) to use the built-in default settings and not use any configuration.
    */
@@ -855,7 +904,7 @@
   void *cancel_baton;
 
   /** notification function, defaulting to a function that forwards
-   * to notify_func().
+   * to notify_func().  If @c NULL, it will not be invoked.
    * @since New in 1.2. */
   svn_wc_notify_func2_t notify_func2;
 
@@ -899,10 +948,23 @@
   svn_wc_conflict_resolver_func_t conflict_func;
   void *conflict_baton;
 
-  /** Custom client name string, or @c null.
+  /** Custom client name string, or @c NULL.
    * @since New in 1.5. */
   const char *client_name;
 
+  /** Conflict resolution callback and baton, if available. NULL means that
+   * subversion should try @c conflict_func.
+   * @since New in 1.7. */
+  svn_wc_conflict_resolver_func2_t conflict_func2;
+  void *conflict_baton2;
+
+  /** A working copy context for the client operation to use.
+   * This is initialized by svn_client_create_context() and should never
+   * be @c NULL.
+   *
+   * @since New in 1.7.  */
+  svn_wc_context_t *wc_ctx;
+
 } svn_client_ctx_t;
 
 /** Initialize a client context.
@@ -911,7 +973,7 @@
  *
  * In order to avoid backwards compatibility problems, clients must
  * use this function to initialize and allocate the
- * @c svn_client_ctx_t structure rather than doing so themselves, as
+ * #svn_client_ctx_t structure rather than doing so themselves, as
  * the size of this structure may change in the future.
  *
  * The current implementation never returns error, but callers should
@@ -951,23 +1013,45 @@
  * converting them to UTF-8, followed by targets from @a known_targets
  * (which might come from, for example, the "--targets" command line option).
  *
- * On each URL target, do some IRI-to-URI encoding and some auto-escaping.
- * On each local path, canonicalize case and path separators.
+ * Process each target in one of the following ways.  For a repository-
+ * relative URL: resolve to a full URL, contacting the repository if
+ * necessary to do so, and then treat as a full URL.  For a URL: do some
+ * IRI-to-URI encoding and some auto-escaping, and canonicalize.  For a
+ * local path: canonicalize case and path separators.
+ *
+ * If @a keep_last_origpath_on_truepath_collision is TRUE, and there are
+ * exactly two targets which both case-canonicalize to the same path, the last
+ * target will be returned in the original non-case-canonicalized form.
  *
  * Allocate @a *targets_p and its elements in @a pool.
  *
  * @a ctx is required for possible repository authentication.
  *
  * If a path has the same name as a Subversion working copy
- * administrative directory, return SVN_ERR_RESERVED_FILENAME_SPECIFIED;
+ * administrative directory, return #SVN_ERR_RESERVED_FILENAME_SPECIFIED;
  * if multiple reserved paths are encountered, return a chain of
- * errors, all of which are SVN_ERR_RESERVED_FILENAME_SPECIFIED.  Do
+ * errors, all of which are #SVN_ERR_RESERVED_FILENAME_SPECIFIED.  Do
  * not return this type of error in a chain with any other type of
  * error, and if this is the only type of error encountered, complete
  * the operation before returning the error(s).
  *
- * @since New in 1.6
+ * @since New in 1.7
+ */
+svn_error_t *
+svn_client_args_to_target_array2(apr_array_header_t **targets_p,
+                                 apr_getopt_t *os,
+                                 const apr_array_header_t *known_targets,
+                                 svn_client_ctx_t *ctx,
+                                 svn_boolean_t keep_last_origpath_on_truepath_collision,
+                                 apr_pool_t *pool);
+
+/*
+ * Similar to svn_client_args_to_target_array2() but with
+ * @a keep_last_origpath_on_truepath_collision always set to FALSE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_args_to_target_array(apr_array_header_t **targets_p,
                                 apr_getopt_t *os,
@@ -995,56 +1079,47 @@
 
 
 /**
- * Checkout a working copy of @a URL at @a revision, looked up at @a
- * peg_revision, using @a path as the root directory of the newly
- * checked out working copy, and authenticating with the
- * authentication baton cached in @a ctx.  If @a result_rev is not @c
- * NULL, set @a *result_rev to the value of the revision actually
- * checked out from the repository.
- *
- * If @a peg_revision->kind is @c svn_opt_revision_unspecified, then it
- * defaults to @c svn_opt_revision_head.
- *
- * @a revision must be of kind @c svn_opt_revision_number,
- * @c svn_opt_revision_head, or @c svn_opt_revision_date.  If
- * @a revision does not meet these requirements, return the error
- * @c SVN_ERR_CLIENT_BAD_REVISION.
- *
- * If @a depth is @c svn_depth_infinity, check out fully recursively.
- * Else if it is @c svn_depth_immediates, check out @a URL and its
- * immediate entries (subdirectories will be present, but will be at
- * depth @c svn_depth_empty themselves); else @c svn_depth_files,
- * check out @a URL and its file entries, but no subdirectories; else
- * if @c svn_depth_empty, check out @a URL as an empty directory at
- * that depth, with no entries present.
- *
- * If @a depth is @c svn_depth_unknown, then behave as if for
- * @c svn_depth_infinity, except in the case of resuming a previous
- * checkout of @a path (i.e., updating), in which case use the depth
- * of the existing working copy.
- *
- * If @a ignore_externals is set, don't process externals definitions
- * as part of this operation.
- *
- * If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with
- * @a ctx->notify_baton2 as the checkout progresses.
- *
- * If @a allow_unver_obstructions is TRUE then the checkout tolerates
- * existing unversioned items that obstruct added paths from @a URL.  Only
- * obstructions of the same type (file or dir) as the added item are
- * tolerated.  The text of obstructing files is left as-is, effectively
- * treating it as a user modification after the checkout.  Working
- * properties of obstructing items are set equal to the base properties.
- * If @a allow_unver_obstructions is FALSE then the checkout will abort
- * if there are any unversioned obstructing items.
+ * Checkout a working copy from a repository.
  *
- * If @a URL refers to a file rather than a directory, return the
- * error @c SVN_ERR_UNSUPPORTED_FEATURE.  If @a URL does not exist,
- * return the error @c SVN_ERR_RA_ILLEGAL_URL.
- *
- * Use @a pool for any temporary allocation.
+ * @param[out] result_rev   If non-NULL, the value of the revision checked
+ *              out from the repository.
+ * @param[in] URL       The repository URL of the checkout source.
+ * @param[in] path      The root of the new working copy.
+ * @param[in] peg_revision  The peg revision.
+ * @param[in] revision  The operative revision.
+ * @param[in] depth     The depth of the operation.  If #svn_depth_unknown,
+ *              then behave as if for #svn_depth_infinity, except in the case
+ *              of resuming a previous checkout of @a path (i.e., updating),
+ *              in which case use the depth of the existing working copy.
+ * @param[in] ignore_externals  If @c TRUE, don't process externals
+ *              definitions as part of this operation.
+ * @param[in] allow_unver_obstructions  If @c TRUE, then tolerate existing
+ *              unversioned items that obstruct incoming paths.  Only
+ *              obstructions of the same type (file or dir) as the added
+ *              item are tolerated.  The text of obstructing files is left
+ *              as-is, effectively treating it as a user modification after
+ *              the checkout.  Working properties of obstructing items are
+ *              set equal to the base properties. <br>
+ *              If @c FALSE, then abort if there are any unversioned
+ *              obstructing items.
+ * @param[in] ctx   The standard client context, used for authentication and
+ *              notification.
+ * @param[in] pool  Used for any temporary allocation.
+ *
+ * @return A pointer to an #svn_error_t of the type (this list is not
+ *         exhaustive): <br>
+ *         #SVN_ERR_UNSUPPORTED_FEATURE if @a URL refers to a file rather
+ *         than a directory; <br>
+ *         #SVN_ERR_RA_ILLEGAL_URL if @a URL does not exist; <br>
+ *         #SVN_ERR_CLIENT_BAD_REVISION if @a revision is not one of
+ *         #svn_opt_revision_number, #svn_opt_revision_head, or
+ *         #svn_opt_revision_date. <br>
+ *         If no error occurred, return #SVN_NO_ERROR.
  *
  * @since New in 1.5.
+ *
+ * @see #svn_depth_t <br> #svn_client_ctx_t <br> @ref clnt_revisions for
+ *      a discussion of operative and peg revisions.
  */
 svn_error_t *
 svn_client_checkout3(svn_revnum_t *result_rev,
@@ -1062,8 +1137,8 @@
 /**
  * Similar to svn_client_checkout3() but with @a allow_unver_obstructions
  * always set to FALSE, and @a depth set according to @a recurse: if
- * @a recurse is TRUE, @a depth is @c svn_depth_infinity, if @a recurse
- * is FALSE, @a depth is @c svn_depth_files.
+ * @a recurse is TRUE, @a depth is #svn_depth_infinity, if @a recurse
+ * is FALSE, @a depth is #svn_depth_files.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
@@ -1082,7 +1157,7 @@
 
 /**
  * Similar to svn_client_checkout2(), but with @a peg_revision
- * always set to @c svn_opt_revision_unspecified and
+ * always set to #svn_opt_revision_unspecified and
  * @a ignore_externals always set to FALSE.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
@@ -1109,35 +1184,36 @@
  * Update working trees @a paths to @a revision, authenticating with the
  * authentication baton cached in @a ctx.  @a paths is an array of const
  * char * paths to be updated.  Unversioned paths that are direct children
- * of a versioned path will cause an update that attempts to add that path,
- * other unversioned paths are skipped.  If @a result_revs is not
- * @c NULL an array of svn_revnum_t will be returned with each element set
- * to the revision to which @a revision was resolved.
+ * of a versioned path will cause an update that attempts to add that path;
+ * other unversioned paths are skipped.  If @a result_revs is not NULL,
+ * @a *result_revs will be set to an array of svn_revnum_t with each
+ * element set to the revision to which @a revision was resolved for the
+ * corresponding element of @a paths.
  *
- * @a revision must be of kind @c svn_opt_revision_number,
- * @c svn_opt_revision_head, or @c svn_opt_revision_date.  If @a
+ * @a revision must be of kind #svn_opt_revision_number,
+ * #svn_opt_revision_head, or #svn_opt_revision_date.  If @a
  * revision does not meet these requirements, return the error
- * @c SVN_ERR_CLIENT_BAD_REVISION.
+ * #SVN_ERR_CLIENT_BAD_REVISION.
  *
  * The paths in @a paths can be from multiple working copies from multiple
  * repositories, but even if they all come from the same repository there
- * is no guarantee that revision represented by @c svn_opt_revision_head
+ * is no guarantee that revision represented by #svn_opt_revision_head
  * will remain the same as each path is updated.
  *
  * If @a ignore_externals is set, don't process externals definitions
  * as part of this operation.
  *
- * If @a depth is @c svn_depth_infinity, update fully recursively.
- * Else if it is @c svn_depth_immediates or @c svn_depth_files, update
+ * If @a depth is #svn_depth_infinity, update fully recursively.
+ * Else if it is #svn_depth_immediates or #svn_depth_files, update
  * each target and its file entries, but not its subdirectories.  Else
- * if @c svn_depth_empty, update exactly each target, nonrecursively
+ * if #svn_depth_empty, update exactly each target, nonrecursively
  * (essentially, update the target's properties).
  *
- * If @a depth is @c svn_depth_unknown, take the working depth from
+ * If @a depth is #svn_depth_unknown, take the working depth from
  * @a paths and then behave as described above.
  *
- * If @a depth_is_sticky is set and @a depth is not @c
- * svn_depth_unknown, then in addition to updating PATHS, also set
+ * If @a depth_is_sticky is set and @a depth is not
+ * #svn_depth_unknown, then in addition to updating PATHS, also set
  * their sticky ambient depth value to @a depth.
  *
  * If @a allow_unver_obstructions is TRUE then the update tolerates
@@ -1149,6 +1225,13 @@
  * If @a allow_unver_obstructions is FALSE then the update will abort
  * if there are any unversioned obstructing items.
  *
+ * If @a adds_as_modification is TRUE, a local addition at the same path
+ * as an incoming addition of the same node kind results in a normal node
+ * with a possible local modification, instead of a tree conflict.
+ *
+ * If @a make_parents is TRUE, create any non-existent parent
+ * directories also by checking them out at depth=empty.
+ *
  * If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with
  * @a ctx->notify_baton2 for each item handled by the update, and also for
  * files restored from text-base.  If @a ctx->cancel_func is non-NULL, invoke
@@ -1156,8 +1239,40 @@
  *
  * Use @a pool for any temporary allocation.
  *
+ *  @todo  Multiple Targets
+ *  - Up for debate:  an update on multiple targets is *not* atomic.
+ *  Right now, svn_client_update only takes one path.  What's
+ *  debatable is whether this should ever change.  On the one hand,
+ *  it's kind of losing to have the client application loop over
+ *  targets and call svn_client_update() on each one;  each call to
+ *  update initializes a whole new repository session (network
+ *  overhead, etc.)  On the other hand, it's a very simple
+ *  implementation, and allows for the possibility that different
+ *  targets may come from different repositories.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_update4(apr_array_header_t **result_revs,
+                   const apr_array_header_t *paths,
+                   const svn_opt_revision_t *revision,
+                   svn_depth_t depth,
+                   svn_boolean_t depth_is_sticky,
+                   svn_boolean_t ignore_externals,
+                   svn_boolean_t allow_unver_obstructions,
+                   svn_boolean_t adds_as_modification,
+                   svn_boolean_t make_parents,
+                   svn_client_ctx_t *ctx,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_update4() but with @a make_parents always set
+ * to FALSE and @a adds_as_modification set to TRUE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  * @since New in 1.5.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_update3(apr_array_header_t **result_revs,
                    const apr_array_header_t *paths,
@@ -1172,9 +1287,9 @@
 /**
  * Similar to svn_client_update3() but with @a allow_unver_obstructions
  * always set to FALSE, @a depth_is_sticky to FALSE, and @a depth set
- * according to @a recurse: if @a recurse is TRUE, set @a depth to @c
- * svn_depth_infinity, if @a recurse is FALSE, set @a depth to @c
- * svn_depth_files.
+ * according to @a recurse: if @a recurse is TRUE, set @a depth to
+ * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to
+ * #svn_depth_files.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
@@ -1211,51 +1326,92 @@
  * @{
  */
 
-/** Switch working tree @a path to @a url\@peg_revision at @a revision,
- * authenticating with the authentication baton cached in @a ctx.  If
- * @a result_rev is not @c NULL, set @a *result_rev to the value of
- * the revision to which the working copy was actually switched.
- *
- * Summary of purpose: this is normally used to switch a working
- * directory over to another line of development, such as a branch or
- * a tag.  Switching an existing working directory is more efficient
- * than checking out @a url from scratch.
- *
- * @a revision must be of kind @c svn_opt_revision_number,
- * @c svn_opt_revision_head, or @c svn_opt_revision_date; otherwise,
- * return @c SVN_ERR_CLIENT_BAD_REVISION.
- *
- * If @a depth is @c svn_depth_infinity, switch fully recursively.
- * Else if it is @c svn_depth_immediates, switch @a path and its file
- * children (if any), and switch subdirectories but do not update
- * them.  Else if @c svn_depth_files, switch just file children,
- * ignoring subdirectories completely.  Else if @c svn_depth_empty,
- * switch just @a path and touch nothing underneath it.
- *
- * If @a depth_is_sticky is set and @a depth is not @c
- * svn_depth_unknown, then in addition to switching PATH, also set
- * its sticky ambient depth value to @a depth.
- *
- * If @a ignore_externals is set, don't process externals definitions
- * as part of this operation.
+/**
+ * Switch an existing working copy directory to a different repository
+ * location.
  *
- * If @a allow_unver_obstructions is TRUE then the switch tolerates
- * existing unversioned items that obstruct added paths.  Only
- * obstructions of the same type (file or dir) as the added item are
- * tolerated.  The text of obstructing files is left as-is, effectively
- * treating it as a user modification after the switch.  Working
- * properties of obstructing items are set equal to the base properties.
- * If @a allow_unver_obstructions is FALSE then the switch will abort
- * if there are any unversioned obstructing items.
+ * This is normally used to switch a working copy directory over to another
+ * line of development, such as a branch or a tag.  Switching an existing
+ * working copy directory is more efficient than checking out @a url from
+ * scratch.
+ *
+ * @param[out] result_rev   If non-NULL, the value of the revision to which
+ *                          the working copy was actually switched.
+ * @param[in] path      The directory to be switched.  This need not be the
+ *              root of a working copy.
+ * @param[in] url       The repository URL to switch to.
+ * @param[in] peg_revision  The peg revision.
+ * @param[in] revision  The operative revision.
+ * @param[in] depth     The depth of the operation.  If #svn_depth_infinity,
+ *                      switch fully recursively.  Else if #svn_depth_immediates,
+ *                      switch @a path and its file children (if any), and
+ *                      switch subdirectories but do not update them.  Else if
+ *                      #svn_depth_files, switch just file children, ignoring
+ *                      subdirectories completely.  Else if #svn_depth_empty,
+ *                      switch just @a path and touch nothing underneath it.
+ * @param[in] depth_is_sticky   If @c TRUE, and @a depth is not
+ *              #svn_depth_unknown, then in addition to switching @a path, also
+ *              set its sticky ambient depth value to @a depth.
+ * @param[in] ignore_externals  If @c TRUE, don't process externals
+ *              definitions as part of this operation.
+ * @param[in] allow_unver_obstructions  If @c TRUE, then tolerate existing
+ *              unversioned items that obstruct incoming paths.  Only
+ *              obstructions of the same type (file or dir) as the added
+ *              item are tolerated.  The text of obstructing files is left
+ *              as-is, effectively treating it as a user modification after
+ *              the checkout.  Working properties of obstructing items are
+ *              set equal to the base properties. <br>
+ *              If @c FALSE, then abort if there are any unversioned
+ *              obstructing items.
+ * @param[in] ignore_ancestry  If @c FALSE, then verify that the file
+ *              or directory at @a path shares some common version control
+ *              ancestry with the switch URL location (represented by the
+ *              combination of @a url, @a peg_revision, and @a revision),
+ *              and returning #SVN_ERR_CLIENT_UNRELATED_RESOURCES if they
+ *              do not. If @c TRUE, no such sanity checks are performed.
+ *
+ * @param[in] ctx   The standard client context, used for authentication and
+ *              notification.  The notifier is invoked for paths affected by
+ *              the switch, and also for files which may be restored from the
+ *              pristine store after being previously removed from the working
+ *              copy.
+ * @param[in] pool  Used for any temporary allocation.
+ *
+ * @return A pointer to an #svn_error_t of the type (this list is not
+ *         exhaustive): <br>
+ *         #SVN_ERR_CLIENT_BAD_REVISION if @a revision is not one of
+ *         #svn_opt_revision_number, #svn_opt_revision_head, or
+ *         #svn_opt_revision_date. <br>
+ *         If no error occurred, return #SVN_NO_ERROR.
  *
- * If @a ctx->notify_func2 is non-NULL, invoke it with @a ctx->notify_baton2
- * on paths affected by the switch.  Also invoke it for files may be restored
- * from the text-base because they were removed from the working copy.
+ * @since New in 1.7.
  *
- * Use @a pool for any temporary allocation.
+ * @see #svn_depth_t <br> #svn_client_ctx_t <br> @ref clnt_revisions for
+ *      a discussion of operative and peg revisions.
+ */
+svn_error_t *
+svn_client_switch3(svn_revnum_t *result_rev,
+                   const char *path,
+                   const char *url,
+                   const svn_opt_revision_t *peg_revision,
+                   const svn_opt_revision_t *revision,
+                   svn_depth_t depth,
+                   svn_boolean_t depth_is_sticky,
+                   svn_boolean_t ignore_externals,
+                   svn_boolean_t allow_unver_obstructions,
+                   svn_boolean_t ignore_ancestry,
+                   svn_client_ctx_t *ctx,
+                   apr_pool_t *pool);
+
+
+/**
+ * Similar to svn_client_switch3() but with @a ignore_ancestry always
+ * set to TRUE.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_switch2(svn_revnum_t *result_rev,
                    const char *path,
@@ -1274,8 +1430,8 @@
  * Similar to svn_client_switch2() but with @a allow_unver_obstructions,
  * @a ignore_externals, and @a depth_is_sticky always set to FALSE,
  * and @a depth set according to @a recurse: if @a recurse is TRUE,
- * set @a depth to @c svn_depth_infinity, if @a recurse is FALSE, set
- * @a depth to @c svn_depth_files.
+ * set @a depth to #svn_depth_infinity, if @a recurse is FALSE, set
+ * @a depth to #svn_depth_files.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
@@ -1300,11 +1456,11 @@
 /**
  * Schedule a working copy @a path for addition to the repository.
  *
- * If @a depth is @c svn_depth_empty, add just @a path and nothing
- * below it.  If @c svn_depth_files, add @a path and any file
- * children of @a path.  If @c svn_depth_immediates, add @a path, any
+ * If @a depth is #svn_depth_empty, add just @a path and nothing
+ * below it.  If #svn_depth_files, add @a path and any file
+ * children of @a path.  If #svn_depth_immediates, add @a path, any
  * file children, and any immediate subdirectories (but nothing
- * underneath those subdirectories).  If @c svn_depth_infinity, add
+ * underneath those subdirectories).  If #svn_depth_infinity, add
  * @a path and everything under it fully recursively.
  *
  * @a path's parent must be under revision control already (unless
@@ -1313,7 +1469,7 @@
  * be scheduled for addition as well.
  *
  * If @a force is not set and @a path is already under version
- * control, return the error @c SVN_ERR_ENTRY_EXISTS.  If @a force is
+ * control, return the error #SVN_ERR_ENTRY_EXISTS.  If @a force is
  * set, do not error on already-versioned items.  When used on a
  * directory in conjunction with the @a recursive flag, this has the
  * effect of scheduling for addition unversioned files and directories
@@ -1323,12 +1479,18 @@
  * @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of the
  * added item.
  *
- * If @a no_ignore is FALSE, don't add files or directories that match
- * ignore patterns.
+ * If @a no_ignore is FALSE, don't add any file or directory (or recurse
+ * into any directory) that is unversioned and found by recursion (as
+ * opposed to being the explicit target @a path) and whose name matches the
+ * svn:ignore property on its parent directory or the global-ignores list in
+ * @a ctx->config. If @a no_ignore is TRUE, do include such files and
+ * directories. (Note that an svn:ignore property can influence this
+ * behaviour only when recursing into an already versioned directory with @a
+ * force.)
  *
  * If @a add_parents is TRUE, recurse up @a path's directory and look for
  * a versioned directory.  If found, add all intermediate paths between it
- * and @a path.  If not found, return @c SVN_ERR_CLIENT_NO_VERSIONED_PARENTS.
+ * and @a path.  If not found, return #SVN_ERR_CLIENT_NO_VERSIONED_PARENT.
  *
  * @par Important:
  * This is a *scheduling* operation.  No changes will
@@ -1349,7 +1511,7 @@
 /**
  * Similar to svn_client_add4(), but with @a add_parents always set to
  * FALSE and @a depth set according to @a recursive: if TRUE, then
- * @a depth is @c svn_depth_infinity, if FALSE, then @c svn_depth_empty.
+ * @a depth is #svn_depth_infinity, if FALSE, then #svn_depth_empty.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
@@ -1400,8 +1562,7 @@
  *
  * If @a paths contains URLs, use the authentication baton in @a ctx
  * and @a message to immediately attempt to commit the creation of the
- * directories in @a paths in the repository.  If the commit succeeds,
- * allocate (in @a pool) and populate @a *commit_info_p.
+ * directories in @a paths in the repository.
  *
  * Else, create the directories on disk, and attempt to schedule them
  * for addition (using svn_client_add(), whose docstring you should
@@ -1425,8 +1586,29 @@
  * @a ctx->notify_baton2 and the path of the new directory.  Note that this is
  * only called for items added to the working copy.
  *
+ * If @a commit_callback is non-NULL, then for each successful commit, call
+ * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
+ * the commit.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_mkdir4(const apr_array_header_t *paths,
+                  svn_boolean_t make_parents,
+                  const apr_hash_t *revprop_table,
+                  svn_commit_callback2_t commit_callback,
+                  void *commit_baton,
+                  svn_client_ctx_t *ctx,
+                  apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_mkdir4(), but returns the commit info in
+ * @a *commit_info_p rather than through a callback function.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_mkdir3(svn_commit_info_t **commit_info_p,
                   const apr_array_header_t *paths,
@@ -1451,7 +1633,7 @@
                   apr_pool_t *pool);
 
 /**
- * Same as svn_client_mkdir2(), but takes the @c svn_client_commit_info_t
+ * Same as svn_client_mkdir2(), but takes the #svn_client_commit_info_t
  * type for @a commit_info_p.
  *
  * @deprecated Provided for backward compatibility with the 1.2 API.
@@ -1476,9 +1658,7 @@
  * If the paths in @a paths are URLs, use the authentication baton in
  * @a ctx and @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to
  * immediately attempt to commit a deletion of the URLs from the
- * repository.  If the commit succeeds, allocate (in @a pool) and
- * populate @a *commit_info_p.  Every path must belong to the same
- * repository.
+ * repository.  Every path must belong to the same repository.
  *
  * Else, schedule the working copy paths in @a paths for removal from
  * the repository.  Each path's parent must be under revision control.
@@ -1511,8 +1691,30 @@
  * @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of the deleted
  * item.
  *
+ * If @a commit_callback is non-NULL, then for each successful commit, call
+ * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
+ * the commit.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_delete4(const apr_array_header_t *paths,
+                   svn_boolean_t force,
+                   svn_boolean_t keep_local,
+                   const apr_hash_t *revprop_table,
+                   svn_commit_callback2_t commit_callback,
+                   void *commit_baton,
+                   svn_client_ctx_t *ctx,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_delete4(), but returns the commit info in
+ * @a *commit_info_p rather than through a callback function.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_delete3(svn_commit_info_t **commit_info_p,
                    const apr_array_header_t *paths,
@@ -1537,7 +1739,7 @@
                    apr_pool_t *pool);
 
 /**
- * Similar to svn_client_delete2(), but takes the @c svn_client_commit_info_t
+ * Similar to svn_client_delete2(), but takes the #svn_client_commit_info_t
  * type for @a commit_info_p.
  *
  * @deprecated Provided for backward compatibility with the 1.2 API.
@@ -1562,10 +1764,14 @@
 /** Import file or directory @a path into repository directory @a url at
  * head, authenticating with the authentication baton cached in @a ctx,
  * and using @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to get a log message
- * for the (implied) commit.  Set @a *commit_info_p to the results of the
- * commit, allocated in @a pool.  If some components of @a url do not exist
+ * for the (implied) commit.  If some components of @a url do not exist
  * then create parent directories as necessary.
  *
+ * This function reads an unversioned tree from disk and skips any ".svn"
+ * directories. Even if a file or directory being imported is part of an
+ * existing WC, this function sees it as unversioned and does not notice any
+ * existing Subversion properties in it.
+ *
  * If @a path is a directory, the contents of that directory are
  * imported directly into the directory identified by @a url.  Note that the
  * directory @a path itself is not imported -- that is, the basename of
@@ -1577,8 +1783,8 @@
  *
  * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2 with
  * @a ctx->notify_baton2 as the import progresses, with any of the following
- * actions: @c svn_wc_notify_commit_added,
- * @c svn_wc_notify_commit_postfix_txdelta.
+ * actions: #svn_wc_notify_commit_added,
+ * #svn_wc_notify_commit_postfix_txdelta.
  *
  * Use @a pool for any temporary allocation.
  *
@@ -1591,21 +1797,51 @@
  * combo that this function can use to query for a commit log message
  * when one is needed.
  *
- * If @a depth is @c svn_depth_empty, import just @a path and nothing
- * below it.  If @c svn_depth_files, import @a path and any file
- * children of @a path.  If @c svn_depth_immediates, import @a path, any
+ * If @a depth is #svn_depth_empty, import just @a path and nothing
+ * below it.  If #svn_depth_files, import @a path and any file
+ * children of @a path.  If #svn_depth_immediates, import @a path, any
  * file children, and any immediate subdirectories (but nothing
- * underneath those subdirectories).  If @c svn_depth_infinity, import
+ * underneath those subdirectories).  If #svn_depth_infinity, import
  * @a path and everything under it fully recursively.
  *
- * If @a no_ignore is @c FALSE, don't add files or directories that match
- * ignore patterns.
+ * If @a no_ignore is @c FALSE, don't import any file or directory (or
+ * recurse into any directory) that is found by recursion (as opposed to
+ * being the explicit target @a path) and whose name matches the
+ * global-ignores list in @a ctx->config. If @a no_ignore is @c TRUE, do
+ * include such files and directories. (Note that svn:ignore properties are
+ * not involved, as auto-props cannot set properties on directories and even
+ * if the target is part of a WC the import ignores any existing
+ * properties.)
  *
  * If @a ignore_unknown_node_types is @c FALSE, ignore files of which the
  * node type is unknown, such as device files and pipes.
  *
+ * If @a commit_callback is non-NULL, then for each successful commit, call
+ * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
+ * the commit.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_import4(const char *path,
+                   const char *url,
+                   svn_depth_t depth,
+                   svn_boolean_t no_ignore,
+                   svn_boolean_t ignore_unknown_node_types,
+                   const apr_hash_t *revprop_table,
+                   svn_commit_callback2_t commit_callback,
+                   void *commit_baton,
+                   svn_client_ctx_t *ctx,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_import4(), but returns the commit info in
+ * @a *commit_info_p rather than through a callback function.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_import3(svn_commit_info_t **commit_info_p,
                    const char *path,
@@ -1621,7 +1857,7 @@
  * Similar to svn_client_import3(), but with @a ignore_unknown_node_types
  * always set to @c FALSE, @a revprop_table passed as NULL, and @a
  * depth set according to @a nonrecursive: if TRUE, then @a depth is
- * @c svn_depth_files, else @c svn_depth_infinity.
+ * #svn_depth_files, else #svn_depth_infinity.
  *
  * @since New in 1.3.
  *
@@ -1639,7 +1875,7 @@
 
 /**
  * Similar to svn_client_import2(), but with @a no_ignore always set
- * to FALSE and using the @c svn_client_commit_info_t type for
+ * to FALSE and using the #svn_client_commit_info_t type for
  * @a commit_info_p.
  *
  * @deprecated Provided for backward compatibility with the 1.2 API.
@@ -1679,20 +1915,21 @@
  *
  * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2 with
  * @a ctx->notify_baton2 as the commit progresses, with any of the following
- * actions: @c svn_wc_notify_commit_modified, @c svn_wc_notify_commit_added,
- * @c svn_wc_notify_commit_deleted, @c svn_wc_notify_commit_replaced,
- * @c svn_wc_notify_commit_postfix_txdelta.
+ * actions: #svn_wc_notify_commit_modified, #svn_wc_notify_commit_added,
+ * #svn_wc_notify_commit_deleted, #svn_wc_notify_commit_replaced,
+ * #svn_wc_notify_commit_copied, #svn_wc_notify_commit_copied_replaced,
+ * #svn_wc_notify_commit_postfix_txdelta.
  *
- * If @a depth is @c svn_depth_infinity, commit all changes to and
- * below named targets.  If @a depth is @c svn_depth_empty, commit
+ * If @a depth is #svn_depth_infinity, commit all changes to and
+ * below named targets.  If @a depth is #svn_depth_empty, commit
  * only named targets (that is, only property changes on named
  * directory targets, and property and content changes for named file
- * targets).  If @a depth is @c svn_depth_files, behave as above for
+ * targets).  If @a depth is #svn_depth_files, behave as above for
  * named file targets, and for named directory targets, commit
  * property changes on a named directory and all changes to files
- * directly inside that directory.  If @c svn_depth_immediates, behave
- * as for @c svn_depth_files, and for subdirectories of any named
- * directory target commit as though for @c svn_depth_empty.
+ * directly inside that directory.  If #svn_depth_immediates, behave
+ * as for #svn_depth_files, and for subdirectories of any named
+ * directory target commit as though for #svn_depth_empty.
  *
  * Unlock paths in the repository, unless @a keep_locks is TRUE.
  *
@@ -1704,14 +1941,57 @@
  * keep_changelists is set.  If @a changelists is
  * empty (or altogether @c NULL), no changelist filtering occurs.
  *
+ * If @a commit_as_operations is set to FALSE, when a copy is committed
+ * all changes below the copy are always committed at the same time
+ * (independent of the value of @a depth). If @a commit_as_operations is
+ * #TRUE, changes to descendants are only committed if they are itself
+ * included via @a depth and targets.
+ *
+ * When @a commit_as_operations is #TRUE it is possible to delete a node and
+ * all its descendants by selecting just the root of the deletion. If it is
+ * set to #FALSE this will raise an error.
+ *
+ * If @a commit_callback is non-NULL, then for each successful commit, call
+ * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
+ * the commit.
+ *
+ * @note #svn_depth_unknown and #svn_depth_exclude must not be passed
+ * for @a depth.
+ *
  * Use @a pool for any temporary allocations.
  *
- * If no error is returned and @a (*commit_info_p)->revision is set to
- * @c SVN_INVALID_REVNUM, then the commit was a no-op; nothing needed to
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_commit5(const apr_array_header_t *targets,
+                   svn_depth_t depth,
+                   svn_boolean_t keep_locks,
+                   svn_boolean_t keep_changelists,
+                   svn_boolean_t commit_as_operations,
+                   const apr_array_header_t *changelists,
+                   const apr_hash_t *revprop_table,
+                   svn_commit_callback2_t commit_callback,
+                   void *commit_baton,
+                   svn_client_ctx_t *ctx,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_commit5(), but returns the commit info in
+ * @a *commit_info_p rather than through a callback function.  Does not use
+ * #svn_wc_notify_commit_copied or #svn_wc_notify_commit_copied_replaced
+ * (preferring #svn_wc_notify_commit_added and
+ * #svn_wc_notify_commit_replaced, respectively, instead).
+ *
+ * Also, if no error is returned and @a (*commit_info_p)->revision is set to
+ * #SVN_INVALID_REVNUM, then the commit was a no-op; nothing needed to
  * be committed.
  *
+ * Sets @a commit_as_operations to FALSE to match Subversion 1.6's behavior.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_commit4(svn_commit_info_t **commit_info_p,
                    const apr_array_header_t *targets,
@@ -1727,8 +2007,7 @@
  * Similar to svn_client_commit4(), but always with NULL for
  * @a changelist_name, FALSE for @a keep_changelist, NULL for @a
  * revprop_table, and @a depth set according to @a recurse: if @a
- * recurse is TRUE, use @c svn_depth_infinity, else @c
- * svn_depth_empty.
+ * recurse is TRUE, use #svn_depth_infinity, else #svn_depth_empty.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  *
@@ -1744,7 +2023,7 @@
                    apr_pool_t *pool);
 
 /**
- * Similar to svn_client_commit3(), but uses @c svn_client_commit_info_t
+ * Similar to svn_client_commit3(), but uses #svn_client_commit_info_t
  * for @a commit_info_p.
  *
  * @deprecated Provided for backward compatibility with the 1.2 API.
@@ -1784,8 +2063,186 @@
  */
 
 /**
+ * Structure for holding the "status" of a working copy item.
+ *
+ * @note Fields may be added to the end of this structure in future
+ * versions.  Therefore, to preserve binary compatibility, users
+ * should not directly allocate structures of this type.
+ *
+ * @since New in 1.7.
+ */
+typedef struct svn_client_status_t
+{
+  /** The kind of node as recorded in the working copy */
+  svn_node_kind_t kind;
+
+  /** The absolute path to the node */
+  const char *local_abspath;
+
+  /** The actual size of the working file on disk, or SVN_INVALID_FILESIZE
+   * if unknown (or if the item isn't a file at all). */
+  svn_filesize_t filesize;
+
+  /** If the path is under version control, versioned is TRUE, otherwise
+   * FALSE. */
+  svn_boolean_t versioned;
+
+  /** Set to TRUE if the node is the victim of some kind of conflict. */
+  svn_boolean_t conflicted;
+
+  /** The status of the node, based on the restructuring changes and if the
+   * node has no restructuring changes the text and prop status. */
+  enum svn_wc_status_kind node_status;
+
+  /** The status of the text of the node, not including restructuring changes.
+   * Valid values are: svn_wc_status_none, svn_wc_status_normal,
+   * svn_wc_status_modified and svn_wc_status_conflicted. */
+  enum svn_wc_status_kind text_status;
+
+  /** The status of the node's properties.
+   * Valid values are: svn_wc_status_none, svn_wc_status_normal,
+   * svn_wc_status_modified and svn_wc_status_conflicted. */
+  enum svn_wc_status_kind prop_status;
+
+  /** a node can be 'locked' if a working copy update is in progress or
+   * was interrupted. */
+  svn_boolean_t wc_is_locked;
+
+  /** a file or directory can be 'copied' if it's scheduled for
+   * addition-with-history (or part of a subtree that is scheduled as such.).
+   */
+  svn_boolean_t copied;
+
+  /** The URL of the repository root. */
+  const char *repos_root_url;
+
+  /** The UUID of the repository */
+  const char *repos_uuid;
+
+  /** The in-repository path relative to the repository root. */
+  const char *repos_relpath;
+
+  /** Base revision. */
+  svn_revnum_t revision;
+
+  /** Last revision this was changed */
+  svn_revnum_t changed_rev;
+
+  /** Date of last commit. */
+  apr_time_t changed_date;
+
+  /** Last commit author of this item */
+  const char *changed_author;
+
+    /** a file or directory can be 'switched' if the switch command has been
+   * used.  If this is TRUE, then file_external will be FALSE.
+   */
+  svn_boolean_t switched;
+
+  /** If the item is a file that was added to the working copy with an
+   * svn:externals; if file_external is TRUE, then switched is always
+   * FALSE.
+   */
+  svn_boolean_t file_external;
+
+  /** The locally present lock. (Values of path, token, owner, comment and
+   * are available if a lock is present) */
+  const svn_lock_t *lock;
+
+  /** Which changelist this item is part of, or NULL if not part of any. */
+  const char *changelist;
+
+  /** The depth of the node as recorded in the working copy
+   * (#svn_depth_unknown for files or when no depth is recorded) */
+  svn_depth_t depth;
+
+  /**
+   * @defgroup svn_wc_status_ood WC out-of-date info from the repository
+   * @{
+   *
+   * When the working copy item is out-of-date compared to the
+   * repository, the following fields represent the state of the
+   * youngest revision of the item in the repository.  If the working
+   * copy is not out of date, the fields are initialized as described
+   * below.
+   */
+
+  /** Set to the node kind of the youngest commit, or #svn_node_none
+   * if not out of date. */
+  svn_node_kind_t ood_kind;
+
+  /** The status of the node, based on the text status if the node has no
+   * restructuring changes */
+  enum svn_wc_status_kind repos_node_status;
+
+  /** The node's text status in the repository. */
+  enum svn_wc_status_kind repos_text_status;
+
+  /** The node's property status in the repository. */
+  enum svn_wc_status_kind repos_prop_status;
+
+  /** The node's lock in the repository, if any. */
+  const svn_lock_t *repos_lock;
+
+  /** Set to the youngest committed revision, or #SVN_INVALID_REVNUM
+   * if not out of date. */
+  svn_revnum_t ood_changed_rev;
+
+  /** Set to the most recent commit date, or @c 0 if not out of date. */
+  apr_time_t ood_changed_date;
+
+  /** Set to the user name of the youngest commit, or @c NULL if not
+   * out of date or non-existent.  Because a non-existent @c
+   * svn:author property has the same behavior as an out-of-date
+   * working copy, examine @c ood_changed_rev to determine whether
+   * the working copy is out of date. */
+  const char *ood_changed_author;
+
+  /** @} */
+
+  /** Reserved for libsvn_client's internal use; this value is only to be used for
+   * libsvn_client backwards compatibility wrappers. This value may be NULL or
+   * to other data in future versions. */
+  const void *backwards_compatibility_baton;
+
+  /* NOTE! Please update svn_client_status_dup() when adding new fields here. */
+} svn_client_status_t;
+
+/**
+ * Return a duplicate of @a status, allocated in @a result_pool. No part of the new
+ * structure will be shared with @a status.
+ *
+ * @since New in 1.7.
+ */
+svn_client_status_t *
+svn_client_status_dup(const svn_client_status_t *status,
+                      apr_pool_t *result_pool);
+
+/**
+ * A callback for reporting a @a status about @a path (which may be an
+ * absolute or relative path).
+ *
+ * @a baton is a closure object; it should be provided by the
+ * implementation, and passed by the caller.
+ *
+ * @a scratch_pool will be cleared between invocations to the callback.
+ *
+ * ### we might be revamping the status infrastructure, and this callback
+ * ### could totally disappear by the end of 1.7 development. however, we
+ * ### need to mark the STATUS parameter as "const" so that it is easier
+ * ### to reason about who/what can modify those structures.
+ *
+ * @since New in 1.7.
+ */
+typedef svn_error_t *(*svn_client_status_func_t)(
+                                            void *baton,
+                                            const char *path,
+                                            const svn_client_status_t *status,
+                                            apr_pool_t *scratch_pool);
+
+/**
  * Given @a path to a working copy directory (or single file), call
- * @a status_func/status_baton with a set of @c svn_wc_status_t *
+ * @a status_func/status_baton with a set of #svn_wc_status_t *
  * structures which describe the status of @a path, and its children
  * (recursing according to @a depth).
  *
@@ -1800,21 +2257,61 @@
  *      working copy was compared (@a *result_rev is not meaningful unless
  *      @a update is set).
  *
+ * If @a no_ignore is @c FALSE, don't report any file or directory (or
+ * recurse into any directory) that is found by recursion (as opposed to
+ * being the explicit target @a path) and whose name matches the
+ * svn:ignore property on its parent directory or the global-ignores
+ * list in @a ctx->config. If @a no_ignore is @c TRUE, report each such
+ * file or directory with the status code #svn_wc_status_ignored.
+ *
  * If @a ignore_externals is not set, then recurse into externals
  * definitions (if any exist) after handling the main target.  This
- * calls the client notification function (in @a ctx) with the @c
- * svn_wc_notify_status_external action before handling each externals
- * definition, and with @c svn_wc_notify_status_completed
+ * calls the client notification function (in @a ctx) with the
+ * #svn_wc_notify_status_external action before handling each externals
+ * definition, and with #svn_wc_notify_status_completed
  * after each.
  *
+ * If @a depth_as_sticky is set and @a depth is not
+ * #svn_depth_unknown, then the status is calculated as if depth_is_sticky
+ * was passed to an equivalent update command.
+ *
  * @a changelists is an array of <tt>const char *</tt> changelist
  * names, used as a restrictive filter on items whose statuses are
  * reported; that is, don't report status about any item unless
  * it's a member of one of those changelists.  If @a changelists is
  * empty (or altogether @c NULL), no changelist filtering occurs.
  *
+ * If @a path is an absolute path then the @c path parameter passed in each
+ * call to @a status_func will be an absolute path.
+ *
+ * All temporary allocations are performed in @a scratch_pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_status5(svn_revnum_t *result_rev,
+                   svn_client_ctx_t *ctx,
+                   const char *path,
+                   const svn_opt_revision_t *revision,
+                   svn_depth_t depth,
+                   svn_boolean_t get_all,
+                   svn_boolean_t update,
+                   svn_boolean_t no_ignore,
+                   svn_boolean_t ignore_externals,
+                   svn_boolean_t depth_as_sticky,
+                   const apr_array_header_t *changelists,
+                   svn_client_status_func_t status_func,
+                   void *status_baton,
+                   apr_pool_t *scratch_pool);
+
+/**
+ * Same as svn_client_status5(), but using #svn_wc_status_func3_t
+ * instead of #svn_client_status_func_t and depth_as_sticky set to TRUE.
+ *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_status4(svn_revnum_t *result_rev,
                    const char *path,
@@ -1831,8 +2328,8 @@
                    apr_pool_t *pool);
 
 /**
- * Same as svn_client_status4(), but using an @c svn_wc_status_func2_t
- * instead of an @c svn_wc_status_func3_t.
+ * Same as svn_client_status4(), but using an #svn_wc_status_func2_t
+ * instead of an #svn_wc_status_func3_t.
  *
  * @since New in 1.5.
  * @deprecated Provided for backward compatibility with the 1.5 API.
@@ -1856,8 +2353,8 @@
 /**
  * Like svn_client_status3(), except with @a changelists passed as @c
  * NULL, and with @a recurse instead of @a depth.  If @a recurse is
- * TRUE, behave as if for @c svn_depth_infinity; else if @a recurse is
- * FALSE, behave as if for @c svn_depth_immediates.
+ * TRUE, behave as if for #svn_depth_infinity; else if @a recurse is
+ * FALSE, behave as if for #svn_depth_immediates.
  *
  * @since New in 1.2.
  * @deprecated Provided for backward compatibility with the 1.4 API.
@@ -1880,8 +2377,8 @@
 
 /**
  * Similar to svn_client_status2(), but with @a ignore_externals
- * always set to FALSE, taking the @c svn_wc_status_func_t type
- * instead of the @c svn_wc_status_func2_t type for @a status_func,
+ * always set to FALSE, taking the #svn_wc_status_func_t type
+ * instead of the #svn_wc_status_func2_t type for @a status_func,
  * and requiring @a *revision to be non-const even though it is
  * treated as constant.
  *
@@ -1911,7 +2408,7 @@
 
 /**
  * Invoke @a receiver with @a receiver_baton on each log message from
- * each start/end revision pair in the @a revision_ranges in turn,
+ * each (#svn_opt_revision_range_t *) range in @a revision_ranges in turn,
  * inclusive (but never invoke @a receiver on a given log message more
  * than once).
  *
@@ -1920,8 +2417,8 @@
  * messages are desired.  @a receiver is invoked only on messages whose
  * revisions involved a change to some path in @a targets.  @a peg_revision
  * indicates in which revision @a targets are valid.  If @a peg_revision is
- * @c svn_opt_revision_unspecified, it defaults to @c svn_opt_revision_head
- * for URLs or @c svn_opt_revision_working for WC paths.
+ * #svn_opt_revision_unspecified, it defaults to #svn_opt_revision_head
+ * for URLs or #svn_opt_revision_working for WC paths.
  *
  * If @a limit is non-zero only invoke @a receiver on the first @a limit
  * logs.
@@ -1938,16 +2435,13 @@
  * If @a revprops is NULL, retrieve all revprops; else, retrieve only the
  * revprops named in the array (i.e. retrieve none if the array is empty).
  *
- * If @a start->kind or @a end->kind is @c svn_opt_revision_unspecified,
- * return the error @c SVN_ERR_CLIENT_BAD_REVISION.
- *
  * Use @a pool for any temporary allocation.
  *
  * @par Important:
  * A special case for the revision range HEAD:1, which was present
  * in svn_client_log(), has been removed from svn_client_log2().  Instead, it
  * is expected that callers will specify the range HEAD:0, to avoid a
- * SVN_ERR_FS_NO_SUCH_REVISION error when invoked against an empty repository
+ * #SVN_ERR_FS_NO_SUCH_REVISION error when invoked against an empty repository
  * (i.e. one not containing a revision 1).
  *
  * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2/baton2
@@ -1993,8 +2487,8 @@
                 apr_pool_t *pool);
 
 /**
- * Similar to svn_client_log4(), but using @c svn_log_message_receiver_t
- * instead of @c svn_log_entry_receiver_t.  Also, @a
+ * Similar to svn_client_log4(), but using #svn_log_message_receiver_t
+ * instead of #svn_log_entry_receiver_t.  Also, @a
  * include_merged_revisions is set to @c FALSE and @a revprops is
  * svn:author, svn:date, and svn:log.
  *
@@ -2018,7 +2512,7 @@
 
 /**
  * Similar to svn_client_log3(), but with the @c kind field of
- * @a peg_revision set to @c svn_opt_revision_unspecified.
+ * @a peg_revision set to #svn_opt_revision_unspecified.
  *
  * @deprecated Provided for compatibility with the 1.3 API.
  * @since New in 1.2.
@@ -2043,8 +2537,8 @@
  *
  * Special case for repositories at revision 0:
  *
- * If @a start->kind is @c svn_opt_revision_head, and @a end->kind is
- * @c svn_opt_revision_number && @a end->number is @c 1, then handle an
+ * If @a start->kind is #svn_opt_revision_head, and @a end->kind is
+ * #svn_opt_revision_number && @a end->number is @c 1, then handle an
  * empty (no revisions) repository specially: instead of erroring
  * because requested revision 1 when the highest revision is 0, just
  * invoke @a receiver on revision 0, passing @c NULL for changed paths and
@@ -2055,7 +2549,7 @@
  * revision 1.  That works fine, except when there are no commits in
  * the repository, hence this special case.
  *
- * @deprecated Provided for backward compatibility with the 1.0 API.
+ * @deprecated Provided for backward compatibility with the 1.1 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -2082,16 +2576,16 @@
  * associated with revision @a end of @a path_or_url, using @a start
  * as the default source of all blame.  @a peg_revision indicates in
  * which revision @a path_or_url is valid.  If @a peg_revision->kind
- * is @c svn_opt_revision_unspecified, then it defaults to @c
- * svn_opt_revision_head for URLs or @c svn_opt_revision_working for
+ * is #svn_opt_revision_unspecified, then it defaults to
+ * #svn_opt_revision_head for URLs or #svn_opt_revision_working for
  * WC targets.
  *
- * If @a start->kind or @a end->kind is @c svn_opt_revision_unspecified,
- * return the error @c SVN_ERR_CLIENT_BAD_REVISION.  If either are @c
- * svn_opt_revision_working, return the error @c
- * SVN_ERR_UNSUPPORTED_FEATURE.  If any of the revisions of @a
- * path_or_url have a binary mime-type, return the error @c
- * SVN_ERR_CLIENT_IS_BINARY_FILE, unless @a ignore_mime_type is TRUE,
+ * If @a start->kind or @a end->kind is #svn_opt_revision_unspecified,
+ * return the error #SVN_ERR_CLIENT_BAD_REVISION.  If either are
+ * #svn_opt_revision_working, return the error
+ * #SVN_ERR_UNSUPPORTED_FEATURE.  If any of the revisions of @a
+ * path_or_url have a binary mime-type, return the error
+ * #SVN_ERR_CLIENT_IS_BINARY_FILE, unless @a ignore_mime_type is TRUE,
  * in which case blame information will be generated regardless of the
  * MIME types of the revisions.
  *
@@ -2103,8 +2597,31 @@
  *
  * Use @a pool for any temporary allocation.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_blame5(const char *path_or_url,
+                  const svn_opt_revision_t *peg_revision,
+                  const svn_opt_revision_t *start,
+                  const svn_opt_revision_t *end,
+                  const svn_diff_file_options_t *diff_options,
+                  svn_boolean_t ignore_mime_type,
+                  svn_boolean_t include_merged_revisions,
+                  svn_client_blame_receiver3_t receiver,
+                  void *receiver_baton,
+                  svn_client_ctx_t *ctx,
+                  apr_pool_t *pool);
+
+
+/**
+ * Similar to svn_client_blame5(), but with #svn_client_blame_receiver3_t
+ * as the receiver.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
+ *
  * @since New in 1.5.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_blame4(const char *path_or_url,
                   const svn_opt_revision_t *peg_revision,
@@ -2120,7 +2637,7 @@
 
 /**
  * Similar to svn_client_blame4(), but with @a include_merged_revisions set
- * to FALSE, and using a @c svn_client_blame_receiver2_t as the receiver.
+ * to FALSE, and using a #svn_client_blame_receiver2_t as the receiver.
  *
  * @deprecated Provided for backwards compatibility with the 1.4 API.
  *
@@ -2198,19 +2715,19 @@
  * error will be returned.
  *
  * If either @a revision1 or @a revision2 has an `unspecified' or
- * unrecognized `kind', return @c SVN_ERR_CLIENT_BAD_REVISION.
+ * unrecognized `kind', return #SVN_ERR_CLIENT_BAD_REVISION.
  *
  * @a path1 and @a path2 must both represent the same node kind -- that
  * is, if @a path1 is a directory, @a path2 must also be, and if @a path1
  * is a file, @a path2 must also be.
  *
- * If @a depth is @c svn_depth_infinity, diff fully recursively.
- * Else if it is @c svn_depth_immediates, diff the named paths and
+ * If @a depth is #svn_depth_infinity, diff fully recursively.
+ * Else if it is #svn_depth_immediates, diff the named paths and
  * their file children (if any), and diff properties of
  * subdirectories, but do not descend further into the subdirectories.
- * Else if @c svn_depth_files, behave as if for @c svn_depth_immediates
- * except don't diff properties of subdirectories.  If @c
- * svn_depth_empty, diff exactly the named paths but nothing
+ * Else if #svn_depth_files, behave as if for #svn_depth_immediates
+ * except don't diff properties of subdirectories.  If
+ * #svn_depth_empty, diff exactly the named paths but nothing
  * underneath them.
  *
  * Use @a ignore_ancestry to control whether or not items being
@@ -2222,6 +2739,14 @@
  * If @a no_diff_deleted is TRUE, then no diff output will be
  * generated on deleted files.
  *
+ * If @a show_copies_as_adds is TRUE, then copied files will not be diffed
+ * against their copyfrom source, and will appear in the diff output
+ * in their entirety, as if they were newly added.
+ *
+ * If @a use_git_diff_format is TRUE, then the git's extended diff format
+ * will be used.
+ * ### Do we need to say more about the format? A reference perhaps?
+ *
  * Generated headers are encoded using @a header_encoding.
  *
  * Diff output will not be generated for binary files, unless @a
@@ -2230,7 +2755,9 @@
  *
  * @a diff_options (an array of <tt>const char *</tt>) is used to pass
  * additional command line options to the diff processes invoked to compare
- * files.
+ * files. @a diff_options is allowed to be @c NULL, in which case a value
+ * for this option might still be obtained from the Subversion configuration
+ * file via client context @a ctx.
  *
  * The authentication baton cached in @a ctx is used to communicate with
  * the repository.
@@ -2250,10 +2777,10 @@
  * @note @a relative_to_dir doesn't affect the path index generated by
  * external diff programs.
  *
- * @since New in 1.5.
+ * @since New in 1.7.
  */
 svn_error_t *
-svn_client_diff4(const apr_array_header_t *diff_options,
+svn_client_diff5(const apr_array_header_t *diff_options,
                  const char *path1,
                  const svn_opt_revision_t *revision1,
                  const char *path2,
@@ -2262,7 +2789,9 @@
                  svn_depth_t depth,
                  svn_boolean_t ignore_ancestry,
                  svn_boolean_t no_diff_deleted,
+                 svn_boolean_t show_copies_as_adds,
                  svn_boolean_t ignore_content_type,
+                 svn_boolean_t use_git_diff_format,
                  const char *header_encoding,
                  apr_file_t *outfile,
                  apr_file_t *errfile,
@@ -2270,20 +2799,44 @@
                  svn_client_ctx_t *ctx,
                  apr_pool_t *pool);
 
-
 /**
- * Similar to svn_client_diff4(), but with @a changelists passed as @c
- * NULL, and @a depth set according to @a recurse: if @a recurse is
- * TRUE, set @a depth to @c svn_depth_infinity, if @a recurse is
- * FALSE, set @a depth to @c svn_depth_empty.
- *
- * @deprecated Provided for backward compatibility with the 1.4 API.
+ * Similar to svn_client_diff5(), but with @a show_copies_as_adds set to
+ * @c FALSE and @a use_git_diff_format set to @c FALSE.
  *
- * @since New in 1.3.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * @since New in 1.5.
  */
 SVN_DEPRECATED
 svn_error_t *
-svn_client_diff3(const apr_array_header_t *diff_options,
+svn_client_diff4(const apr_array_header_t *diff_options,
+                 const char *path1,
+                 const svn_opt_revision_t *revision1,
+                 const char *path2,
+                 const svn_opt_revision_t *revision2,
+                 const char *relative_to_dir,
+                 svn_depth_t depth,
+                 svn_boolean_t ignore_ancestry,
+                 svn_boolean_t no_diff_deleted,
+                 svn_boolean_t ignore_content_type,
+                 const char *header_encoding,
+                 apr_file_t *outfile,
+                 apr_file_t *errfile,
+                 const apr_array_header_t *changelists,
+                 svn_client_ctx_t *ctx,
+                 apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_diff4(), but with @a changelists passed as @c
+ * NULL, and @a depth set according to @a recurse: if @a recurse is
+ * TRUE, set @a depth to #svn_depth_infinity, if @a recurse is
+ * FALSE, set @a depth to #svn_depth_empty.
+ *
+ * @deprecated Provided for backward compatibility with the 1.4 API.
+ * @since New in 1.3.
+ */
+SVN_DEPRECATED
+svn_error_t *
+svn_client_diff3(const apr_array_header_t *diff_options,
                  const char *path1,
                  const svn_opt_revision_t *revision1,
                  const char *path2,
@@ -2304,7 +2857,6 @@
  * @c APR_LOCALE_CHARSET.
  *
  * @deprecated Provided for backward compatibility with the 1.2 API.
- *
  * @since New in 1.2.
  */
 SVN_DEPRECATED
@@ -2327,7 +2879,7 @@
  * Similar to svn_client_diff2(), but with @a ignore_content_type
  * always set to FALSE.
  *
- * @deprecated Provided for backward compatibility with the 1.0 API.
+ * @deprecated Provided for backward compatibility with the 1.1 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -2350,14 +2902,42 @@
  * changed between @a start_revision and @a end_revision.  @a path can
  * be either a working-copy path or URL.
  *
- * If @a peg_revision is @c svn_opt_revision_unspecified, behave
- * identically to svn_client_diff4(), using @a path for both of that
- * function's @a path1 and @a path2 argments.
+ * If @a peg_revision is #svn_opt_revision_unspecified, behave
+ * identically to svn_client_diff5(), using @a path for both of that
+ * function's @a path1 and @a path2 arguments.
+ *
+ * All other options are handled identically to svn_client_diff5().
  *
- * All other options are handled identically to svn_client_diff4().
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_diff_peg5(const apr_array_header_t *diff_options,
+                     const char *path,
+                     const svn_opt_revision_t *peg_revision,
+                     const svn_opt_revision_t *start_revision,
+                     const svn_opt_revision_t *end_revision,
+                     const char *relative_to_dir,
+                     svn_depth_t depth,
+                     svn_boolean_t ignore_ancestry,
+                     svn_boolean_t no_diff_deleted,
+                     svn_boolean_t show_copies_as_adds,
+                     svn_boolean_t ignore_content_type,
+                     svn_boolean_t use_git_diff_format,
+                     const char *header_encoding,
+                     apr_file_t *outfile,
+                     apr_file_t *errfile,
+                     const apr_array_header_t *changelists,
+                     svn_client_ctx_t *ctx,
+                     apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_diff_peg5(), but with @a show_copies_as_adds set to
+ * @c FALSE and @a use_git_diff_format set to @c FALSE.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_diff_peg4(const apr_array_header_t *diff_options,
                      const char *path,
@@ -2379,11 +2959,10 @@
 /**
  * Similar to svn_client_diff_peg4(), but with @a changelists passed
  * as @c NULL, and @a depth set according to @a recurse: if @a recurse
- * is TRUE, set @a depth to @c svn_depth_infinity, if @a recurse is
- * FALSE, set @a depth to @c svn_depth_files.
+ * is TRUE, set @a depth to #svn_depth_infinity, if @a recurse is
+ * FALSE, set @a depth to #svn_depth_files.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
- *
  * @since New in 1.3.
  */
 SVN_DEPRECATED
@@ -2408,7 +2987,6 @@
  * @c APR_LOCALE_CHARSET.
  *
  * @deprecated Provided for backward compatibility with the 1.2 API.
- *
  * @since New in 1.2.
  */
 SVN_DEPRECATED
@@ -2459,9 +3037,9 @@
  * have the same contents.
  *
  * Calls @a summarize_func with @a summarize_baton for each difference
- * with a @c svn_client_diff_summarize_t structure describing the difference.
+ * with a #svn_client_diff_summarize_t structure describing the difference.
  *
- * See svn_client_diff4() for a description of the other parameters.
+ * See svn_client_diff5() for a description of the other parameters.
  *
  * @since New in 1.5.
  */
@@ -2481,8 +3059,8 @@
 /**
  * Similar to svn_client_diff_summarize2(), but with @a changelists
  * passed as @c NULL, and @a depth set according to @a recurse: if @a
- * recurse is TRUE, set @a depth to @c svn_depth_infinity, if @a
- * recurse is FALSE, set @a depth to @c svn_depth_files.
+ * recurse is TRUE, set @a depth to #svn_depth_infinity, if @a
+ * recurse is FALSE, set @a depth to #svn_depth_files.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  *
@@ -2507,17 +3085,17 @@
  * changed between @a start_revision and @a end_revision. @a path can
  * be either a working-copy path or URL.
  *
- * If @a peg_revision is @c svn_opt_revision_unspecified, behave
+ * If @a peg_revision is #svn_opt_revision_unspecified, behave
  * identically to svn_client_diff_summarize2(), using @a path for both
- * of that function's @a path1 and @a path2 argments.
+ * of that function's @a path1 and @a path2 arguments.
  *
  * The function may report false positives if @a ignore_ancestry is false,
  * as described in the documentation for svn_client_diff_summarize2().
  *
  * Call @a summarize_func with @a summarize_baton for each difference
- * with a @c svn_client_diff_summarize_t structure describing the difference.
+ * with a #svn_client_diff_summarize_t structure describing the difference.
  *
- * See svn_client_diff_peg4() for a description of the other parameters.
+ * See svn_client_diff_peg5() for a description of the other parameters.
  *
  * @since New in 1.5.
  */
@@ -2537,9 +3115,9 @@
 /**
  * Similar to svn_client_diff_summarize_peg2(), but with @a
  * changelists passed as @c NULL, and @a depth set according to @a
- * recurse: if @a recurse is TRUE, set @a depth to @c
- * svn_depth_infinity, if @a recurse is FALSE, set @a depth to @c
- * svn_depth_files.
+ * recurse: if @a recurse is TRUE, set @a depth to
+ * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to
+ * #svn_depth_files.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  *
@@ -2580,18 +3158,18 @@
  * is a file, @a source2 must also be.
  *
  * If either @a revision1 or @a revision2 has an `unspecified' or
- * unrecognized `kind', return @c SVN_ERR_CLIENT_BAD_REVISION.
+ * unrecognized `kind', return #SVN_ERR_CLIENT_BAD_REVISION.
  *
- * If @a depth is @c svn_depth_infinity, merge fully recursively.
- * Else if @c svn_depth_immediates, merge changes at most to files
+ * If @a depth is #svn_depth_infinity, merge fully recursively.
+ * Else if #svn_depth_immediates, merge changes at most to files
  * that are immediate children of @a target_wcpath and to directory
  * properties of @a target_wcpath and its immediate subdirectory children.
- * Else if @c svn_depth_files, merge at most to immediate file
+ * Else if #svn_depth_files, merge at most to immediate file
  * children of @a target_wcpath and to @a target_wcpath itself.
- * Else if @c svn_depth_empty, apply changes only to @a target_wcpath
+ * Else if #svn_depth_empty, apply changes only to @a target_wcpath
  * (i.e., directory property changes only)
  *
- * If @a depth is @c svn_depth_unknown, use the depth of @a target_wcpath.
+ * If @a depth is #svn_depth_unknown, use the depth of @a target_wcpath.
  *
  * Use @a ignore_ancestry to control whether or not items being
  * diffed will be checked for relatedness first.  Unrelated items
@@ -2613,19 +3191,48 @@
  * ctx->notify_baton2 once for each merged target, passing the target's local
  * path.
  *
- * If @a record_only is TRUE, the merge isn't actually performed, but
- * the mergeinfo for the revisions which would've been merged is
- * recorded in the working copy (and must be subsequently committed
- * back to the repository).
+ * If @a record_only is TRUE, the merge is performed, but is limited only to
+ * mergeinfo property changes on existing paths in @a target_wcpath.
  *
  * If @a dry_run is TRUE, the merge is carried out, and full notification
  * feedback is provided, but the working copy is not modified.
  *
+ * If allow_mixed_rev is @c FALSE, and @a merge_target is a mixed-revision
+ * working copy, raise @c SVN_ERR_CLIENT_MERGE_UPDATE_REQUIRED.
+ * Because users rarely intend to merge into mixed-revision working copies,
+ * it is recommended to set this parameter to FALSE by default unless the
+ * user has explicitly requested a merge into a mixed-revision working copy.
+ *
  * The authentication baton cached in @a ctx is used to communicate with the
  * repository.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_merge4(const char *source1,
+                  const svn_opt_revision_t *revision1,
+                  const char *source2,
+                  const svn_opt_revision_t *revision2,
+                  const char *target_wcpath,
+                  svn_depth_t depth,
+                  svn_boolean_t ignore_ancestry,
+                  svn_boolean_t force,
+                  svn_boolean_t record_only,
+                  svn_boolean_t dry_run,
+                  svn_boolean_t allow_mixed_rev,
+                  const apr_array_header_t *merge_options,
+                  svn_client_ctx_t *ctx,
+                  apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_merge4(), but with @a allow_mixed_rev set to
+ * @c TRUE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ *
  * @since New in 1.5.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_merge3(const char *source1,
                   const svn_opt_revision_t *revision1,
@@ -2644,8 +3251,8 @@
 /**
  * Similar to svn_client_merge3(), but with @a record_only set to @c
  * FALSE, and @a depth set according to @a recurse: if @a recurse is
- * TRUE, set @a depth to @c svn_depth_infinity, if @a recurse is
- * FALSE, set @a depth to @c svn_depth_files.
+ * TRUE, set @a depth to #svn_depth_infinity, if @a recurse is
+ * FALSE, set @a depth to #svn_depth_files.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  *
@@ -2691,7 +3298,7 @@
 /**
  * Perform a reintegration merge of @a source at @a peg_revision
  * into @a target_wcpath.
- * @a target_wcpath must be a single-revision, @c svn_depth_infinity,
+ * @a target_wcpath must be a single-revision, #svn_depth_infinity,
  * pristine, unswitched working copy -- in other words, it must
  * reflect a single revision tree, the "target".  The mergeinfo on @a
  * source must reflect that all of the target has been merged into it.
@@ -2699,7 +3306,7 @@
  * target's URL to the source.
  *
  * All other options are handled identically to svn_client_merge3().
- * The depth of the merge is always @c svn_depth_infinity.
+ * The depth of the merge is always #svn_depth_infinity.
  *
  * @since New in 1.5.
  */
@@ -2723,12 +3330,36 @@
  * and/or they may partially or fully negate each other.  This
  * rangelist is not required to be sorted.  If any revision in the
  * list of provided ranges has an `unspecified' or unrecognized
- * `kind', return @c SVN_ERR_CLIENT_BAD_REVISION.
+ * `kind', return #SVN_ERR_CLIENT_BAD_REVISION.
  *
- * All other options are handled identically to svn_client_merge3().
+ * All other options are handled identically to svn_client_merge4().
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_merge_peg4(const char *source,
+                      const apr_array_header_t *ranges_to_merge,
+                      const svn_opt_revision_t *peg_revision,
+                      const char *target_wcpath,
+                      svn_depth_t depth,
+                      svn_boolean_t ignore_ancestry,
+                      svn_boolean_t force,
+                      svn_boolean_t record_only,
+                      svn_boolean_t dry_run,
+                      svn_boolean_t allow_mixed_rev,
+                      const apr_array_header_t *merge_options,
+                      svn_client_ctx_t *ctx,
+                      apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_merge_peg4(), but with @a allow_mixed_rev set to
+ * @c TRUE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  *
  * @since New in 1.5.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_merge_peg3(const char *source,
                       const apr_array_header_t *ranges_to_merge,
@@ -2746,10 +3377,10 @@
 /**
  * Similar to svn_client_merge_peg3(), but with @a record_only set to
  * @c FALSE, and @a depth set according to @a recurse: if @a recurse
- * is TRUE, set @a depth to @c svn_depth_infinity, if @a recurse is
- * FALSE, set @a depth to @c svn_depth_files.
+ * is TRUE, set @a depth to #svn_depth_infinity, if @a recurse is
+ * FALSE, set @a depth to #svn_depth_files.
  *
- * @deprecated Provided for backwards compatibility with the 1.3 API.
+ * @deprecated Provided for backwards compatibility with the 1.4 API.
  *
  * @since New in 1.4.
  */
@@ -2812,14 +3443,16 @@
  * Set @a *mergeinfo to a hash mapping <tt>const char *</tt> merge
  * source URLs to <tt>apr_array_header_t *</tt> rangelists (arrays of
  * <tt>svn_merge_range_t *</tt> ranges) describing the ranges which
- * have been merged into @a path_or_url as of @a peg_revision, or @c
- * NULL if there is no mergeinfo.
+ * have been merged into @a path_or_url as of @a peg_revision, per
+ * @a path_or_url's explicit mergeinfo or inherited mergeinfo if no
+ * explicit mergeinfo if found.  If no explicit or inherited mergeinfo
+ * is found, then set @a *mergeinfo to NULL.
  *
  * Use @a pool for all necessary allocations.
  *
  * If the server doesn't support retrieval of mergeinfo (which will
- * never happen for file:// URLs), return an @c
- * SVN_ERR_UNSUPPORTED_FEATURE error.
+ * never happen for file:// URLs), return an
+ * #SVN_ERR_UNSUPPORTED_FEATURE error.
  *
  * @note Unlike most APIs which deal with mergeinfo, this one returns
  * data where the keys of the hash are absolute repository URLs rather
@@ -2836,19 +3469,52 @@
 
 
 /**
- * Drive log entry callbacks @a receiver / @a receiver_baton with the
- * revisions merged from @a merge_source_path_or_url (as of @a
- * src_peg_revision) into @a path_or_url (as of @a peg_revision).  @a
- * ctx is a context used for authentication.
+ * If @a finding_merged is TRUE, then drive log entry callbacks
+ * @a receiver / @a receiver_baton with the revisions merged from
+ * @a merge_source_path_or_url (as of @a src_peg_revision) into
+ * @a path_or_url (as of @a peg_revision).  If @a finding_merged is FALSE
+ * then find the revisions eligible for merging.
+ *
+ * If @a depth is #svn_depth_empty consider only the explicit or
+ * inherited mergeinfo on @a path_or_url when calculating merged revisions
+ * from @a merge_source_path_or_url.  If @a depth is #svn_depth_infinity
+ * then also consider the explicit subtree mergeinfo under @a path_or_url.
+ * If a depth other than #svn_depth_empty or #svn_depth_infinity is
+ * requested then return a #SVN_ERR_UNSUPPORTED_FEATURE error.
  *
  * @a discover_changed_paths and @a revprops are the same as for
- * svn_client_log4().  Use @a pool for all necessary allocations.
+ * svn_client_log5().  Use @a scratch_pool for all temporary allocations.
+ *
+ * @a ctx is a context used for authentication.
+ *
+ * If the server doesn't support retrieval of mergeinfo, return an
+ * #SVN_ERR_UNSUPPORTED_FEATURE error.
  *
- * If the server doesn't support retrieval of mergeinfo, return an @c
- * SVN_ERR_UNSUPPORTED_FEATURE error.
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_mergeinfo_log(svn_boolean_t finding_merged,
+                         const char *path_or_url,
+                         const svn_opt_revision_t *peg_revision,
+                         const char *merge_source_path_or_url,
+                         const svn_opt_revision_t *src_peg_revision,
+                         svn_log_entry_receiver_t receiver,
+                         void *receiver_baton,
+                         svn_boolean_t discover_changed_paths,
+                         svn_depth_t depth,
+                         const apr_array_header_t *revprops,
+                         svn_client_ctx_t *ctx,
+                         apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_client_mergeinfo_log(), but finds only merged revisions
+ * and always operates at @a depth #svn_depth_empty.
  *
+ * @deprecated Provided for backwards compatibility with the 1.6 API. Use
+ * svn_client_mergeinfo_log() instead.
  * @since New in 1.5.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_mergeinfo_log_merged(const char *path_or_url,
                                 const svn_opt_revision_t *peg_revision,
@@ -2862,19 +3528,14 @@
                                 apr_pool_t *pool);
 
 /**
- * Drive log entry callbacks @a receiver / @a receiver_baton with the
- * revisions eligible for merge from @a merge_source_path_or_url (as
- * of @a src_peg_revision) into @a path_or_url (as of @a
- * peg_revision).  @a ctx is a context used for authentication.
- *
- * @a discover_changed_paths and @a revprops are the same as for
- * svn_client_log4().  Use @a pool for all necessary allocations.
- *
- * If the server doesn't support retrieval of mergeinfo, return an @c
- * SVN_ERR_UNSUPPORTED_FEATURE error.
+ * Similar to svn_client_mergeinfo_log(), but finds only eligible revisions
+ * and always operates at @a depth #svn_depth_empty.
  *
+ * @deprecated Provided for backwards compatibility with the 1.6 API. Use
+ * svn_client_mergeinfo_log() instead.
  * @since New in 1.5.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_mergeinfo_log_eligible(const char *path_or_url,
                                   const svn_opt_revision_t *peg_revision,
@@ -2900,13 +3561,36 @@
  *
  * If @a ctx->cancel_func is non-NULL, invoke it with @a
  * ctx->cancel_baton at various points during the operation.  If it
- * returns an error (typically SVN_ERR_CANCELLED), return that error
+ * returns an error (typically #SVN_ERR_CANCELLED), return that error
  * immediately.
+ *
+ * Use @a scratch_pool for any temporary allocations.
  */
 svn_error_t *
 svn_client_cleanup(const char *dir,
                    svn_client_ctx_t *ctx,
-                   apr_pool_t *pool);
+                   apr_pool_t *scratch_pool);
+
+
+/** @} */
+
+/**
+ * @defgroup Upgrade Upgrade a working copy.
+ *
+ * @{
+ */
+
+/** Recursively upgrade a working copy from any older format to the current
+ * WC metadata storage format.  @a wcroot_dir is the path to the WC root.
+ *
+ * Use @a scratch_pool for any temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_upgrade(const char *wcroot_dir,
+                   svn_client_ctx_t *ctx,
+                   apr_pool_t *scratch_pool);
 
 
 /** @} */
@@ -2918,26 +3602,47 @@
  */
 
 /**
- * Modify a working copy directory @a dir, changing any
- * repository URLs that begin with @a from to begin with @a to instead,
- * recursing into subdirectories if @a recurse is TRUE.
- *
- * @param dir Working copy directory
- * @param from Original URL
- * @param to New URL
- * @param recurse Whether to recurse
+ * Recursively modify a working copy rooted at @a wcroot_dir, changing
+ * any repository URLs that begin with @a from_prefix to begin with @a
+ * to_prefix instead.
+ *
+ * @param wcroot_dir Working copy root directory
+ * @param from_prefix Original URL
+ * @param to_prefix New URL
+ * @param ignore_externals If not set, recurse into external working
+ *        copies after relocating the primary working copy
  * @param ctx svn_client_ctx_t
  * @param pool The pool from which to perform memory allocations
+ *
+ * @since New in 1.7
  */
 svn_error_t *
+svn_client_relocate2(const char *wcroot_dir,
+                     const char *from_prefix,
+                     const char *to_prefix,
+                     svn_boolean_t ignore_externals,
+                     svn_client_ctx_t *ctx,
+                     apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_relocate2(), but with @a ignore_externals
+ * always TRUE.
+ *
+ * @note As of the 1.7 API, @a dir is required to be a working copy
+ * root directory, and @a recurse is required to be TRUE.
+ *
+ * @deprecated Provided for limited backwards compatibility with the
+ * 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
 svn_client_relocate(const char *dir,
-                    const char *from,
-                    const char *to,
+                    const char *from_prefix,
+                    const char *to_prefix,
                     svn_boolean_t recurse,
                     svn_client_ctx_t *ctx,
                     apr_pool_t *pool);
 
-
 /** @} */
 
 /**
@@ -2952,11 +3657,11 @@
  * revert it if it is a file.  Else if it is a directory, revert
  * according to @a depth:
  *
- * If @a depth is @c svn_depth_empty, revert just the properties on
- * the directory; else if @c svn_depth_files, revert the properties
+ * If @a depth is #svn_depth_empty, revert just the properties on
+ * the directory; else if #svn_depth_files, revert the properties
  * and any files immediately under the directory; else if
- * @c svn_depth_immediates, revert all of the preceding plus
- * properties on immediate subdirectories; else if @c svn_depth_infinity,
+ * #svn_depth_immediates, revert all of the preceding plus
+ * properties on immediate subdirectories; else if #svn_depth_infinity,
  * revert path and everything under it fully recursively.
  *
  * @a changelists is an array of <tt>const char *</tt> changelist
@@ -2971,7 +3676,7 @@
  *
  * If an item specified for reversion is not under version control,
  * then do not error, just invoke @a ctx->notify_func2 with @a
- * ctx->notify_baton2, using notification code @c svn_wc_notify_skip.
+ * ctx->notify_baton2, using notification code #svn_wc_notify_skip.
  *
  * @since New in 1.5.
  */
@@ -2986,8 +3691,8 @@
 /**
  * Similar to svn_client_revert2(), but with @a changelists passed as
  * @c NULL, and @a depth set according to @a recurse: if @a recurse is
- * TRUE, @a depth is @c svn_depth_infinity, else if @a recurse is
- * FALSE, @a depth is @c svn_depth_empty.
+ * TRUE, @a depth is #svn_depth_infinity, else if @a recurse is
+ * FALSE, @a depth is #svn_depth_empty.
  *
  * @note Most APIs map @a recurse==FALSE to @a depth==svn_depth_files;
  * revert is deliberately different.
@@ -3015,7 +3720,8 @@
  * resolution support.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
- * Use svn_client_resolve() instead.
+ * Use svn_client_resolve() with @a conflict_choice == @c
+ * svn_wc_conflict_choose_merged instead.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -3026,24 +3732,24 @@
 
 /** Perform automatic conflict resolution on a working copy @a path.
  *
- * If @a depth is @c svn_depth_empty, act only on @a path; if
- * @c svn_depth_files, resolve @a path and its conflicted file
- * children (if any); if @c svn_depth_immediates, resolve @a path and
+ * If @a depth is #svn_depth_empty, act only on @a path; if
+ * #svn_depth_files, resolve @a path and its conflicted file
+ * children (if any); if #svn_depth_immediates, resolve @a path and
  * all its immediate conflicted children (both files and directories,
- * if any); if @c svn_depth_infinity, resolve @a path and every
+ * if any); if #svn_depth_infinity, resolve @a path and every
  * conflicted file or directory anywhere beneath it.
  * Note that this operation will try to lock the parent directory of
  * @a path in order to be able to resolve tree-conflicts on @a path.
  *
- * If @a conflict_choice is @c svn_wc_conflict_choose_base, resolve the
+ * If @a conflict_choice is #svn_wc_conflict_choose_base, resolve the
  * conflict with the old file contents; if
- * @c svn_wc_conflict_choose_mine_full, use the original working contents;
- * if @c svn_wc_conflict_choose_theirs_full, the new contents; and if
- * @c svn_wc_conflict_choose_merged, don't change the contents at all,
+ * #svn_wc_conflict_choose_mine_full, use the original working contents;
+ * if #svn_wc_conflict_choose_theirs_full, the new contents; and if
+ * #svn_wc_conflict_choose_merged, don't change the contents at all,
  * just remove the conflict status, which is the pre-1.5 behavior.
  *
- * @c svn_wc_conflict_choose_theirs_conflict and @c
- * svn_wc_conflict_choose_mine_conflict are not legal for binary
+ * #svn_wc_conflict_choose_theirs_conflict and
+ * #svn_wc_conflict_choose_mine_conflict are not legal for binary
  * files or properties.
  *
  * If @a path is not in a state of conflict to begin with, do nothing.
@@ -3104,25 +3810,22 @@
  * If @a sources has only one item, attempt to copy it to @a dst_path.  If
  * @a copy_as_child is TRUE and @a dst_path already exists, attempt to copy the
  * item as a child of @a dst_path.  If @a copy_as_child is FALSE and
- * @a dst_path already exists, fail with @c SVN_ERR_ENTRY_EXISTS if @a dst_path
- * is a working copy path and @c SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a
+ * @a dst_path already exists, fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path
+ * is a working copy path and #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a
  * URL.
  *
  * If @a sources has multiple items, and @a copy_as_child is TRUE, all
  * @a sources are copied as children of @a dst_path.  If any child of
  * @a dst_path already exists with the same name any item in @a sources,
- * fail with @c SVN_ERR_ENTRY_EXISTS if @a dst_path is a working copy path and
- * @c SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a URL.
+ * fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path is a working copy path and
+ * #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a URL.
  *
  * If @a sources has multiple items, and @a copy_as_child is FALSE, fail
- * with @c SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED.
+ * with #SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED.
  *
  * If @a dst_path is a URL, use the authentication baton
  * in @a ctx and @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to immediately
- * attempt to commit the copy action in the repository.  If the commit
- * succeeds, allocate (in @a pool) and populate @a *commit_info_p.  If
- * @a dst_path is not a URL, and the copy succeeds, set @a
- * *commit_info_p to @c NULL.
+ * attempt to commit the copy action in the repository.
  *
  * If @a dst_path is not a URL, then this is just a variant of
  * svn_client_add(), where the @a sources are scheduled for addition
@@ -3149,11 +3852,35 @@
  * for each item added at the new location, passing the new, relative path of
  * the added item.
  *
+ * If @a commit_callback is non-NULL, then for each successful commit, call
+ * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
+ * the commit.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_copy6(const apr_array_header_t *sources,
+                 const char *dst_path,
+                 svn_boolean_t copy_as_child,
+                 svn_boolean_t make_parents,
+                 svn_boolean_t ignore_externals,
+                 const apr_hash_t *revprop_table,
+                 svn_commit_callback2_t commit_callback,
+                 void *commit_baton,
+                 svn_client_ctx_t *ctx,
+                 apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_copy6(), but returns the commit info in
+ * @a *commit_info_p rather than through a callback function.
+ *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_copy5(svn_commit_info_t **commit_info_p,
-                 apr_array_header_t *sources,
+                 const apr_array_header_t *sources,
                  const char *dst_path,
                  svn_boolean_t copy_as_child,
                  svn_boolean_t make_parents,
@@ -3172,7 +3899,7 @@
 SVN_DEPRECATED
 svn_error_t *
 svn_client_copy4(svn_commit_info_t **commit_info_p,
-                 apr_array_header_t *sources,
+                 const apr_array_header_t *sources,
                  const char *dst_path,
                  svn_boolean_t copy_as_child,
                  svn_boolean_t make_parents,
@@ -3220,7 +3947,7 @@
 
 
 /**
- * Similar to svn_client_copy2(), but uses @c svn_client_commit_info_t
+ * Similar to svn_client_copy2(), but uses #svn_client_commit_info_t
  * for @a commit_info_p.
  *
  * @deprecated Provided for backward compatibility with the 1.2 API.
@@ -3258,8 +3985,7 @@
  *   - The authentication baton in @a ctx and @a ctx->log_msg_func/@a
  *     ctx->log_msg_baton are used to commit the move.
  *
- *   - The move operation will be immediately committed.  If the
- *     commit succeeds, allocate (in @a pool) and populate @a *commit_info_p.
+ *   - The move operation will be immediately committed.
  *
  * If @a src_paths are working copy paths:
  *
@@ -3274,29 +4000,23 @@
  *     is a directory it will remain in the working copy but all the files,
  *     and unversioned items, it contains will be removed.
  *
- *   - If one of @a src_paths contains locally modified and/or unversioned
- *     items and @a force is not set, the move will fail. If @a force is set
- *     such items will be removed.
- *
- *   - If the move succeeds, set @a *commit_info_p to @c NULL.
- *
  * The parent of @a dst_path must already exist.
  *
  * If @a src_paths has only one item, attempt to move it to @a dst_path.  If
  * @a move_as_child is TRUE and @a dst_path already exists, attempt to move the
  * item as a child of @a dst_path.  If @a move_as_child is FALSE and
- * @a dst_path already exists, fail with @c SVN_ERR_ENTRY_EXISTS if @a dst_path
- * is a working copy path and @c SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a
+ * @a dst_path already exists, fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path
+ * is a working copy path and #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a
  * URL.
  *
  * If @a src_paths has multiple items, and @a move_as_child is TRUE, all
  * @a src_paths are moved as children of @a dst_path.  If any child of
  * @a dst_path already exists with the same name any item in @a src_paths,
- * fail with @c SVN_ERR_ENTRY_EXISTS if @a dst_path is a working copy path and
- * @c SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a URL.
+ * fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path is a working copy path and
+ * #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a URL.
  *
  * If @a src_paths has multiple items, and @a move_as_child is FALSE, fail
- * with @c SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED.
+ * with #SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED.
  *
  * If @a make_parents is TRUE, create any non-existent parent directories
  * also.
@@ -3317,11 +4037,37 @@
  *
  * ### Is this really true?  What about svn_wc_notify_commit_replaced()? ###
  *
+ * If @a commit_callback is non-NULL, then for each successful commit, call
+ * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
+ * the commit.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_move6(const apr_array_header_t *src_paths,
+                 const char *dst_path,
+                 svn_boolean_t move_as_child,
+                 svn_boolean_t make_parents,
+                 const apr_hash_t *revprop_table,
+                 svn_commit_callback2_t commit_callback,
+                 void *commit_baton,
+                 svn_client_ctx_t *ctx,
+                 apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_move6(), but returns the commit info in
+ * @a *commit_info_p rather than through a callback function.
+ *
+ * A WC-to-WC move will include any modified and/or unversioned children.
+ * @a force is ignored.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_move5(svn_commit_info_t **commit_info_p,
-                 apr_array_header_t *src_paths,
+                 const apr_array_header_t *src_paths,
                  const char *dst_path,
                  svn_boolean_t force,
                  svn_boolean_t move_as_child,
@@ -3335,6 +4081,11 @@
  * move_as_child set to @c FALSE, @a revprop_table passed as NULL, and
  * @a make_parents set to @c FALSE.
  *
+ * Note: The behaviour of @a force changed in 1.5 (r860885 and r861421), when
+ * the 'move' semantics were improved to just move the source including any
+ * modified and/or unversioned items in it.  Before that, @a force
+ * controlled what happened to such items, but now @a force is ignored.
+ *
  * @since New in 1.4.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
@@ -3367,7 +4118,7 @@
                  apr_pool_t *pool);
 
 /**
- * Similar to svn_client_move3(), but uses @c svn_client_commit_info_t
+ * Similar to svn_client_move3(), but uses #svn_client_commit_info_t
  * for @a commit_info_p.
  *
  * @deprecated Provided for backward compatibility with the 1.2 API.
@@ -3386,8 +4137,8 @@
 /**
  * Similar to svn_client_move2(), but an extra argument @a src_revision
  * must be passed.  This has no effect, but must be of kind
- * @c svn_opt_revision_unspecified or @c svn_opt_revision_head,
- * otherwise error @c SVN_ERR_UNSUPPORTED_FEATURE is returned.
+ * #svn_opt_revision_unspecified or #svn_opt_revision_head,
+ * otherwise error #SVN_ERR_UNSUPPORTED_FEATURE is returned.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
@@ -3420,36 +4171,61 @@
 
 
 /**
- * Set @a propname to @a propval on @a target.
- * A @a propval of @c NULL will delete the property.
+ * Set @a propname to @a propval on @a url.  A @a propval of @c NULL will
+ * delete the property.
+ *
+ * Immediately attempt to commit the property change in the repository,
+ * using the authentication baton in @a ctx and @a
+ * ctx->log_msg_func3/@a ctx->log_msg_baton3.
+ *
+ * If the property has changed on @a url since revision
+ * @a base_revision_for_url (which must not be #SVN_INVALID_REVNUM), no
+ * change will be made and an error will be returned.
+ *
+ * If non-NULL, @a revprop_table is a hash table holding additional,
+ * custom revision properties (<tt>const char *</tt> names mapped to
+ * <tt>svn_string_t *</tt> values) to be set on the new revision.  This
+ * table cannot contain any standard Subversion properties.
  *
- * If @a depth is @c svn_depth_empty, set the property on @a target
- * only; if @c svn_depth_files, set it on @a target and its file
- * children (if any); if @c svn_depth_immediates, on @a target and all
- * of its immediate children (both files and directories); if
- * @c svn_depth_infinity, on @a target and everything beneath it.
- *
- * The @a target may only be an URL if @a base_revision_for_url is not
- * @c SVN_INVALID_REVNUM; in this case, the property will only be set
- * if it has not changed since revision @a base_revision_for_url.
- * @a base_revision_for_url must be @c SVN_INVALID_REVNUM if @a target
- * is not an URL.  @a depth deeper than @c svn_depth_empty is not
- * supported on URLs.  The authentication baton in @a ctx and @a
- * ctx->log_msg_func3/@a ctx->log_msg_baton3 will be used to
- * immediately attempt to commit the property change in the
- * repository.  If the commit succeeds, allocate (in @a pool) and
- * populate @a *commit_info_p.
+ * If @a commit_callback is non-NULL, then call @a commit_callback with
+ * @a commit_baton and a #svn_commit_info_t for the commit.
  *
  * If @a propname is an svn-controlled property (i.e. prefixed with
- * @c SVN_PROP_PREFIX), then the caller is responsible for ensuring that
+ * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that
  * the value is UTF8-encoded and uses LF line-endings.
  *
  * If @a skip_checks is TRUE, do no validity checking.  But if @a
  * skip_checks is FALSE, and @a propname is not a valid property for @a
- * target, return an error, either @c SVN_ERR_ILLEGAL_TARGET (if the
- * property is not appropriate for @a target), or @c
- * SVN_ERR_BAD_MIME_TYPE (if @a propname is "svn:mime-type", but @a
- * propval is not a valid mime-type).
+ * url, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the property is
+ * not appropriate for @a url), or * #SVN_ERR_BAD_MIME_TYPE (if @a propname
+ * is "svn:mime-type", but @a propval is not a valid mime-type).
+ *
+ * Use @a scratch_pool for all memory allocation.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_propset_remote(const char *propname,
+                          const svn_string_t *propval,
+                          const char *url,
+                          svn_boolean_t skip_checks,
+                          svn_revnum_t base_revision_for_url,
+                          const apr_hash_t *revprop_table,
+                          svn_commit_callback2_t commit_callback,
+                          void *commit_baton,
+                          svn_client_ctx_t *ctx,
+                          apr_pool_t *scratch_pool);
+
+/**
+ * Set @a propname to @a propval on each (const char *) target in @a
+ * targets.  The targets must be all working copy paths.  A @a propval
+ * of @c NULL will delete the property.
+ *
+ * If @a depth is #svn_depth_empty, set the property on each member of
+ * @a targets only; if #svn_depth_files, set it on @a targets and their
+ * file children (if any); if #svn_depth_immediates, on @a targets and all
+ * of their immediate children (both files and directories); if
+ * #svn_depth_infinity, on @a targets and everything beneath them.
  *
  * @a changelists is an array of <tt>const char *</tt> changelist
  * names, used as a restrictive filter on items whose properties are
@@ -3457,19 +4233,44 @@
  * of one of those changelists.  If @a changelists is empty (or
  * altogether @c NULL), no changelist filtering occurs.
  *
- * If non-NULL, @a revprop_table is a hash table holding additional,
- * custom revision properties (<tt>const char *</tt> names mapped to
- * <tt>svn_string_t *</tt> values) to be set on the new revision in
- * the event that this is a committing operation.  This table cannot
- * contain any standard Subversion properties.
+ * If @a propname is an svn-controlled property (i.e. prefixed with
+ * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that
+ * the value is UTF8-encoded and uses LF line-endings.
+ *
+ * If @a skip_checks is TRUE, do no validity checking.  But if @a
+ * skip_checks is FALSE, and @a propname is not a valid property for @a
+ * targets, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the
+ * property is not appropriate for @a targets), or
+ * #SVN_ERR_BAD_MIME_TYPE (if @a propname is "svn:mime-type", but @a
+ * propval is not a valid mime-type).
  *
  * If @a ctx->cancel_func is non-NULL, invoke it passing @a
  * ctx->cancel_baton at various places during the operation.
  *
- * Use @a pool for all memory allocation.
+ * Use @a scratch_pool for all memory allocation.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_propset_local(const char *propname,
+                         const svn_string_t *propval,
+                         const apr_array_header_t *targets,
+                         svn_depth_t depth,
+                         svn_boolean_t skip_checks,
+                         const apr_array_header_t *changelists,
+                         svn_client_ctx_t *ctx,
+                         apr_pool_t *scratch_pool);
+
+/**
+ * An amalgamation of svn_client_propset_local() and
+ * svn_client_propset_remote() that takes only a single target, and
+ * returns the commit info in @a *commit_info_p rather than through a
+ * callback function.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_propset3(svn_commit_info_t **commit_info_p,
                     const char *propname,
@@ -3485,10 +4286,10 @@
 
 /**
  * Like svn_client_propset3(), but with @a base_revision_for_url
- * always @c SVN_INVALID_REVNUM; @a commit_info_p always @c NULL; @a
+ * always #SVN_INVALID_REVNUM; @a commit_info_p always @c NULL; @a
  * changelists always @c NULL; @a revprop_table always @c NULL; and @a
  * depth set according to @a recurse: if @a recurse is TRUE, @a depth
- * is @c svn_depth_infinity, else @c svn_depth_empty.
+ * is #svn_depth_infinity, else #svn_depth_empty.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
@@ -3524,7 +4325,7 @@
  *
  * If @a original_propval is non-NULL, then just before setting the
  * new value, check that the old value matches @a original_propval;
- * if they do not match, return the error @c SVN_ERR_RA_OUT_OF_DATE.
+ * if they do not match, return the error #SVN_ERR_RA_OUT_OF_DATE.
  * This is to help clients support interactive editing of revprops:
  * without this check, the window during which the property may change
  * underneath the user is as wide as the amount of time the user
@@ -3533,11 +4334,17 @@
  * new value.  (To check that an old value is still non-existent, set
  * @a original_propval->data to NULL, and @a original_propval->len is
  * ignored.)
+ * If the server advertises #SVN_RA_CAPABILITY_ATOMIC_REVPROPS, the
+ * check of @a original_propval is done atomically.
+ *
+ * Note: the representation of "property is not set" in @a
+ * original_propval differs from the representation in other APIs
+ * (such as svn_fs_change_rev_prop2() and svn_ra_change_rev_prop2()).
  *
  * If @a force is TRUE, allow newlines in the author property.
  *
  * If @a propname is an svn-controlled property (i.e. prefixed with
- * @c SVN_PROP_PREFIX), then the caller is responsible for ensuring that
+ * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that
  * the value UTF8-encoded and uses LF line-endings.
  *
  * Note that unlike its cousin svn_client_propset3(), this routine
@@ -3570,7 +4377,7 @@
  * Similar to svn_client_revprop_set2(), but with @a original_propval
  * always @c NULL.
  *
- * @deprecated Provided for backward compatibility with the 1.0 API.
+ * @deprecated Provided for backward compatibility with the 1.5 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -3584,45 +4391,74 @@
                        apr_pool_t *pool);
 
 /**
- * Set @a *props to a hash table whose keys are `<tt>char *</tt>' paths,
- * prefixed by @a target (a working copy path or a URL), of items on
- * which property @a propname is set, and whose values are `@c svn_string_t
- * *' representing the property value for @a propname at that path.
+ * Set @a *props to a hash table whose keys are absolute paths or URLs
+ * of items on which property @a propname is set, and whose values are
+ * `#svn_string_t *' representing the property value for @a propname
+ * at that path.
  *
- * Allocate @a *props, its keys, and its values in @a pool.
+ * Allocate @a *props, its keys, and its values in @a pool, use
+ * @a scratch_pool for temporary allocations.
  *
  * Don't store any path, not even @a target, if it does not have a
  * property named @a propname.
  *
- * If @a revision->kind is @c svn_opt_revision_unspecified, then: get
+ * If @a revision->kind is #svn_opt_revision_unspecified, then: get
  * properties from the working copy if @a target is a working copy
  * path, or from the repository head if @a target is a URL.  Else get
  * the properties as of @a revision.  The actual node revision
  * selected is determined by the path as it exists in @a peg_revision.
- * If @a peg_revision->kind is @c svn_opt_revision_unspecified, then
- * it defaults to @c svn_opt_revision_head for URLs or @c
- * svn_opt_revision_working for WC targets.  Use the authentication
+ * If @a peg_revision->kind is #svn_opt_revision_unspecified, then
+ * it defaults to #svn_opt_revision_head for URLs or
+ * #svn_opt_revision_working for WC targets.  Use the authentication
  * baton in @a ctx for authentication if contacting the repository.
  * If @a actual_revnum is not @c NULL, the actual revision number used
  * for the fetch is stored in @a *actual_revnum.
  *
- * If @a depth is @c svn_depth_empty, fetch the property from
- * @a target only; if @c svn_depth_files, fetch from @a target and its
- * file children (if any); if @c svn_depth_immediates, from @a target
+ * If @a depth is #svn_depth_empty, fetch the property from
+ * @a target only; if #svn_depth_files, fetch from @a target and its
+ * file children (if any); if #svn_depth_immediates, from @a target
  * and all of its immediate children (both files and directories); if
- * @c svn_depth_infinity, from @a target and everything beneath it.
+ * #svn_depth_infinity, from @a target and everything beneath it.
  *
  * @a changelists is an array of <tt>const char *</tt> changelist
  * names, used as a restrictive filter on items whose properties are
- * set; that is, don't set properties on any item unless it's a member
+ * gotten; that is, don't get @a propname on any item unless it's a member
  * of one of those changelists.  If @a changelists is empty (or
  * altogether @c NULL), no changelist filtering occurs.
  *
  * If error, don't touch @a *props, otherwise @a *props is a hash table
  * even if empty.
  *
+ * This function returns SVN_ERR_UNVERSIONED_RESOURCE when it is called on
+ * unversioned nodes.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_propget4(apr_hash_t **props,
+                    const char *propname,
+                    const char *target,
+                    const svn_opt_revision_t *peg_revision,
+                    const svn_opt_revision_t *revision,
+                    svn_revnum_t *actual_revnum,
+                    svn_depth_t depth,
+                    const apr_array_header_t *changelists,
+                    svn_client_ctx_t *ctx,
+                    apr_pool_t *result_pool,
+                    apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_client_propget4(), but with the following change to the
+ * output hash keys:  keys are `<tt>char *</tt>' paths, prefixed by
+ * @a target, which is a working copy path or a URL.
+ *
+ * This function returns SVN_ERR_ENTRY_NOT_FOUND where svn_client_propget4
+ * would return SVN_ERR_UNVERSIONED_RESOURCE.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_propget3(apr_hash_t **props,
                     const char *propname,
@@ -3638,10 +4474,10 @@
 /**
  * Similar to svn_client_propget3(), except that @a actual_revnum and
  * @a changelists are always @c NULL, and @a depth is set according to
- * @a recurse: if @a recurse is TRUE, then @a depth is @c
- * svn_depth_infinity, else @c svn_depth_empty.
+ * @a recurse: if @a recurse is TRUE, then @a depth is
+ * #svn_depth_infinity, else #svn_depth_empty.
  *
- * @deprecated Provided for backward compatibility with the 1.2 API.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -3691,38 +4527,38 @@
                        apr_pool_t *pool);
 
 /**
- * Invoke @a receiver with @a receiver_baton to return the regular properies
+ * Invoke @a receiver with @a receiver_baton to return the regular properties
  * of @a target, a URL or working copy path.  @a receiver will be called
  * for each path encountered.
  *
- * If @a revision->kind is @c svn_opt_revision_unspecified, then get
+ * If @a revision->kind is #svn_opt_revision_unspecified, then get
  * properties from the working copy, if @a target is a working copy
  * path, or from the repository head if @a target is a URL.  Else get
  * the properties as of @a revision.  The actual node revision
  * selected is determined by the path as it exists in @a peg_revision.
- * If @a peg_revision->kind is @c svn_opt_revision_unspecified, then it
- * defaults to @c svn_opt_revision_head for URLs or @c
- * svn_opt_revision_working for WC targets.  Use the authentication
+ * If @a peg_revision->kind is #svn_opt_revision_unspecified, then it
+ * defaults to #svn_opt_revision_head for URLs or
+ * #svn_opt_revision_working for WC targets.  Use the authentication
  * baton cached in @a ctx for authentication if contacting the
  * repository.
  *
- * If @a depth is @c svn_depth_empty, list only the properties of
- * @a target itself.  If @a depth is @c svn_depth_files, and
+ * If @a depth is #svn_depth_empty, list only the properties of
+ * @a target itself.  If @a depth is #svn_depth_files, and
  * @a target is a directory, list the properties of @a target
- * and its file entries.  If @c svn_depth_immediates, list the properties
- * of its immediate file and directory entries.  If @c svn_depth_infinity,
+ * and its file entries.  If #svn_depth_immediates, list the properties
+ * of its immediate file and directory entries.  If #svn_depth_infinity,
  * list the properties of its file entries and recurse (with
- * @c svn_depth_infinity) on directory entries.  @c svn_depth_unknown is
- * equivalent to @c svn_depth_empty.  All other values produce undefined
+ * #svn_depth_infinity) on directory entries.  #svn_depth_unknown is
+ * equivalent to #svn_depth_empty.  All other values produce undefined
  * results.
  *
  * @a changelists is an array of <tt>const char *</tt> changelist
  * names, used as a restrictive filter on items whose properties are
- * set; that is, don't set properties on any item unless it's a member
+ * listed; that is, don't list properties on any item unless it's a member
  * of one of those changelists.  If @a changelists is empty (or
  * altogether @c NULL), no changelist filtering occurs.
  *
- * If @a target is not found, return the error @c SVN_ERR_ENTRY_NOT_FOUND.
+ * If @a target is not found, return the error #SVN_ERR_ENTRY_NOT_FOUND.
  *
  * @since New in 1.5.
  */
@@ -3739,15 +4575,15 @@
 
 /**
  * Similar to svn_client_proplist3(), except the properties are
- * returned as an array of @c svn_client_proplist_item_t * structures
+ * returned as an array of #svn_client_proplist_item_t * structures
  * instead of by invoking the receiver function, there's no support
  * for @a changelists filtering, and @a recurse is used instead of a
- * @c svn_depth_t parameter (FALSE corresponds to @c svn_depth_empty,
- * and TRUE to @c svn_depth_infinity).
+ * #svn_depth_t parameter (FALSE corresponds to #svn_depth_empty,
+ * and TRUE to #svn_depth_infinity).
  *
  * @since New in 1.2.
  *
- * @deprecated Provided for backward compatiblility with the 1.2 API.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -3780,7 +4616,7 @@
  * Return the actual rev queried in @a *set_rev.
  *
  * The allocated hash maps (<tt>const char *</tt>) property names to
- * (@c svn_string_t *) property values.
+ * (#svn_string_t *) property values.
  *
  * Note that unlike its cousin svn_client_proplist(), this routine
  * doesn't read a working copy at all; it's a pure network operation
@@ -3808,18 +4644,23 @@
  * directory with no administrative directories).  If @a result_rev
  * is not @c NULL and the path being exported is a repository URL, set
  * @a *result_rev to the value of the revision actually exported (set
- * it to @c SVN_INVALID_REVNUM for local exports).
+ * it to #SVN_INVALID_REVNUM for local exports).
  *
- * @a from is either the path the working copy on disk, or a URL to the
- * repository you wish to export.
+ * @a from_path_or_url is either the path the working copy on disk, or
+ * a URL to the repository you wish to export.
  *
- * @a to is the path to the directory where you wish to create the exported
- * tree.
+ * When exporting a directory, @a to_path is the path to the directory
+ * where you wish to create the exported tree; when exporting a file, it
+ * is the path of the file that will be created.  If @a to_path is the
+ * empty path, then the basename of the export file/directory in the repository
+ * will be used.  If @a to_path represents an existing directory, and a
+ * file is being exported, then a file with the that basename will be
+ * created under that directory (as with 'copy' operations).
  *
  * @a peg_revision is the revision where the path is first looked up
- * when exporting from a repository.  If @a peg_revision->kind is @c
- * svn_opt_revision_unspecified, then it defaults to @c svn_opt_revision_head
- * for URLs or @c svn_opt_revision_working for WC targets.
+ * when exporting from a repository.  If @a peg_revision->kind is
+ * #svn_opt_revision_unspecified, then it defaults to #svn_opt_revision_head
+ * for URLs or #svn_opt_revision_working for WC targets.
  *
  * @a revision is the revision that should be exported, which is only used
  * when exporting from a repository.
@@ -3832,31 +4673,58 @@
  *
  * @a ctx is a context used for authentication in the repository case.
  *
- * @a overwrite if TRUE will cause the export to overwrite files or directories.
+ * @a overwrite if TRUE will cause the export to overwrite files or
+ * directories.
  *
  * If @a ignore_externals is set, don't process externals definitions
  * as part of this operation.
  *
- * @a native_eol allows you to override the standard eol marker on the platform
- * you are running on.  Can be either "LF", "CR" or "CRLF" or NULL.  If NULL
- * will use the standard eol marker.  Any other value will cause the
- * SVN_ERR_IO_UNKNOWN_EOL error to be returned.
- *
- * If @a depth is @c svn_depth_infinity, export fully recursively.
- * Else if it is @c svn_depth_immediates, export @a from and its immediate
- * children (if any), but with subdirectories empty and at
- * @c svn_depth_empty.  Else if @c svn_depth_files, export @a from and
- * its immediate file children (if any) only.  If @a depth is @c
- * svn_depth_empty, then export exactly @a from and none of its children.
+ * If @a ignore_keywords is set, don't expand keywords as part of this
+ * operation.
+ *
+ * @a native_eol allows you to override the standard eol marker on the
+ * platform you are running on.  Can be either "LF", "CR" or "CRLF" or
+ * NULL.  If NULL will use the standard eol marker.  Any other value
+ * will cause the #SVN_ERR_IO_UNKNOWN_EOL error to be returned.
+ *
+ * If @a depth is #svn_depth_infinity, export fully recursively.  Else
+ * if it is #svn_depth_immediates, export @a from_path_or_url and its
+ * immediate children (if any), but with subdirectories empty and at
+ * #svn_depth_empty.  Else if #svn_depth_files, export @a
+ * from_path_or_url and its immediate file children (if any) only.  If
+ * @a depth is #svn_depth_empty, then export exactly @a
+ * from_path_or_url and none of its children.
  *
  * All allocations are done in @a pool.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_export5(svn_revnum_t *result_rev,
+                   const char *from_path_or_url,
+                   const char *to_path,
+                   const svn_opt_revision_t *peg_revision,
+                   const svn_opt_revision_t *revision,
+                   svn_boolean_t overwrite,
+                   svn_boolean_t ignore_externals,
+                   svn_boolean_t ignore_keywords,
+                   svn_depth_t depth,
+                   const char *native_eol,
+                   svn_client_ctx_t *ctx,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_export5(), but with @a ignore_keywords set
+ * to FALSE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  * @since New in 1.5.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_export4(svn_revnum_t *result_rev,
-                   const char *from,
-                   const char *to,
+                   const char *from_path_or_url,
+                   const char *to_path,
                    const svn_opt_revision_t *peg_revision,
                    const svn_opt_revision_t *revision,
                    svn_boolean_t overwrite,
@@ -3870,8 +4738,8 @@
 /**
  * Similar to svn_client_export4(), but with @a depth set according to
  * @a recurse: if @a recurse is TRUE, set @a depth to
- * @c svn_depth_infinity, if @a recurse is FALSE, set @a depth to
- * @c svn_depth_files.
+ * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to
+ * #svn_depth_files.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  *
@@ -3880,8 +4748,8 @@
 SVN_DEPRECATED
 svn_error_t *
 svn_client_export3(svn_revnum_t *result_rev,
-                   const char *from,
-                   const char *to,
+                   const char *from_path_or_url,
+                   const char *to_path,
                    const svn_opt_revision_t *peg_revision,
                    const svn_opt_revision_t *revision,
                    svn_boolean_t overwrite,
@@ -3894,7 +4762,7 @@
 
 /**
  * Similar to svn_client_export3(), but with @a peg_revision
- * always set to @c svn_opt_revision_unspecified, @a overwrite set to
+ * always set to #svn_opt_revision_unspecified, @a overwrite set to
  * the value of @a force, @a ignore_externals always FALSE, and
  * @a recurse always TRUE.
  *
@@ -3904,8 +4772,8 @@
 SVN_DEPRECATED
 svn_error_t *
 svn_client_export2(svn_revnum_t *result_rev,
-                   const char *from,
-                   const char *to,
+                   const char *from_path_or_url,
+                   const char *to_path,
                    svn_opt_revision_t *revision,
                    svn_boolean_t force,
                    const char *native_eol,
@@ -3922,8 +4790,8 @@
 SVN_DEPRECATED
 svn_error_t *
 svn_client_export(svn_revnum_t *result_rev,
-                  const char *from,
-                  const char *to,
+                  const char *from_path_or_url,
+                  const char *to_path,
                   svn_opt_revision_t *revision,
                   svn_boolean_t force,
                   svn_client_ctx_t *ctx,
@@ -3937,10 +4805,18 @@
  * @{
  */
 
-/** Invoked by svn_client_list2() for each @a path with its @a dirent and,
- * if @a path is locked, its @a lock.  @a abs_path is the filesystem path
- * to which @a path is relative.  @a baton is the baton passed to the
- * caller.  @a pool may be used for temporary allocations.
+/** The type of function invoked by svn_client_list2() to report the details
+ * of each directory entry being listed.
+ *
+ * @a baton is the baton that was passed to the caller.  @a path is the
+ * entry's path relative to @a abs_path; it is the empty path when reporting
+ * the top node of the list operation.  @a dirent contains some or all of
+ * the directory entry's details, as determined by the caller.  @a lock is
+ * the entry's lock, if it is locked and if lock information is being
+ * reported by the caller; otherwise @a lock is NULL.  @a abs_path is the
+ * repository path of the top node of the list operation; it is relative to
+ * the repository root and begins with "/".  @a pool may be used for
+ * temporary allocations.
  *
  * @since New in 1.4.
  */
@@ -3955,15 +4831,15 @@
  * Report the directory entry, and possibly children, for @a
  * path_or_url at @a revision.  The actual node revision selected is
  * determined by the path as it exists in @a peg_revision.  If @a
- * peg_revision->kind is @c svn_opt_revision_unspecified, then it defaults
- * to @c svn_opt_revision_head for URLs or @c svn_opt_revision_working
+ * peg_revision->kind is #svn_opt_revision_unspecified, then it defaults
+ * to #svn_opt_revision_head for URLs or #svn_opt_revision_working
  * for WC targets.
  *
  * Report directory entries by invoking @a list_func/@a baton with @a path
  * relative to @a path_or_url.  The dirent for @a path_or_url is reported
  * using an empty @a path.  If @a path_or_url is a directory, also report
  * its children.  If @a path_or_url is non-existent, return
- * @c SVN_ERR_FS_NOT_FOUND.
+ * #SVN_ERR_FS_NOT_FOUND.
  *
  * If @a fetch_locks is TRUE, include locks when reporting directory entries.
  *
@@ -3972,14 +4848,14 @@
  * Use authentication baton cached in @a ctx to authenticate against the
  * repository.
  *
- * If @a depth is @c svn_depth_empty, list just @a path_or_url itself.
- * If @a depth is @c svn_depth_files, list @a path_or_url and its file
- * entries.  If @c svn_depth_immediates, list its immediate file and
- * directory entries.  If @c svn_depth_infinity, list file entries and
- * recurse (with @c svn_depth_infinity) on directory entries.
+ * If @a depth is #svn_depth_empty, list just @a path_or_url itself.
+ * If @a depth is #svn_depth_files, list @a path_or_url and its file
+ * entries.  If #svn_depth_immediates, list its immediate file and
+ * directory entries.  If #svn_depth_infinity, list file entries and
+ * recurse (with #svn_depth_infinity) on directory entries.
  *
- * @a dirent_fields controls which fields in the @c svn_dirent_t's are
- * filled in.  To have them totally filled in use @c SVN_DIRENT_ALL,
+ * @a dirent_fields controls which fields in the #svn_dirent_t's are
+ * filled in.  To have them totally filled in use #SVN_DIRENT_ALL,
  * otherwise simply bitwise OR together the combination of @c SVN_DIRENT_
  * fields you care about.
  *
@@ -3999,8 +4875,8 @@
 
 /**
  * Similar to svn_client_list2(), but with @a recurse instead of @a depth.
- * If @a recurse is TRUE, pass @c svn_depth_files for @a depth; else
- * pass @c svn_depth_infinity.
+ * If @a recurse is TRUE, pass #svn_depth_files for @a depth; else
+ * pass #svn_depth_infinity.
  *
  * @since New in 1.4.
  *
@@ -4020,16 +4896,16 @@
                 apr_pool_t *pool);
 
 /**
- * Same as svn_client_list(), but always passes @c SVN_DIRENT_ALL for
+ * Same as svn_client_list(), but always passes #SVN_DIRENT_ALL for
  * the @a dirent_fields argument and returns all information in two
  * hash tables instead of invoking a callback.
  *
  * Set @a *dirents to a newly allocated hash of directory entries.
  * The @a dirents hash maps entry names (<tt>const char *</tt>) to
- * @c svn_dirent_t *'s.
+ * #svn_dirent_t *'s.
  *
  * If @a locks is not @c NULL, set @a *locks to a hash table mapping
- * entry names (<tt>const char *</tt>) to @c svn_lock_t *'s.
+ * entry names (<tt>const char *</tt>) to #svn_lock_t *'s.
  *
  * @since New in 1.3.
  *
@@ -4091,26 +4967,30 @@
  */
 
 /**
- * Output the content of file identified by @a path_or_url and @a
- * revision to the stream @a out.  The actual node revision selected
- * is determined by the path as it exists in @a peg_revision.  If @a
- * peg_revision->kind is @c svn_opt_revision_unspecified, then it defaults
- * to @c svn_opt_revision_head for URLs or @c svn_opt_revision_working
- * for WC targets.
- *
- * If @a path_or_url is not a local path, then if @a revision is of
- * kind @c svn_opt_revision_previous (or some other kind that requires
- * a local path), an error will be returned, because the desired
- * revision cannot be determined.
+ * Output the content of a file.
  *
- * Use the authentication baton cached in @a ctx to authenticate against the
- * repository.
- *
- * Perform all allocations from @a pool.
- *
- * ### @todo Add an expansion/translation flag?
+ * @param[in] out           The stream to which the content will be written.
+ * @param[in] path_or_url   The path or URL of the file.
+ * @param[in] peg_revision  The peg revision.
+ * @param[in] revision  The operative revision.
+ * @param[in] ctx   The standard client context, used for possible
+ *                  authentication.
+ * @param[in] pool  Used for any temporary allocation.
+ *
+ * @todo Add an expansion/translation flag?
+ *
+ * @return A pointer to an #svn_error_t of the type (this list is not
+ *         exhaustive): <br>
+ *         An unspecified error if @a revision is of kind
+ *         #svn_opt_revision_previous (or some other kind that requires
+ *         a local path), because the desired revision cannot be
+ *         determined. <br>
+ *         If no error occurred, return #SVN_NO_ERROR.
  *
  * @since New in 1.2.
+ *
+ * @see #svn_client_ctx_t <br> @ref clnt_revisions for
+ *      a discussion of operative and peg revisions.
  */
 svn_error_t *
 svn_client_cat2(svn_stream_t *out,
@@ -4205,28 +5085,16 @@
                                    svn_client_ctx_t *ctx,
                                    apr_pool_t *pool);
 
-/**
- * The callback type used by svn_client_get_changelists().
- *
- * On each invocation, @a path is a newly discovered member of the
- * changelist, and @a baton is a private function closure.
- *
- * @since New in 1.5.
- */
-typedef svn_error_t *(*svn_changelist_receiver_t) (void *baton,
-                                                   const char *path,
-                                                   const char *changelist,
-                                                   apr_pool_t *pool);
 
 /**
  * Beginning at @a path, crawl to @a depth to discover every path in
  * or under @a path which belongs to one of the changelists in @a
  * changelists (an array of <tt>const char *</tt> changelist names).
- * If @a changelists is @c null, discover paths with any changelist.
+ * If @a changelists is @c NULL, discover paths with any changelist.
  * Call @a callback_func (with @a callback_baton) each time a
  * changelist-having path is discovered.
  *
- * If @a ctx->cancel_func is not @c null, invoke it passing @a
+ * If @a ctx->cancel_func is not @c NULL, invoke it passing @a
  * ctx->cancel_baton during the recursive walk.
  *
  * @since New in 1.5.
@@ -4262,11 +5130,11 @@
  * be stored in the working copy if the targets are WC paths.
  *
  * For each target @a ctx->notify_func2/notify_baton2 will be used to indicate
- * whether it was locked.  An action of @c svn_wc_notify_state_locked
+ * whether it was locked.  An action of #svn_wc_notify_locked
  * means that the path was locked.  If the path was not locked because
  * it was out of date or there was already a lock in the repository,
- * the notification function will be called with @c
- * svn_wc_notify_failed_lock, and the error passed in the notification
+ * the notification function will be called with
+ * #svn_wc_notify_failed_lock, and the error passed in the notification
  * structure.
  *
  * Use @a pool for temporary allocations.
@@ -4299,10 +5167,10 @@
  * the working copy if the targets are WC paths.
  *
  * The notification functions in @a ctx will be called for each
- * target.  If the target was successfully unlocked, @c
- * svn_wc_notify_unlocked will be used.  Else, if the error is
- * directly related to unlocking the path (see @c
- * SVN_ERR_IS_UNLOCK_ERROR), @c svn_wc_notify_failed_unlock will be
+ * target.  If the target was successfully unlocked,
+ * #svn_wc_notify_unlocked will be used.  Else, if the error is
+ * directly related to unlocking the path (see
+ * #SVN_ERR_IS_UNLOCK_ERROR), #svn_wc_notify_failed_unlock will be
  * used and the error will be passed in the notification structure.
 
  * Use @a pool for temporary allocations.
@@ -4324,9 +5192,10 @@
  */
 
 /** The size of the file is unknown.
- * Used as value in fields of type @c apr_size_t.
+ * Used as value in fields of type @c apr_size_t in #svn_info_t.
  *
  * @since New in 1.5
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 #define SVN_INFO_SIZE_UNKNOWN ((apr_size_t) -1)
 
@@ -4339,6 +5208,8 @@
  * type, to preserve binary compatibility.
  *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.  The new
+ * API is #svn_client_info2_t.
  */
 typedef struct svn_info_t
 {
@@ -4396,7 +5267,7 @@
   svn_depth_t depth;
 
   /**
-   * Similar to working_size64, but will be @c SVN_INFO_SIZE_UNKNOWN when
+   * Similar to working_size64, but will be #SVN_INFO_SIZE_UNKNOWN when
    * its value would overflow apr_size_t (so when size >= 4 GB - 1 byte).
    *
    * @deprecated Provided for backward compatibility with the 1.5 API.
@@ -4406,7 +5277,7 @@
   /** @} */
 
   /**
-   * Similar to size64, but size will be @c SVN_INFO_SIZE_UNKNOWN when
+   * Similar to size64, but size will be #SVN_INFO_SIZE_UNKNOWN when
    * its value would overflow apr_size_t (so when size >= 4 GB - 1 byte).
    *
    * @deprecated Provided for backward compatibility with the 1.5 API.
@@ -4417,14 +5288,14 @@
    * The size of the file in the repository (untranslated,
    * e.g. without adjustment of line endings and keyword
    * expansion). Only applicable for file -- not directory -- URLs.
-   * For working copy paths, size64 will be @c SVN_INVALID_FILESIZE.
+   * For working copy paths, size64 will be #SVN_INVALID_FILESIZE.
    * @since New in 1.6.
    */
   svn_filesize_t size64;
 
   /**
    * The size of the file after being translated into its local
-   * representation, or @c SVN_INVALID_FILESIZE if unknown.
+   * representation, or #SVN_INVALID_FILESIZE if unknown.
    * Not applicable for directories.
    * @since New in 1.6.
    * @name Working-copy path fields
@@ -4450,66 +5321,170 @@
  * unavailable.  Use @a pool for all temporary allocation.
  *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.  The new
+ * API is #svn_client_info_receiver2_t.
  */
-typedef svn_error_t *(*svn_info_receiver_t)
-  (void *baton,
-   const char *path,
-   const svn_info_t *info,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_info_receiver_t)(
+  void *baton,
+  const char *path,
+  const svn_info_t *info,
+  apr_pool_t *pool);
 
 /**
  * Return a duplicate of @a info, allocated in @a pool. No part of the new
  * structure will be shared with @a info.
  *
  * @since New in 1.3.
+ * @deprecated Provided for backward compatibility with the 1.6 API.  The new
+ * API is #svn_client_info2_dup().
  */
+SVN_DEPRECATED
 svn_info_t *
 svn_info_dup(const svn_info_t *info,
              apr_pool_t *pool);
 
 /**
+ * A structure which describes various system-generated metadata about
+ * a working-copy path or URL.
+ *
+ * @note Fields may be added to the end of this structure in future
+ * versions.  Therefore, users shouldn't allocate structures of this
+ * type, to preserve binary compatibility.
+ *
+ * @since New in 1.7.
+ */
+typedef struct svn_client_info2_t
+{
+  /** Where the item lives in the repository. */
+  const char *URL;
+
+  /** The revision of the object.  If the target is a working-copy
+   * path, then this is its current working revnum.  If the target
+   * is a URL, then this is the repos revision that it lives in. */
+  svn_revnum_t rev;
+
+  /** The root URL of the repository. */
+  const char *repos_root_URL;
+
+  /** The repository's UUID. */
+  const char *repos_UUID;
+
+  /** The node's kind. */
+  svn_node_kind_t kind;
+
+  /** The size of the file in the repository (untranslated,
+   * e.g. without adjustment of line endings and keyword
+   * expansion). Only applicable for file -- not directory -- URLs.
+   * For working copy paths, @a size will be #SVN_INVALID_FILESIZE. */
+  svn_filesize_t size;
+
+  /** The last revision in which this object changed. */
+  svn_revnum_t last_changed_rev;
+
+  /** The date of the last_changed_rev. */
+  apr_time_t last_changed_date;
+
+  /** The author of the last_changed_rev. */
+  const char *last_changed_author;
+
+  /** An exclusive lock, if present.  Could be either local or remote. */
+  const svn_lock_t *lock;
+
+  /** Possible information about the working copy, NULL if not valid. */
+  const svn_wc_info_t *wc_info;
+
+} svn_client_info2_t;
+
+/**
+ * Return a duplicate of @a info, allocated in @a pool. No part of the new
+ * structure will be shared with @a info.
+ *
+ * @since New in 1.7.
+ */
+svn_client_info2_t *
+svn_client_info2_dup(const svn_client_info2_t *info,
+                     apr_pool_t *pool);
+
+/**
+ * The callback invoked by info retrievers.  Each invocation
+ * describes @a abspath_or_url with the information present in @a info.
+ * Use @a scratch_pool for all temporary allocation.
+ *
+ * @since New in 1.7.
+ */
+typedef svn_error_t *(*svn_client_info_receiver2_t)(
+                         void *baton,
+                         const char *abspath_or_url,
+                         const svn_client_info2_t *info,
+                         apr_pool_t *scratch_pool);
+
+/**
  * Invoke @a receiver with @a receiver_baton to return information
- * about @a path_or_url in @a revision.  The information returned is
+ * about @a abspath_or_url in @a revision.  The information returned is
  * system-generated metadata, not the sort of "property" metadata
- * created by users.  See @c svn_info_t.
+ * created by users.  See #svn_client_info2_t.
  *
- * If both revision arguments are either @c
- * svn_opt_revision_unspecified or NULL, then information will be
- * pulled solely from the working copy; no network connections will be
- * made.
+ * If both revision arguments are either #svn_opt_revision_unspecified
+ * or @c NULL, then information will be pulled solely from the working copy;
+ * no network connections will be made.
  *
  * Otherwise, information will be pulled from a repository.  The
- * actual node revision selected is determined by the @a path_or_url
- * as it exists in @a peg_revision.  If @a peg_revision->kind is @c
- * svn_opt_revision_unspecified, then it defaults to @c
- * svn_opt_revision_head for URLs or @c svn_opt_revision_working for
+ * actual node revision selected is determined by the @a abspath_or_url
+ * as it exists in @a peg_revision.  If @a peg_revision->kind is
+ * #svn_opt_revision_unspecified, then it defaults to
+ * #svn_opt_revision_head for URLs or #svn_opt_revision_working for
  * WC targets.
  *
- * If @a path_or_url is not a local path, then if @a revision is of
- * kind @c svn_opt_revision_previous (or some other kind that requires
+ * If @a abspath_or_url is not a local path, then if @a revision is of
+ * kind #svn_opt_revision_previous (or some other kind that requires
  * a local path), an error will be returned, because the desired
  * revision cannot be determined.
  *
  * Use the authentication baton cached in @a ctx to authenticate
  * against the repository.
  *
- * If @a path_or_url is a file, just invoke @a receiver on it.  If it
+ * If @a abspath_or_url is a file, just invoke @a receiver on it.  If it
  * is a directory, then descend according to @a depth.  If @a depth is
- * @c svn_depth_empty, invoke @a receiver on @a path_or_url and
- * nothing else; if @c svn_depth_files, on @a path_or_url and its
- * immediate file children; if @c svn_depth_immediates, the preceding
- * plus on each immediate subdirectory; if @c svn_depth_infinity, then
- * recurse fully, invoking @a receiver on @a path_or_url and
+ * #svn_depth_empty, invoke @a receiver on @a abspath_or_url and
+ * nothing else; if #svn_depth_files, on @a abspath_or_url and its
+ * immediate file children; if #svn_depth_immediates, the preceding
+ * plus on each immediate subdirectory; if #svn_depth_infinity, then
+ * recurse fully, invoking @a receiver on @a abspath_or_url and
  * everything beneath it.
  *
+ * If @a fetch_excluded is TRUE, also also send excluded nodes in the working
+ * copy to @a receiver, otherwise these are skipped. If @a fetch_actual_only
+ * is TRUE also send nodes that don't exist as versioned but are still
+ * tree conflicted.
+ *
  * @a changelists is an array of <tt>const char *</tt> changelist
  * names, used as a restrictive filter on items whose info is
  * reported; that is, don't report info about any item unless
  * it's a member of one of those changelists.  If @a changelists is
  * empty (or altogether @c NULL), no changelist filtering occurs.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_info3(const char *abspath_or_url,
+                 const svn_opt_revision_t *peg_revision,
+                 const svn_opt_revision_t *revision,
+                 svn_depth_t depth,
+                 svn_boolean_t fetch_excluded,
+                 svn_boolean_t fetch_actual_only,
+                 const apr_array_header_t *changelists,
+                 svn_client_info_receiver2_t receiver,
+                 void *receiver_baton,
+                 svn_client_ctx_t *ctx,
+                 apr_pool_t *scratch_pool);
+
+/** Similar to svn_client_info3, but uses an svn_info_receiver_t instead of
+ * a #svn_client_info_receiver2_t, and @a path_or_url may be a relative path.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_info2(const char *path_or_url,
                  const svn_opt_revision_t *peg_revision,
@@ -4524,9 +5499,9 @@
 /**
  * Similar to svn_client_info2() but with @a changelists passed as @c
  * NULL, and @a depth set according to @a recurse: if @a recurse is
- * TRUE, @a depth is @c svn_depth_infinity, else @c svn_depth_empty.
+ * TRUE, @a depth is #svn_depth_infinity, else #svn_depth_empty.
  *
- * @deprecated Provided for backward compatibility with the 1.2 API.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -4539,6 +5514,136 @@
                 svn_client_ctx_t *ctx,
                 apr_pool_t *pool);
 
+/**
+ * Set @a *wcroot_abspath to the local abspath of the root of the
+ * working copy in which @a local_abspath resides.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_get_wc_root(const char **wcroot_abspath,
+                       const char *local_abspath,
+                       svn_client_ctx_t *ctx,
+                       apr_pool_t *result_pool,
+                       apr_pool_t *scratch_pool);
+
+/**
+ * Set @a *min_revision and @a *max_revision to the lowest and highest
+ * revision numbers found within @a local_abspath.  If @a committed is
+ * TRUE, set @a *min_revision and @a *max_revision to the lowest and
+ * highest comitted (i.e. "last changed") revision numbers,
+ * respectively.  NULL may be passed for either of @a min_revision and
+ * @a max_revision to indicate the caller's lack of interest in the
+ * value.  Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_min_max_revisions(svn_revnum_t *min_revision,
+                             svn_revnum_t *max_revision,
+                             const char *local_abspath,
+                             svn_boolean_t committed,
+                             svn_client_ctx_t *ctx,
+                             apr_pool_t *scratch_pool);
+
+/** @} */
+
+
+/**
+ * @defgroup Patch Apply a patch to the working copy
+ *
+ * @{
+ */
+
+/**
+ * The callback invoked by svn_client_patch() before attempting to patch
+ * the target file at @a canon_path_from_patchfile (the path as parsed from
+ * the patch file, but in canonicalized form). The callback can set
+ * @a *filtered to @c TRUE to prevent the file from being patched, or else
+ * must set it to @c FALSE.
+ *
+ * The callback is also provided with @a patch_abspath, the path of a
+ * temporary file containing the patched result, and with @a reject_abspath,
+ * the path to a temporary file containing the diff text of any hunks
+ * which were rejected during patching.
+ *
+ * Because the callback is invoked before the patching attempt is made,
+ * there is no guarantee that the target file will actually be patched
+ * successfully. Client implementations must pay attention to notification
+ * feedback provided by svn_client_patch() to find out which paths were
+ * patched successfully.
+ *
+ * Note also that the files at @a patch_abspath and @a reject_abspath are
+ * guaranteed to remain on disk after patching only if the
+ * @a remove_tempfiles parameter for svn_client_patch() is @c FALSE.
+ *
+ * The const char * parameters may be allocated in @a scratch_pool which
+ * will be cleared after each invocation.
+ *
+ * @since New in 1.7.
+ */
+typedef svn_error_t *(*svn_client_patch_func_t)(
+  void *baton,
+  svn_boolean_t *filtered,
+  const char *canon_path_from_patchfile,
+  const char *patch_abspath,
+  const char *reject_abspath,
+  apr_pool_t *scratch_pool);
+
+/**
+ * Apply a unidiff patch that's located at absolute path
+ * @a patch_abspath to the working copy directory at @a wc_dir_abspath.
+ *
+ * This function makes a best-effort attempt at applying the patch.
+ * It might skip patch targets which cannot be patched (e.g. targets
+ * that are outside of the working copy). It will also reject hunks
+ * which cannot be applied to a target in case the hunk's context
+ * does not match anywhere in the patch target.
+ *
+ * If @a dry_run is TRUE, the patching process is carried out, and full
+ * notification feedback is provided, but the working copy is not modified.
+ *
+ * @a strip_count specifies how many leading path components should be
+ * stripped from paths obtained from the patch. It is an error if a
+ * negative strip count is passed.
+ *
+ * If @a reverse is @c TRUE, apply patches in reverse, deleting lines
+ * the patch would add and adding lines the patch would delete.
+ *
+ * If @a ignore_whitespace is TRUE, allow patches to be applied if they
+ * only differ from the target by whitespace.
+ *
+ * If @a remove_tempfiles is TRUE, lifetimes of temporary files created
+ * during patching will be managed internally. Otherwise, the caller should
+ * take ownership of these files, the names of which can be obtained by
+ * passing a @a patch_func callback.
+ *
+ * If @a patch_func is non-NULL, invoke @a patch_func with @a patch_baton
+ * for each patch target processed.
+ *
+ * If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with
+ * @a ctx->notify_baton2 as patching progresses.
+ *
+ * If @a ctx->cancel_func is non-NULL, invoke it passing @a
+ * ctx->cancel_baton at various places during the operation.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_patch(const char *patch_abspath,
+                 const char *wc_dir_abspath,
+                 svn_boolean_t dry_run,
+                 int strip_count,
+                 svn_boolean_t reverse,
+                 svn_boolean_t ignore_whitespace,
+                 svn_boolean_t remove_tempfiles,
+                 svn_client_patch_func_t patch_func,
+                 void *patch_baton,
+                 svn_client_ctx_t *ctx,
+                 apr_pool_t *scratch_pool);
+
 /** @} */
 
 /** @} end group: Client working copy management */
@@ -4554,14 +5659,32 @@
 
 /* Converting paths to URLs. */
 
-/** Set @a *url to the URL for @a path_or_url.
+/** Set @a *url to the URL for @a path_or_url allocated in result_pool.
  *
  * If @a path_or_url is already a URL, set @a *url to @a path_or_url.
  *
  * If @a path_or_url is a versioned item, set @a *url to @a
  * path_or_url's entry URL.  If @a path_or_url is unversioned (has
  * no entry), set @a *url to NULL.
+ *
+ * Use @a ctx->wc_ctx to retrieve the information. Use
+ ** @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_url_from_path2(const char **url,
+                          const char *path_or_url,
+                          svn_client_ctx_t *ctx,
+                          apr_pool_t *result_pool,
+                          apr_pool_t *scratch_pool);
+
+/** Similar to svn_client_url_from_path2(), but without a context argument.
+ *
+ * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_client_url_from_path(const char **url,
                          const char *path_or_url,
@@ -4599,18 +5722,28 @@
                          apr_pool_t *pool);
 
 
-/** Return the repository @a uuid for working-copy @a path, allocated
- * in @a pool.  Use @a adm_access to retrieve the uuid from @a path's
- * entry; if not present in the entry, then look in its parents. If not
- * present in the workingcopy call svn_client_uuid_from_url() to
- * retrieve, using the entry's URL.  @a ctx is required for possible
- * repository authentication.
- *
- * @note The only reason this function falls back on
- * svn_client_uuid_from_url() is for compatibility purposes.  Old and
- * detached working copies may not have uuids in the entries file.
+/** Return the repository @a uuid for working-copy @a local_abspath,
+ * allocated in @a result_pool.  Use @a ctx->wc_ctx to retrieve the
+ * information.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
  */
 svn_error_t *
+svn_client_uuid_from_path2(const char **uuid,
+                           const char *local_abspath,
+                           svn_client_ctx_t *ctx,
+                           apr_pool_t *result_pool,
+                           apr_pool_t *scratch_pool);
+
+/** Similar to svn_client_uuid_from_path2(), but with a relative path and
+ * an access baton.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
 svn_client_uuid_from_path(const char **uuid,
                           const char *path,
                           svn_wc_adm_access_t *adm_access,

Modified: trunk/GME/Include/subversion/svn_cmdline.h
==============================================================================
--- trunk/GME/Include/subversion/svn_cmdline.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_cmdline.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008-2009 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -239,14 +244,14 @@
  * Expects a @c svn_cmdline_prompt_baton_t to be passed as @a baton.
  */
 svn_error_t *
-svn_cmdline_auth_ssl_server_trust_prompt
-  (svn_auth_cred_ssl_server_trust_t **cred_p,
-   void *baton,
-   const char *realm,
-   apr_uint32_t failures,
-   const svn_auth_ssl_server_cert_info_t *cert_info,
-   svn_boolean_t may_save,
-   apr_pool_t *pool);
+svn_cmdline_auth_ssl_server_trust_prompt(
+  svn_auth_cred_ssl_server_trust_t **cred_p,
+  void *baton,
+  const char *realm,
+  apr_uint32_t failures,
+  const svn_auth_ssl_server_cert_info_t *cert_info,
+  svn_boolean_t may_save,
+  apr_pool_t *pool);
 
 
 /** An implementation of @c svn_auth_ssl_client_cert_prompt_func_t that
@@ -260,12 +265,12 @@
  * Expects a @c svn_cmdline_prompt_baton_t to be passed as @a baton.
  */
 svn_error_t *
-svn_cmdline_auth_ssl_client_cert_prompt
-  (svn_auth_cred_ssl_client_cert_t **cred_p,
-   void *baton,
-   const char *realm,
-   svn_boolean_t may_save,
-   apr_pool_t *pool);
+svn_cmdline_auth_ssl_client_cert_prompt(
+  svn_auth_cred_ssl_client_cert_t **cred_p,
+  void *baton,
+  const char *realm,
+  svn_boolean_t may_save,
+  apr_pool_t *pool);
 
 
 /** An implementation of @c svn_auth_ssl_client_cert_pw_prompt_func_t that
@@ -276,15 +281,15 @@
  * Expects a @c svn_cmdline_prompt_baton_t to be passed as @a baton.
  */
 svn_error_t *
-svn_cmdline_auth_ssl_client_cert_pw_prompt
-  (svn_auth_cred_ssl_client_cert_pw_t **cred_p,
-   void *baton,
-   const char *realm,
-   svn_boolean_t may_save,
-   apr_pool_t *pool);
+svn_cmdline_auth_ssl_client_cert_pw_prompt(
+  svn_auth_cred_ssl_client_cert_pw_t **cred_p,
+  void *baton,
+  const char *realm,
+  svn_boolean_t may_save,
+  apr_pool_t *pool);
 
 /** An implementation of @c svn_auth_plaintext_prompt_func_t that
- * prompts the user whether storing unencypted passwords to disk is OK.
+ * prompts the user whether storing unencrypted passwords to disk is OK.
  *
  * Expects a @c svn_cmdline_prompt_baton2_t to be passed as @a baton.
  *
@@ -297,7 +302,7 @@
                                   apr_pool_t *pool);
 
 /** An implementation of @c svn_auth_plaintext_passphrase_prompt_func_t that
- * prompts the user whether storing unencypted passphrase to disk is OK.
+ * prompts the user whether storing unencrypted passphrase to disk is OK.
  *
  * Expects a @c svn_cmdline_prompt_baton2_t to be passed as @a baton.
  *

Modified: trunk/GME/Include/subversion/svn_compat.h
==============================================================================
--- trunk/GME/Include/subversion/svn_compat.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_compat.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2006-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *

Modified: trunk/GME/Include/subversion/svn_config.h
==============================================================================
--- trunk/GME/Include/subversion/svn_config.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_config.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -92,6 +97,8 @@
 #define SVN_CONFIG_SECTION_HELPERS              "helpers"
 #define SVN_CONFIG_OPTION_EDITOR_CMD                "editor-cmd"
 #define SVN_CONFIG_OPTION_DIFF_CMD                  "diff-cmd"
+/** @since New in 1.7. */
+#define SVN_CONFIG_OPTION_DIFF_EXTENSIONS           "diff-extensions"
 #define SVN_CONFIG_OPTION_DIFF3_CMD                 "diff3-cmd"
 #define SVN_CONFIG_OPTION_DIFF3_HAS_PROGRAM_ARG     "diff3-has-program-arg"
 #define SVN_CONFIG_OPTION_MERGE_TOOL_CMD            "merge-tool-cmd"
@@ -105,6 +112,7 @@
 #define SVN_CONFIG_OPTION_MIMETYPES_FILE            "mime-types-file"
 #define SVN_CONFIG_OPTION_PRESERVED_CF_EXTS         "preserved-conflict-file-exts"
 #define SVN_CONFIG_OPTION_INTERACTIVE_CONFLICTS     "interactive-conflicts"
+#define SVN_CONFIG_OPTION_MEMORY_CACHE_SIZE         "memory-cache-size"
 #define SVN_CONFIG_SECTION_TUNNELS              "tunnels"
 #define SVN_CONFIG_SECTION_AUTO_PROPS           "auto-props"
 /** @} */
@@ -121,6 +129,8 @@
 #define SVN_CONFIG_OPTION_PASSWORD_DB               "password-db"
 #define SVN_CONFIG_OPTION_REALM                     "realm"
 #define SVN_CONFIG_OPTION_AUTHZ_DB                  "authz-db"
+/** @since New in 1.7. */
+#define SVN_CONFIG_OPTION_FORCE_USERNAME_CASE       "force-username-case"
 #define SVN_CONFIG_SECTION_SASL                 "sasl"
 #define SVN_CONFIG_OPTION_USE_SASL                  "use-sasl"
 #define SVN_CONFIG_OPTION_MIN_SSF                   "min-encryption"
@@ -179,12 +189,44 @@
                       apr_pool_t *pool);
 
 
+/** Set @a *cfgp to an empty @c svn_config_t structure,
+ * allocated in @a result_pool.
+ *
+ * Pass TRUE to @a section_names_case_sensitive if
+ * section names are to be populated case sensitively.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_config_create(svn_config_t **cfgp,
+                  svn_boolean_t section_names_case_sensitive,
+                  apr_pool_t *result_pool);
+
 /** Read configuration data from @a file (a file or registry path) into
  * @a *cfgp, allocated in @a pool.
  *
  * If @a file does not exist, then if @a must_exist, return an error,
  * otherwise return an empty @c svn_config_t.
+ *
+ * If @a section_names_case_sensitive is TRUE, populate section name hashes
+ * case sensitively, except for the default SVN_CONFIG__DEFAULT_SECTION.
+ *
+ * @since New in 1.7.
  */
+
+svn_error_t *
+svn_config_read2(svn_config_t **cfgp,
+                 const char *file,
+                 svn_boolean_t must_exist,
+                 svn_boolean_t section_names_case_sensitive,
+                 apr_pool_t *pool);
+
+/** Similar to svn_config_read2, but always passes FALSE to
+ * section_names_case_sensitive.
+ *
+ * @deprecated Provided for backward compatibility with 1.6 API.
+ */
+SVN_DEPRECATED
 svn_error_t *
 svn_config_read(svn_config_t **cfgp,
                 const char *file,
@@ -228,7 +270,7 @@
  *
  * This function invalidates all value expansions in @a cfg.
  *
- * To remove an option, pass NULL for the @c value.
+ * To remove an option, pass NULL for the @a value.
  */
 void
 svn_config_set(svn_config_t *cfg,
@@ -293,7 +335,7 @@
                                                          void *baton);
 
 /** Similar to svn_config_enumerate_sections2(), but uses a memory pool of
- * @a cfg instead of one that is explicitely provided.
+ * @a cfg instead of one that is explicitly provided.
  *
  * @deprecated Provided for backwards compatibility with the 1.2 API.
  */
@@ -340,7 +382,7 @@
                                                  void *baton);
 
 /** Similar to svn_config_enumerate2(), but uses a memory pool of
- * @a cfg instead of one that is explicitely provided.
+ * @a cfg instead of one that is explicitly provided.
  *
  * @deprecated Provided for backwards compatibility with the 1.2 API.
  */

Modified: trunk/GME/Include/subversion/svn_ctype.h
==============================================================================
--- trunk/GME/Include/subversion/svn_ctype.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_ctype.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
  *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *

Modified: trunk/GME/Include/subversion/svn_dav.h
==============================================================================
--- trunk/GME/Include/subversion/svn_dav.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_dav.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2007 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -38,6 +43,13 @@
  */
 #define SVN_SVNDIFF_MIME_TYPE "application/vnd.svn-svndiff"
 
+/** This is the MIME type that Subversion users for its "skel" format.
+ *
+ * This is an application type, for the "svn" vendor. The specific subtype
+ * is "skel".
+ * @since New in 1.7.
+ */
+#define SVN_SKEL_MIME_TYPE "application/vnd.svn-skel"
 
 /** This header is *TEMPORARILY* used to transmit the delta base to the
  * server. It contains a version resource URL for what is on the client.
@@ -81,6 +93,89 @@
     universe of svn_lock_t->owner.)  */
 #define SVN_DAV_LOCK_OWNER_HEADER "X-SVN-Lock-Owner"
 
+/** Assuming the OPTIONS was performed against a resource within a
+ * Subversion repository, then this header indicates the youngest
+ * revision in the repository.
+ * @since New in 1.7.  */
+#define SVN_DAV_YOUNGEST_REV_HEADER "SVN-Youngest-Rev"
+
+/** Assuming the OPTIONS was performed against a resource within a
+ * Subversion repository, then this header indicates the UUID of the
+ * repository.
+ * @since New in 1.7.  */
+#define SVN_DAV_REPOS_UUID_HEADER "SVN-Repository-UUID"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the server speaks HTTP protocol v2.  This header provides an
+ * opaque URI that the client should send all custom REPORT requests
+ * against.
+ * @since New in 1.7.  */
+#define SVN_DAV_ME_RESOURCE_HEADER "SVN-Me-Resource"
+
+/** This header provides the repository root URI, suitable for use in
+ * calculating the relative paths of other public URIs for this
+ * repository into .  (HTTP protocol v2 only)
+ * @since New in 1.7.  */
+#define SVN_DAV_ROOT_URI_HEADER "SVN-Repository-Root"
+
+/** This header provides an opaque URI that the client can append a
+ * revision to, to construct a 'revision URL'.  This allows direct
+ * read/write access to revprops via PROPFIND or PROPPATCH, and is
+ * similar to libsvn_fs's revision objects (as distinct from "revision
+ * roots").  (HTTP protocol v2 only)
+ * @since New in 1.7.  */
+#define SVN_DAV_REV_STUB_HEADER "SVN-Rev-Stub"
+
+/** This header provides an opaque URI that the client can append
+ * PEGREV/PATH to, in order to construct URIs of pegged objects in the
+ * repository, similar to the use of a "revision root" in the
+ * libsvn_fs API.  (HTTP protocol v2 only)
+ * @since New in 1.7.  */
+#define SVN_DAV_REV_ROOT_STUB_HEADER "SVN-Rev-Root-Stub"
+
+/** This header provides an opaque URI which represents a Subversion
+ * transaction (revision-in-progress) object.  It is suitable for use
+ * in fetching and modifying transaction properties as part of a
+ * commit process, similar to the svn_fs_txn_t object (as distinct
+ * from a "txn root").  (HTTP protocol v2 only)
+ * @since New in 1.7.  */
+#define SVN_DAV_TXN_STUB_HEADER "SVN-Txn-Stub"
+
+/** Companion to @c SVN_DAV_TXN_STUB_HEADER, used when a POST request
+ *  returns @c SVN_DAV_VTXN_NAME_HEADER in response to a client
+ *  supplied name.  (HTTP protocol v2 only)
+ * @since New in 1.7.  */
+#define SVN_DAV_VTXN_STUB_HEADER "SVN-VTxn-Stub"
+
+/** This header provides an opaque URI which represents the root
+ * directory of a Subversion transaction (revision-in-progress),
+ * similar to the concept of a "txn root" in the libsvn_fs API.  The
+ * client can append additional path segments to it to access items
+ * deeper in the transaction tree as part of a commit process.  (HTTP
+ * protocol v2 only)
+ * @since New in 1.7.  */
+#define SVN_DAV_TXN_ROOT_STUB_HEADER "SVN-Txn-Root-Stub"
+
+/** Companion to @c SVN_DAV_TXN_ROOT_STUB_HEADER, used when a POST
+ *  request returns @c SVN_DAV_VTXN_NAME_HEADER in response to a
+ *  client supplied name.  (HTTP protocol v2 only)
+ * @since New in 1.7.  */
+#define SVN_DAV_VTXN_ROOT_STUB_HEADER "SVN-VTxn-Root-Stub"
+
+/** This header is used in the POST response to tell the client the
+ * name of the Subversion transaction created by the request.  It can
+ * then be appended to the transaction stub and transaction root stub
+ * for access to the properties and paths, respectively, of the named
+ * transaction.  (HTTP protocol v2 only)
+ * @since New in 1.7.  */
+#define SVN_DAV_TXN_NAME_HEADER "SVN-Txn-Name"
+
+/** This header is used in the POST request, to pass a client supplied
+ * alternative transaction name to the server, and in the the POST
+ * response, to tell the client that the alternative transaction
+ * resource names should be used.  (HTTP protocol v2 only)
+ * @since New in 1.7.  */
+#define SVN_DAV_VTXN_NAME_HEADER "SVN-VTxn-Name"
 
 /**
  * @name Fulltext MD5 headers
@@ -177,6 +272,12 @@
 #define SVN_DAV_NS_DAV_SVN_LOG_REVPROPS SVN_DAV_PROP_NS_DAV "svn/log-revprops"
 
 /** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to enforce
+ * old-value atomicity in PROPPATCH (for editing revprops). */
+#define SVN_DAV_NS_DAV_SVN_ATOMIC_REVPROPS\
+            SVN_DAV_PROP_NS_DAV "svn/atomic-revprops"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
  * that the transmitter (in this case, the server) knows how to handle
  * a replay of a directory in the repository (not root). */
 #define SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY\

Modified: trunk/GME/Include/subversion/svn_delta.h
==============================================================================
--- trunk/GME/Include/subversion/svn_delta.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_delta.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -35,7 +40,6 @@
 #include "svn_types.h"
 #include "svn_string.h"
 #include "svn_io.h"
-#include "svn_version.h"
 #include "svn_checksum.h"
 
 #ifdef __cplusplus
@@ -44,6 +48,27 @@
 
 
 
+/** This compression level effectively disables data compression.
+ * However, the data pre-processing costs may still not be zero.
+ *
+ * @since New in 1.7.
+ */
+#define SVN_DELTA_COMPRESSION_LEVEL_NONE 0
+
+/** This is the maximum compression level we can pass to zlib.
+ *
+ * @since New in 1.7.
+ */
+#define SVN_DELTA_COMPRESSION_LEVEL_MAX 9
+
+/** This is the default compression level we pass to zlib.  It
+ * should be between 0 and 9, with higher numbers resulting in
+ * better compression rates but slower operation.
+ *
+ * @since New in 1.7.
+ */
+#define SVN_DELTA_COMPRESSION_LEVEL_DEFAULT 5
+
 /**
  * Get libsvn_delta version information.
  *
@@ -69,16 +94,16 @@
  *
  * Since text deltas can be very large, the interface here allows us
  * to produce and consume them in pieces.  Each piece, represented by
- * an @c svn_txdelta_window_t structure, describes how to produce the
+ * an #svn_txdelta_window_t structure, describes how to produce the
  * next section of the target string.
  *
  * To compute a new text delta:
  *
  * - We call svn_txdelta() on the streams we want to compare.  That
- *   returns us an @c svn_txdelta_stream_t object.
+ *   returns us an #svn_txdelta_stream_t object.
  *
  * - We then call svn_txdelta_next_window() on the stream object
- *   repeatedly.  Each call returns a new @c svn_txdelta_window_t
+ *   repeatedly.  Each call returns a new #svn_txdelta_window_t
  *   object, which describes the next portion of the target string.
  *   When svn_txdelta_next_window() returns zero, we are done building
  *   the target string.
@@ -89,6 +114,9 @@
 
 /** Action codes for text delta instructions. */
 enum svn_delta_action {
+    /* Note: The svndiff implementation relies on the values assigned in
+     * this enumeration matching the instruction encoding values. */
+
     /** Append the @a length bytes at @a offset in the source view to the
      * target.
      *
@@ -108,7 +136,7 @@
      * If you start at @a offset, and append @a length bytes one at a time,
      * it'll work out --- you're adding new bytes to the end at the
      * same rate you're reading them from the middle.  Thus, if your
-     * current target text is "abcdefgh", and you get an @c svn_txdelta_target
+     * current target text is "abcdefgh", and you get an #svn_txdelta_target
      * instruction whose @a offset is 6 and whose @a length is 7,
      * the resulting string is "abcdefghghghghg".  This trick is actually
      * useful in encoding long runs of consecutive characters, long runs
@@ -139,7 +167,7 @@
 } svn_txdelta_op_t;
 
 
-/** An @c svn_txdelta_window_t object describes how to reconstruct a
+/** An #svn_txdelta_window_t object describes how to reconstruct a
  * contiguous section of the target string (the "target view") using a
  * specified contiguous region of the source string (the "source
  * view").  It contains a series of instructions which assemble the
@@ -233,8 +261,8 @@
  * somewhere.  At the end of the delta window stream, you must call
  * this function passing zero for the @a window argument.
  */
-typedef svn_error_t *(*svn_txdelta_window_handler_t)
-  (svn_txdelta_window_t *window, void *baton);
+typedef svn_error_t *(*svn_txdelta_window_handler_t)(
+  svn_txdelta_window_t *window, void *baton);
 
 
 /** This function will generate delta windows that turn @a source into
@@ -277,7 +305,7 @@
 
 
 /** A typedef for a function that will set @a *window to the next
- * window from a @c svn_txdelta_stream_t object.  If there are no more
+ * window from a #svn_txdelta_stream_t object.  If there are no more
  * delta windows, NULL will be used.  The returned window, if any,
  * will be allocated in @a pool.  @a baton is the baton specified
  * when the stream was created.
@@ -290,7 +318,7 @@
                                 apr_pool_t *pool);
 
 /** A typedef for a function that will return the md5 checksum of the
- * fulltext deltified by a @c svn_txdelta_stream_t object.  Will
+ * fulltext deltified by a #svn_txdelta_stream_t object.  Will
  * return NULL if the final null window hasn't yet been returned by
  * the stream.  The returned value will be allocated in the same pool
  * as the stream.  @a baton is the baton specified when the stream was
@@ -445,10 +473,26 @@
  * Allocation takes place in a sub-pool of @a pool.  On return, @a *handler
  * is set to a window handler function and @a *handler_baton is set to
  * the value to pass as the @a baton argument to @a *handler. The svndiff
- * version is @a svndiff_version.
+ * version is @a svndiff_version. @a compression_level is the zlib
+ * compression level from 0 (no compression) and 9 (maximum compression).
+ *
+ * @since New in 1.7.
+ */
+void
+svn_txdelta_to_svndiff3(svn_txdelta_window_handler_t *handler,
+                        void **handler_baton,
+                        svn_stream_t *output,
+                        int svndiff_version,
+                        int compression_level,
+                        apr_pool_t *pool);
+
+/** Similar to svn_txdelta_to_svndiff3(), but always using the SVN default
+ * compression level (#SVN_DELTA_COMPRESSION_LEVEL_DEFAULT).
  *
  * @since New in 1.4.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 void
 svn_txdelta_to_svndiff2(svn_txdelta_window_handler_t *handler,
                         void **handler_baton,
@@ -472,7 +516,7 @@
  * data into a text delta, invoking @a handler with @a handler_baton
  * whenever a new window is ready.  If @a error_on_early_close is @c
  * TRUE, attempting to close this stream before it has handled the entire
- * svndiff data set will result in @c SVN_ERR_SVNDIFF_UNEXPECTED_END,
+ * svndiff data set will result in #SVN_ERR_SVNDIFF_UNEXPECTED_END,
  * else this error condition will be ignored.
  */
 svn_stream_t *
@@ -560,7 +604,7 @@
  *
  * So instead of representing the tree delta explicitly, we define a
  * standard way for a consumer to process each piece of a tree delta
- * as soon as the producer creates it.  The @c svn_delta_editor_t
+ * as soon as the producer creates it.  The #svn_delta_editor_t
  * structure is a set of callback functions to be defined by a delta
  * consumer, and invoked by a delta producer.  Each invocation of a
  * callback function describes a piece of the delta --- a file's
@@ -573,7 +617,7 @@
 /** A structure full of callback functions the delta source will invoke
  * as it produces the delta.
  *
- * Note: Don't try to allocate one of these yourself.  Instead, always
+ * @note Don't try to allocate one of these yourself.  Instead, always
  * use svn_delta_default_editor() or some other constructor, to ensure
  * that unused slots are filled in with no-op functions.
  *
@@ -656,7 +700,7 @@
  * or directory being added).  In that case, @a copyfrom_path must be
  * either a path relative to the root of the edit, or a URI from the
  * repository being edited.  If @a copyfrom_path is @c NULL, then @a
- * copyfrom_revision must be @c SVN_INVALID_REVNUM; it is invalid to
+ * copyfrom_revision must be #SVN_INVALID_REVNUM; it is invalid to
  * pass a mix of valid and invalid copyfrom arguments.
  *
  *
@@ -701,7 +745,7 @@
  *
  * 6. When the producer calls @c apply_textdelta, it must make all of
  *    the window handler calls (including the @c NULL window at the
- *    end) before issuing any other @c svn_delta_editor_t calls.
+ *    end) before issuing any other #svn_delta_editor_t calls.
  *
  * So, the producer needs to use directory and file batons as if it
  * is doing a single depth-first traversal of the tree, with the
@@ -757,10 +801,12 @@
    * operations.  It doesn't really make much sense for commit-type
    * operations, because the revision of a commit isn't known until
    * the commit is finalized.
+   *
+   * Any temporary allocations may be performed in @a scratch_pool.
    */
   svn_error_t *(*set_target_revision)(void *edit_baton,
                                       svn_revnum_t target_revision,
-                                      apr_pool_t *pool);
+                                      apr_pool_t *scratch_pool);
 
   /** Set @a *root_baton to a baton for the top directory of the change.
    * (This is the top of the subtree being changed, not necessarily
@@ -771,12 +817,12 @@
    * new target revision set with @c set_target_revision).
    *
    * Allocations for the returned @a root_baton should be performed in
-   * @a dir_pool. It is also typical to (possibly) save this pool for later
-   * usage by @c close_directory.
+   * @a result_pool. It is also typical to (possibly) save this pool for
+   * later usage by @c close_directory.
    */
   svn_error_t *(*open_root)(void *edit_baton,
                             svn_revnum_t base_revision,
-                            apr_pool_t *dir_pool,
+                            apr_pool_t *result_pool,
                             void **root_baton);
 
 
@@ -785,7 +831,7 @@
    * revision number, it is used as a sanity check to ensure that you
    * are really removing the revision of @a path that you think you are.
    *
-   * All allocations should be performed in @a pool.
+   * Any temporary allocations may be performed in @a scratch_pool.
    *
    * @note The @a revision parameter is typically used only for
    * client->server commit-type operations, allowing the server to
@@ -798,7 +844,7 @@
   svn_error_t *(*delete_entry)(const char *path,
                                svn_revnum_t revision,
                                void *parent_baton,
-                               apr_pool_t *pool);
+                               apr_pool_t *scratch_pool);
 
 
   /** We are going to add a new subdirectory named @a path.  We will use
@@ -810,14 +856,14 @@
    * @a copyfrom_path under @a copyfrom_revision.
    *
    * Allocations for the returned @a child_baton should be performed in
-   * @a dir_pool. It is also typical to (possibly) save this pool for later
-   * usage by @c close_directory.
+   * @a result_pool. It is also typical to (possibly) save this pool for
+   * later usage by @c close_directory.
    */
   svn_error_t *(*add_directory)(const char *path,
                                 void *parent_baton,
                                 const char *copyfrom_path,
                                 svn_revnum_t copyfrom_revision,
-                                apr_pool_t *dir_pool,
+                                apr_pool_t *result_pool,
                                 void **child_baton);
 
   /** We are going to make changes in a subdirectory (of the directory
@@ -828,13 +874,13 @@
    * revision of the subdirectory.
    *
    * Allocations for the returned @a child_baton should be performed in
-   * @a dir_pool. It is also typical to (possibly) save this pool for later
-   * usage by @c close_directory.
+   * @a result_pool. It is also typical to (possibly) save this pool for
+   * later usage by @c close_directory.
    */
   svn_error_t *(*open_directory)(const char *path,
                                  void *parent_baton,
                                  svn_revnum_t base_revision,
-                                 apr_pool_t *dir_pool,
+                                 apr_pool_t *result_pool,
                                  void **child_baton);
 
   /** Change the value of a directory's property.
@@ -846,30 +892,34 @@
    * The callback is guaranteed to be called exactly once for each property
    * whose value differs between the start and the end of the edit.
    *
-   * All allocations should be performed in @a pool.
+   * Any temporary allocations may be performed in @a scratch_pool.
    */
   svn_error_t *(*change_dir_prop)(void *dir_baton,
                                   const char *name,
                                   const svn_string_t *value,
-                                  apr_pool_t *pool);
+                                  apr_pool_t *scratch_pool);
 
   /** We are done processing a subdirectory, whose baton is @a dir_baton
    * (set by @c add_directory or @c open_directory).  We won't be using
    * the baton any more, so whatever resources it refers to may now be
    * freed.
+   *
+   * Any temporary allocations may be performed in @a scratch_pool.
    */
   svn_error_t *(*close_directory)(void *dir_baton,
-                                  apr_pool_t *pool);
+                                  apr_pool_t *scratch_pool);
 
 
   /** In the directory represented by @a parent_baton, indicate that
    * @a path is present as a subdirectory in the edit source, but
    * cannot be conveyed to the edit consumer (perhaps because of
    * authorization restrictions).
+   *
+   * Any temporary allocations may be performed in @a scratch_pool.
    */
   svn_error_t *(*absent_directory)(const char *path,
                                    void *parent_baton,
-                                   apr_pool_t *pool);
+                                   apr_pool_t *scratch_pool);
 
   /** We are going to add a new file named @a path.  The callback can
    * store a baton for this new file in @a **file_baton; whatever value
@@ -880,14 +930,24 @@
    * @a copyfrom_path under @a copyfrom_revision.
    *
    * Allocations for the returned @a file_baton should be performed in
-   * @a file_pool. It is also typical to save this pool for later usage
+   * @a result_pool. It is also typical to save this pool for later usage
    * by @c apply_textdelta and possibly @c close_file.
+   *
+   * @note Because the editor driver could be employing the "postfix
+   * deltas" paradigm, @a result_pool could potentially be relatively
+   * long-lived.  Every file baton created by the editor for a given
+   * editor drive might be resident in memory similtaneously.  Editor
+   * implementations should ideally keep their file batons as
+   * conservative (memory-usage-wise) as possible, and use @a result_pool
+   * only for those batons.  (Consider using a subpool of @a result_pool
+   * for scratch work, destroying the subpool before exiting this
+   * function's implementation.)
    */
   svn_error_t *(*add_file)(const char *path,
                            void *parent_baton,
                            const char *copyfrom_path,
                            svn_revnum_t copyfrom_revision,
-                           apr_pool_t *file_pool,
+                           apr_pool_t *result_pool,
                            void **file_baton);
 
   /** We are going to make change to a file named @a path, which resides
@@ -899,13 +959,16 @@
    * current revision of the file.
    *
    * Allocations for the returned @a file_baton should be performed in
-   * @a file_pool. It is also typical to save this pool for later usage
+   * @a result_pool. It is also typical to save this pool for later usage
    * by @c apply_textdelta and possibly @c close_file.
+   *
+   * @note See note about memory usage on @a add_file, which also
+   * applies here.
    */
   svn_error_t *(*open_file)(const char *path,
                             void *parent_baton,
                             svn_revnum_t base_revision,
-                            apr_pool_t *file_pool,
+                            apr_pool_t *result_pool,
                             void **file_baton);
 
   /** Apply a text delta, yielding the new revision of a file.
@@ -918,7 +981,8 @@
    * handler; we will then call @a *handler on successive text
    * delta windows as we receive them.  The callback should set
    * @a *handler_baton to the value we should pass as the @a baton
-   * argument to @a *handler.
+   * argument to @a *handler. These values should be allocated within
+   * @a result_pool.
    *
    * @a base_checksum is the hex MD5 digest for the base text against
    * which the delta is being applied; it is ignored if NULL, and may
@@ -932,7 +996,7 @@
    */
   svn_error_t *(*apply_textdelta)(void *file_baton,
                                   const char *base_checksum,
-                                  apr_pool_t *pool,
+                                  apr_pool_t *result_pool,
                                   svn_txdelta_window_handler_t *handler,
                                   void **handler_baton);
 
@@ -945,12 +1009,12 @@
    * The callback is guaranteed to be called exactly once for each property
    * whose value differs between the start and the end of the edit.
    *
-   * All allocations should be performed in @a pool.
+   * Any temporary allocations may be performed in @a scratch_pool.
    */
   svn_error_t *(*change_file_prop)(void *file_baton,
                                    const char *name,
                                    const svn_string_t *value,
-                                   apr_pool_t *pool);
+                                   apr_pool_t *scratch_pool);
 
   /** We are done processing a file, whose baton is @a file_baton (set by
    * @c add_file or @c open_file).  We won't be using the baton any
@@ -962,31 +1026,39 @@
    * checksum of the new fulltext, and the error
    * SVN_ERR_CHECKSUM_MISMATCH is returned if they do not match.  If
    * there is no new fulltext, @a text_checksum is ignored.
+   *
+   * Any temporary allocations may be performed in @a scratch_pool.
    */
   svn_error_t *(*close_file)(void *file_baton,
                              const char *text_checksum,
-                             apr_pool_t *pool);
+                             apr_pool_t *scratch_pool);
 
   /** In the directory represented by @a parent_baton, indicate that
    * @a path is present as a file in the edit source, but cannot be
    * conveyed to the edit consumer (perhaps because of authorization
    * restrictions).
+   *
+   * Any temporary allocations may be performed in @a scratch_pool.
    */
   svn_error_t *(*absent_file)(const char *path,
                               void *parent_baton,
-                              apr_pool_t *pool);
+                              apr_pool_t *scratch_pool);
 
   /** All delta processing is done.  Call this, with the @a edit_baton for
    * the entire edit.
+   *
+   * Any temporary allocations may be performed in @a scratch_pool.
    */
   svn_error_t *(*close_edit)(void *edit_baton,
-                             apr_pool_t *pool);
+                             apr_pool_t *scratch_pool);
 
   /** The editor-driver has decided to bail out.  Allow the editor to
    * gracefully clean up things if it needs to.
+   *
+   * Any temporary allocations may be performed in @a scratch_pool.
    */
   svn_error_t *(*abort_edit)(void *edit_baton,
-                             apr_pool_t *pool);
+                             apr_pool_t *scratch_pool);
 
   /* Be sure to update svn_delta_get_cancellation_editor() and
    * svn_delta_default_editor() if you add a new callback here. */
@@ -1023,7 +1095,7 @@
  *
  * The @a editor will call @a cancel_func with @a cancel_baton when each of
  * its functions is called, continuing on to call the corresponding wrapped
- * function if @a cancel_func returns @c SVN_NO_ERROR.
+ * function if @a cancel_func returns #SVN_NO_ERROR.
  *
  * If @a cancel_func is @c NULL, set @a *editor to @a wrapped_editor and
  * @a *edit_baton to @a wrapped_baton.
@@ -1047,26 +1119,26 @@
  * wrapped_editor.
  *
  * @a requested_depth must be one of the following depth values:
- * @c svn_depth_infinity, @c svn_depth_empty, @c svn_depth_files,
- * @c svn_depth_immediates, or @c svn_depth_unknown.
+ * #svn_depth_infinity, #svn_depth_empty, #svn_depth_files,
+ * #svn_depth_immediates, or #svn_depth_unknown.
  *
- * If filtering is deemed unncessary (or if @a requested_depth is @c
- * svn_depth_unknown), @a *editor and @a *edit_baton will be set to @a
+ * If filtering is deemed unnecessary (or if @a requested_depth is
+ * #svn_depth_unknown), @a *editor and @a *edit_baton will be set to @a
  * wrapped_editor and @a wrapped_baton, respectively; otherwise,
  * they'll be set to new objects allocated from @a pool.
  *
  * @note Because the svn_delta_editor_t interface's @c delete_entry()
  * function doesn't carry node kind information, a depth-based
- * filtering editor being asked to filter for @c svn_depth_files but
+ * filtering editor being asked to filter for #svn_depth_files but
  * receiving a @c delete_entry() call on an immediate child of the
  * editor's target is unable to know if that deletion should be
  * allowed or filtered out -- a delete of a top-level file is okay in
  * this case, a delete of a top-level subdirectory is not.  As such,
  * this filtering editor takes a conservative approach, and ignores
- * top-level deletion requests when filtering for @c svn_depth_files.
+ * top-level deletion requests when filtering for #svn_depth_files.
  * Fortunately, most non-depth-aware (pre-1.5) Subversion editor
  * drivers can be told to drive non-recursively (where non-recursive
- * means essentially @c svn_depth_files), which means they won't
+ * means essentially #svn_depth_files), which means they won't
  * transmit out-of-scope editor commands anyway.
  *
  * @since New in 1.5.
@@ -1110,12 +1182,12 @@
  * handler of this callback must call the editor's open_root()
  * function and return the top-level root dir baton in @a *dir_baton.
  */
-typedef svn_error_t *(*svn_delta_path_driver_cb_func_t)
-  (void **dir_baton,
-   void *parent_baton,
-   void *callback_baton,
-   const char *path,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_delta_path_driver_cb_func_t)(
+  void **dir_baton,
+  void *parent_baton,
+  void *callback_baton,
+  const char *path,
+  apr_pool_t *pool);
 
 
 /** Drive @a editor (with its @a edit_baton) in such a way that
@@ -1133,7 +1205,7 @@
 svn_delta_path_driver(const svn_delta_editor_t *editor,
                       void *edit_baton,
                       svn_revnum_t revision,
-                      apr_array_header_t *paths,
+                      const apr_array_header_t *paths,
                       svn_delta_path_driver_cb_func_t callback_func,
                       void *callback_baton,
                       apr_pool_t *pool);
@@ -1168,37 +1240,37 @@
  *
  * @since New in 1.5.
  */
-typedef svn_error_t *(*svn_file_rev_handler_t)
-  (void *baton,
-   const char *path,
-   svn_revnum_t rev,
-   apr_hash_t *rev_props,
-   svn_boolean_t result_of_merge,
-   svn_txdelta_window_handler_t *delta_handler,
-   void **delta_baton,
-   apr_array_header_t *prop_diffs,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_file_rev_handler_t)(
+  void *baton,
+  const char *path,
+  svn_revnum_t rev,
+  apr_hash_t *rev_props,
+  svn_boolean_t result_of_merge,
+  svn_txdelta_window_handler_t *delta_handler,
+  void **delta_baton,
+  apr_array_header_t *prop_diffs,
+  apr_pool_t *pool);
 
 /**
  * The old file rev handler interface.
  *
- * @note @c svn_file_rev_handler_old_t is a placeholder type for both
- * @c svn_repos_file_rev_handler_t and @c svn_ra_file_rev_handler_t.  It is
+ * @note #svn_file_rev_handler_old_t is a placeholder type for both
+ * #svn_repos_file_rev_handler_t and #svn_ra_file_rev_handler_t.  It is
  * reproduced here for dependency reasons.
  *
  * @deprecated This type is provided for the svn_compat_wrap_file_rev_handler()
- * compatibilty wrapper, and should not be used for new development.
+ * compatibility wrapper, and should not be used for new development.
  * @since New in 1.5.
  */
-typedef svn_error_t *(*svn_file_rev_handler_old_t)
-  (void *baton,
-   const char *path,
-   svn_revnum_t rev,
-   apr_hash_t *rev_props,
-   svn_txdelta_window_handler_t *delta_handler,
-   void **delta_baton,
-   apr_array_header_t *prop_diffs,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_file_rev_handler_old_t)(
+  void *baton,
+  const char *path,
+  svn_revnum_t rev,
+  apr_hash_t *rev_props,
+  svn_txdelta_window_handler_t *delta_handler,
+  void **delta_baton,
+  apr_array_header_t *prop_diffs,
+  apr_pool_t *pool);
 
 /** Return, in @a *handler2 and @a *handler2_baton a function/baton that
  * will call @a handler/@a handler_baton, allocating the @a *handler2_baton
@@ -1207,8 +1279,8 @@
  * @note This is used by compatibility wrappers, which exist in more than
  * Subversion core library.
  *
- * @note @c svn_file_rev_handler_old_t is a placeholder type for both
- * @c svn_repos_file_rev_handler_t and @c svn_ra_file_rev_handler_t.  It is
+ * @note #svn_file_rev_handler_old_t is a placeholder type for both
+ * #svn_repos_file_rev_handler_t and #svn_ra_file_rev_handler_t.  It is
  * reproduced here for dependency reasons.
  *
  * @since New in 1.5.

Modified: trunk/GME/Include/subversion/svn_diff.h
==============================================================================
--- trunk/GME/Include/subversion/svn_diff.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_diff.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -49,7 +54,6 @@
 
 #include "svn_types.h"
 #include "svn_io.h"       /* for svn_stream_t */
-#include "svn_version.h"
 #include "svn_string.h"
 
 #ifdef __cplusplus
@@ -100,12 +104,16 @@
 } svn_diff_datasource_e;
 
 
-/** A vtable for reading data from the three datasources. */
-typedef struct svn_diff_fns_t
+/** A vtable for reading data from the three datasources.
+ * @since New in 1.7. */
+typedef struct svn_diff_fns2_t
 {
-  /** Open the datasource of type @a datasource. */
-  svn_error_t *(*datasource_open)(void *diff_baton,
-                                  svn_diff_datasource_e datasource);
+  /** Open the datasources of type @a datasources. */
+  svn_error_t *(*datasources_open)(void *diff_baton,
+                                   apr_off_t *prefix_lines,
+                                   apr_off_t *suffix_lines,
+                                   const svn_diff_datasource_e *datasources,
+                                   apr_size_t datasources_len);
 
   /** Close the datasource of type @a datasource. */
   svn_error_t *(*datasource_close)(void *diff_baton,
@@ -136,6 +144,35 @@
 
   /** Free *all* tokens from memory, they're no longer needed. */
   void (*token_discard_all)(void *diff_baton);
+} svn_diff_fns2_t;
+
+
+/** Like #svn_diff_fns2_t except with datasource_open() instead of
+ * datasources_open().
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+typedef struct svn_diff_fns_t
+{
+  svn_error_t *(*datasource_open)(void *diff_baton,
+                                  svn_diff_datasource_e datasource);
+
+  svn_error_t *(*datasource_close)(void *diff_baton,
+                                   svn_diff_datasource_e datasource);
+
+  svn_error_t *(*datasource_get_next_token)(apr_uint32_t *hash, void **token,
+                                            void *diff_baton,
+                                            svn_diff_datasource_e datasource);
+
+  svn_error_t *(*token_compare)(void *diff_baton,
+                                void *ltoken,
+                                void *rtoken,
+                                int *compare);
+
+  void (*token_discard)(void *diff_baton,
+                        void *token);
+
+  void (*token_discard_all)(void *diff_baton);
 } svn_diff_fns_t;
 
 
@@ -144,8 +181,22 @@
 /** Given a vtable of @a diff_fns/@a diff_baton for reading datasources,
  * return a diff object in @a *diff that represents a difference between
  * an "original" and "modified" datasource.  Do all allocation in @a pool.
+ *
+ * @since New in 1.7.
  */
 svn_error_t *
+svn_diff_diff_2(svn_diff_t **diff,
+                void *diff_baton,
+                const svn_diff_fns2_t *diff_fns,
+                apr_pool_t *pool);
+
+/** Like svn_diff_diff_2() but using #svn_diff_fns_t instead of
+ * #svn_diff_fns2_t.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
 svn_diff_diff(svn_diff_t **diff,
               void *diff_baton,
               const svn_diff_fns_t *diff_fns,
@@ -155,7 +206,21 @@
  * return a diff object in @a *diff that represents a difference between
  * three datasources: "original", "modified", and "latest".  Do all
  * allocation in @a pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_diff_diff3_2(svn_diff_t **diff,
+                 void *diff_baton,
+                 const svn_diff_fns2_t *diff_fns,
+                 apr_pool_t *pool);
+
+/** Like svn_diff_diff3_2() but using #svn_diff_fns_t instead of
+ * #svn_diff_fns2_t.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_diff_diff3(svn_diff_t **diff,
                void *diff_baton,
@@ -167,8 +232,22 @@
  * two datasources: "original" and "latest", adjusted to become a full
  * difference between "original", "modified" and "latest" using "ancestor".
  * Do all allocation in @a pool.
+ *
+ * @since New in 1.7.
  */
 svn_error_t *
+svn_diff_diff4_2(svn_diff_t **diff,
+                 void *diff_baton,
+                 const svn_diff_fns2_t *diff_fns,
+                 apr_pool_t *pool);
+
+/** Like svn_diff_diff4_2() but using #svn_diff_fns_t instead of
+ * #svn_diff_fns2_t.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
 svn_diff_diff4(svn_diff_t **diff,
                void *diff_baton,
                const svn_diff_fns_t *diff_fns,
@@ -371,7 +450,7 @@
   /** Whether to treat all end-of-line markers the same when comparing lines.
    * The default is @c FALSE. */
   svn_boolean_t ignore_eol_style;
-  /** Whether the '@@' lines of the unified diff output should include a prefix
+  /** Whether the "@@" lines of the unified diff output should include a prefix
     * of the nearest preceding line that starts with a character that might be
     * the initial character of a C language identifier.  The default is
     * @c FALSE.
@@ -485,7 +564,7 @@
                       const svn_diff_file_options_t *options,
                       apr_pool_t *pool);
 
-/** Simliar to svn_file_diff4_2(), but with @a options set to a struct with
+/** Similar to svn_file_diff4_2(), but with @a options set to a struct with
  * default options.
  *
  * @deprecated Provided for backwards compatibility with the 1.3 API.
@@ -532,7 +611,7 @@
 /** Similar to svn_diff_file_output_unified3(), but with @a relative_to_dir
  * set to NULL and @a show_c_function to false.
  *
- * @deprecated Provided for backwards compatibility with the 1.3 API.
+ * @deprecated Provided for backwards compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -634,7 +713,7 @@
                          apr_pool_t *pool);
 
 
-/** Generate @a diff output from the @a orginal, @a modified and @a latest
+/** Generate @a diff output from the @a original, @a modified and @a latest
  * in-memory strings.  @a diff will be allocated in @a pool.
  *
  * @since New in 1.5.
@@ -662,15 +741,37 @@
                           const svn_diff_file_options_t *options,
                           apr_pool_t *pool);
 
-
 /** Outputs the @a diff object generated by svn_diff_mem_string_diff()
  * in unified diff format on @a output_stream, using @a original
  * and @a modified for the text in the output.
- * Outputs the header and markers in @a header_encoding.
+ * A diff header is only written to the output if @a with_diff_header
+ * is TRUE.
+ *
+ * Outputs the header and hunk delimiters in @a header_encoding.
+ * A @a hunk_delimiter can optionally be specified.
+ * If @a hunk_delimiter is NULL, use the default hunk delimiter "@@".
  *
  * @a original_header and @a modified header are
  * used to fill the field after the "---" and "+++" header markers.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_diff_mem_string_output_unified2(svn_stream_t *output_stream,
+                                    svn_diff_t *diff,
+                                    svn_boolean_t with_diff_header,
+                                    const char *hunk_delimiter,
+                                    const char *original_header,
+                                    const char *modified_header,
+                                    const char *header_encoding,
+                                    const svn_string_t *original,
+                                    const svn_string_t *modified,
+                                    apr_pool_t *pool);
+
+/** Similar to svn_diff_mem_string_output_unified2() but with
+ * @a with_diff_header always set to TRUE and @a hunk_delimiter always
+ * set to NULL.
+ *
  * @since New in 1.5.
  */
 svn_error_t *
@@ -738,6 +839,271 @@
                                  apr_pool_t *pool);
 
 
+
+
+/* Diff parsing. If you want to apply a patch to a working copy
+ * rather than parse it, see svn_client_patch(). */
+
+/**
+ * Describes what operation has been performed on a file.
+ *
+ * @since New in 1.7.
+ */
+typedef enum svn_diff_operation_kind_e
+{
+  svn_diff_op_unchanged,
+  svn_diff_op_added,
+  svn_diff_op_deleted,
+  svn_diff_op_copied,
+  svn_diff_op_moved,
+  /* There's no tree changes, just text modifications. */
+  svn_diff_op_modified
+} svn_diff_operation_kind_t;
+
+/**
+ * A single hunk inside a patch.
+ *
+ * The lines of text comprising the hunk can be interpreted in three ways:
+ *   - diff text       The hunk as it appears in the unidiff patch file,
+ *                     including the hunk header line ("@@ ... @@")
+ *   - original text   The text the patch was based on.
+ *   - modified text   The result of patching the original text.
+ *
+ * For example, consider a hunk with the following diff text:
+ *
+ * @verbatim
+     @@ -1,5 +1,5 @@
+      #include <stdio.h>
+      int main(int argc, char *argv[]) {
+     -        printf("Hello World!\n");
+     +        printf("I like Subversion!\n");
+      } @endverbatim
+ *
+ * The original text of this hunk is:
+ *
+ * @verbatim
+     #include <stdio.h>
+     int main(int argc, char *argv[]) {
+             printf("Hello World!\n");
+     } @endverbatim
+ *
+ * And the modified text is:
+ *
+ * @verbatim
+     #include <stdio.h>
+     int main(int argc, char *argv[]) {
+             printf("I like Subversion!\n");
+     } @endverbatim
+ *
+ * @see svn_diff_hunk_readline_diff_text()
+ * @see svn_diff_hunk_readline_original_text()
+ * @see svn_diff_hunk_readline_modified_text()
+ *
+ * @since New in 1.7. */
+typedef struct svn_diff_hunk_t svn_diff_hunk_t;
+
+/**
+ * Allocate @a *stringbuf in @a result_pool, and read into it one line
+ * of the diff text of @a hunk. The first line returned is the hunk header.
+ * Any subsequent lines are unidiff data (starting with '+', '-', or ' ').
+ * If the @a hunk is being interpreted in reverse (i.e. the reverse
+ * parameter of svn_diff_parse_next_patch() was @c TRUE), the diff
+ * text will be returned in reversed form.
+ * The line-terminator is detected automatically and stored in @a *eol
+ * if @a eol is not NULL.
+ * If EOF is reached, set @a *eof to TRUE, and set @a *eol to NULL if the
+ * hunk does not end with a newline character and @a eol is not NULL.
+ * Temporary allocations will be performed in @a scratch_pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_diff_hunk_readline_diff_text(svn_diff_hunk_t *hunk,
+                                 svn_stringbuf_t **stringbuf,
+                                 const char **eol,
+                                 svn_boolean_t *eof,
+                                 apr_pool_t *result_pool,
+                                 apr_pool_t *scratch_pool);
+
+/**
+ * Allocate @a *stringbuf in @a result_pool, and read into it one line
+ * of the original text of @a hunk.
+ * The line-terminator is detected automatically and stored in @a *eol
+ * if @a eol is not NULL.
+ * If EOF is reached, set @a *eof to TRUE, and set @a *eol to NULL if the
+ * hunk text does not end with a newline character and @a eol is not NULL.
+ * Temporary allocations will be performed in @a scratch_pool.
+ *
+ * @see svn_diff_hunk_t
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_diff_hunk_readline_original_text(svn_diff_hunk_t *hunk,
+                                     svn_stringbuf_t **stringbuf,
+                                     const char **eol,
+                                     svn_boolean_t *eof,
+                                     apr_pool_t *result_pool,
+                                     apr_pool_t *scratch_pool);
+
+/**
+ * Like svn_diff_hunk_readline_original_text(), but it returns lines from
+ * the modified text of the hunk.
+ *
+ * @see svn_diff_hunk_t
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_diff_hunk_readline_modified_text(svn_diff_hunk_t *hunk,
+                                     svn_stringbuf_t **stringbuf,
+                                     const char **eol,
+                                     svn_boolean_t *eof,
+                                     apr_pool_t *result_pool,
+                                     apr_pool_t *scratch_pool);
+
+/** Reset the diff text of @a hunk so it can be read again from the start.
+ * @since New in 1.7. */
+void
+svn_diff_hunk_reset_diff_text(svn_diff_hunk_t *hunk);
+
+/** Reset the original text of @a hunk so it can be read again from the start.
+ * @since New in 1.7. */
+void
+svn_diff_hunk_reset_original_text(svn_diff_hunk_t *hunk);
+
+/** Reset the modified text of @a hunk so it can be read again from the start.
+ * @since New in 1.7. */
+void
+svn_diff_hunk_reset_modified_text(svn_diff_hunk_t *hunk);
+
+/** Return the line offset of the original hunk text,
+ * as parsed from the hunk header.
+ * @since New in 1.7. */
+svn_linenum_t
+svn_diff_hunk_get_original_start(const svn_diff_hunk_t *hunk);
+
+/** Return the number of lines in the original @a hunk text,
+ * as parsed from the hunk header.
+ * @since New in 1.7. */
+svn_linenum_t
+svn_diff_hunk_get_original_length(const svn_diff_hunk_t *hunk);
+
+/** Return the line offset of the modified @a hunk text,
+ * as parsed from the hunk header.
+ * @since New in 1.7. */
+svn_linenum_t
+svn_diff_hunk_get_modified_start(const svn_diff_hunk_t *hunk);
+
+/** Return the number of lines in the modified @a hunk text,
+ * as parsed from the hunk header.
+ * @since New in 1.7. */
+svn_linenum_t
+svn_diff_hunk_get_modified_length(const svn_diff_hunk_t *hunk);
+
+/** Return the number of lines of leading context of @a hunk,
+ * i.e. the number of lines starting with ' ' before the first line
+ * that starts with a '+' or '-'.
+ * @since New in 1.7. */
+svn_linenum_t
+svn_diff_hunk_get_leading_context(const svn_diff_hunk_t *hunk);
+
+/** Return the number of lines of trailing context of @a hunk,
+ * i.e. the number of lines starting with ' ' after the last line
+ * that starts with a '+' or '-'.
+ * @since New in 1.7. */
+svn_linenum_t
+svn_diff_hunk_get_trailing_context(const svn_diff_hunk_t *hunk);
+
+/**
+ * Data type to manage parsing of properties in patches.
+ * API users should not allocate structures of this type directly.
+ *
+ * @since New in 1.7. */
+typedef struct svn_prop_patch_t {
+  const char *name;
+
+  /** Represents the operation performed on the property */
+  svn_diff_operation_kind_t operation;
+
+  /**
+   * An array containing an svn_diff_hunk_t object for each hunk parsed
+   * from the patch associated with our property name */
+  apr_array_header_t *hunks;
+} svn_prop_patch_t;
+
+/**
+ * Data type to manage parsing of patches.
+ * API users should not allocate structures of this type directly.
+ *
+ * @since New in 1.7. */
+typedef struct svn_patch_t {
+  /**
+   * The old and new file names as retrieved from the patch file.
+   * These paths are UTF-8 encoded and canonicalized, but otherwise
+   * left unchanged from how they appeared in the patch file. */
+  const char *old_filename;
+  const char *new_filename;
+
+  /**
+   * An array containing an svn_diff_hunk_t object for each hunk parsed
+   * from the patch. */
+  apr_array_header_t *hunks;
+
+  /**
+   * A hash table keyed by property names containing svn_prop_patch_t
+   * object for each property parsed from the patch. */
+  apr_hash_t *prop_patches;
+
+  /**
+   * Represents the operation performed on the file. */
+  svn_diff_operation_kind_t operation;
+
+  /**
+   * Indicates whether the patch is being interpreted in reverse. */
+  svn_boolean_t reverse;
+} svn_patch_t;
+
+/* An opaque type representing an open patch file.
+ *
+ * @since New in 1.7. */
+typedef struct svn_patch_file_t svn_patch_file_t;
+
+/* Open @a patch_file at @a local_abspath.
+ * Allocate @a patch_file in @a result_pool.
+ *
+ * @since New in 1.7. */
+svn_error_t *
+svn_diff_open_patch_file(svn_patch_file_t **patch_file,
+                         const char *local_abspath,
+                         apr_pool_t *result_pool);
+
+/**
+ * Return the next @a *patch in @a patch_file.
+ * If no patch can be found, set @a *patch to NULL.
+ * If @a reverse is TRUE, invert the patch while parsing it.
+ * If @a ignore_whitespace is TRUE, allow patches with no leading
+ * whitespace to be parsed.
+ * Allocate results in @a result_pool.
+ * Use @a scratch_pool for all other allocations.
+ *
+ * @since New in 1.7. */
+svn_error_t *
+svn_diff_parse_next_patch(svn_patch_t **patch,
+                          svn_patch_file_t *patch_file,
+                          svn_boolean_t reverse,
+                          svn_boolean_t ignore_whitespace,
+                          apr_pool_t *result_pool,
+                          apr_pool_t *scratch_pool);
+
+/**
+ * Dispose of @a patch_file.
+ * Use @a scratch_pool for all temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_diff_close_patch_file(svn_patch_file_t *patch_file,
+                          apr_pool_t *scratch_pool);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: trunk/GME/Include/subversion/svn_dirent_uri.h
==============================================================================
--- trunk/GME/Include/subversion/svn_dirent_uri.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_dirent_uri.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,47 +1,127 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
  * @file svn_dirent_uri.h
- * @brief A library to manipulate URIs and directory entries.
+ * @brief A library to manipulate URIs, relative paths and directory entries.
+ *
+ * This library makes a clear distinction between several path formats:
  *
- * This library makes a clear distinction between directory entries (dirents)
- * and URIs where:
- *  - a dirent is a path on (local) disc or a UNC path (Windows)
- *    examples: "/foo/bar", "X:/temp", "//server/share"
- *  - a URI is a path in a repository or a URL
- *    examples: "/trunk/README", "http://hostname/svn/repos"
+ *  - a dirent is a path on (local) disc or a UNC path (Windows) in
+ *    either relative or absolute format.
+ *    Examples:
+ *       "/foo/bar", "X:/temp", "//server/share", "A:/" (Windows only)
+ *    But not:
+ *       "http://server"
+ *
+ * - a uri, for our purposes, is a percent-encoded, absolute path
+ *    (URI) that starts with a schema definition.  In practice, these
+ *    tend to look like URLs, but never carry query strings.
+ *    Examples:
+ *       "http://server", "file:///path/to/repos",
+ *       "svn+ssh://user@host:123/My%20Stuff/file.doc"
+ *    But not:
+ *       "file", "dir/file", "A:/dir", "/My%20Stuff/file.doc"
+ *
+ *  - a relative path (relpath) is an unrooted path that can be joined
+ *    to any other relative path, uri or dirent. A relative path is
+ *    never rooted/prefixed by a '/'.
+ *    Examples:
+ *       "file", "dir/file", "dir/subdir/../file"
+ *    But not:
+ *       "/file", "http://server/file"
  *
  * This distinction is needed because on Windows we have to handle some
  * dirents and URIs differently. Since it's not possible to determine from
  * the path string if it's a dirent or a URI, it's up to the API user to
  * make this choice. See also issue #2028.
  *
- * Nearly all the @c svn_dirent_xxx functions expect paths passed into them
- * to be in canonical form.  The only functions which do *not* have such 
- * expectations are:
+ * All of these functions expect paths passed into them to be in canonical
+ * form, except:
  *
  *    - @c svn_dirent_canonicalize()
  *    - @c svn_dirent_is_canonical()
  *    - @c svn_dirent_internal_style()
- *    - @c svn_dirent_local_style()
- *
- * ### TODO: add description in line with svn_path.h, once more functions
- * are moved.
- * ### END TODO
+ *    - @c svn_relpath_canonicalize()
+ *    - @c svn_relpath_is_canonical()
+ *    - @c svn_relpath__internal_style()
+ *    - @c svn_uri_canonicalize()
+ *    - @c svn_uri_is_canonical()
+ *
+ * The Subversion codebase also recognizes some other classes of path:
+ *
+ *  - A Subversion filesystem path (fspath) -- otherwise known as a
+ *    path within a repository -- is a path relative to the root of
+ *    the repository filesystem, that starts with a slash ("/").  The
+ *    rules for a fspath are the same as for a relpath except for the
+ *    leading '/'.  A fspath never ends with '/' except when the whole
+ *    path is just '/'.  The fspath API is private (see
+ *    private/svn_fspath.h).
+ *
+ *  - A URL path (urlpath) is just the path part of a URL (the part
+ *    that follows the schema, username, hostname, and port).  These
+ *    are also like relpaths, except that they have a leading slash
+ *    (like fspaths) and are URI-encoded.  The urlpath API is also
+ *    private (see private/svn_fspath.h)
+ *    Example:
+ *       "/svn/repos/trunk/README",
+ *       "/svn/repos/!svn/bc/45/file%20with%20spaces.txt"
+ *
+ * So, which path API is appropriate for your use-case?
+ *
+ *  - If your path refers to a local file, directory, symlink, etc. of
+ *    the sort that you can examine and operate on with other software
+ *    on your computer, it's a dirent.
+ *
+ *  - If your path is a full URL -- with a schema, hostname (maybe),
+ *    and path portion -- it's a uri.
+ *
+ *  - If your path is relative, and is somewhat ambiguous unless it's
+ *    joined to some other more explicit (possible absolute) base
+ *    (such as a dirent or URL), it's a relpath.
+ *
+ *  - If your path is the virtual path of a versioned object inside a
+ *    Subversion repository, it could be one of two different types of
+ *    paths.  We'd prefer to use relpaths (relative to the root
+ *    directory of the virtual repository filesystem) for that stuff,
+ *    but some legacy code uses fspaths.  You'll need to figure out if
+ *    your code expects repository paths to have a leading '/' or not.
+ *    If so, they are fspaths; otherwise they are relpaths.
+ *
+ *  - If your path refers only to the path part of URL -- as if
+ *    someone hacked off the initial schema and hostname portion --
+ *    it's a urlpath.  To date, the ra_dav modules are the only ones
+ *    within Subversion that make use of urlpaths, and this is because
+ *    WebDAV makes heavy use of that form of path specification.
+ *
+ * When translating between local paths (dirents) and uris code should
+ * always go via the relative path format, perhaps by truncating a
+ * parent portion from a path with svn_*_skip_ancestor(), or by
+ * converting portions to basenames and then joining to existing
+ * paths.
+ *
+ * SECURITY WARNING: If a path that is received from an untrusted
+ * source -- such as from the network -- is converted to a dirent it
+ * should be tested with svn_dirent_is_under_root() before you can
+ * assume the path to be a safe local path.
  */
 
 #ifndef SVN_DIRENT_URI_H
@@ -59,6 +139,7 @@
 
 
 /** Convert @a dirent from the local style to the canonical internal style.
+ * "Local style" means native path separators and "." for the empty path.
  *
  * @since New in 1.6.
  */
@@ -66,7 +147,9 @@
 svn_dirent_internal_style(const char *dirent,
                           apr_pool_t *pool);
 
-/** Convert @a dirent from the canonical internal style to the local style.
+/** Convert @a dirent from the internal style to the local style.
+ * "Local style" means native path separators and "." for the empty path.
+ * If the input is not canonical, the output may not be canonical.
  *
  * @since New in 1.6.
  */
@@ -74,6 +157,16 @@
 svn_dirent_local_style(const char *dirent,
                        apr_pool_t *pool);
 
+/** Convert @a relpath from the local style to the canonical internal style.
+ * "Local style" means native path separators and "." for the empty path.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_relpath__internal_style(const char *relpath,
+                            apr_pool_t *pool);
+
+
 /** Join a base dirent (@a base) with a component (@a component), allocated in
  * @a pool.
  *
@@ -112,10 +205,41 @@
                      const char *base,
                      ...);
 
+/** Join a base relpath (@a base) with a component (@a component), allocating
+ * the result in @a pool. @a component need not be a single component.
+ *
+ * If either @a base or @a component is the empty path, then the other
+ * argument will be copied and returned.  If both are the empty path the
+ * empty path is returned.
+ *
+ * @since New in 1.7.
+ */
+char *
+svn_relpath_join(const char *base,
+                 const char *component,
+                 apr_pool_t *pool);
+
+/** Gets the name of the specified canonicalized @a dirent as it is known
+ * within its parent directory. If the @a dirent is root, return "". The
+ * returned value will not have slashes in it.
+ *
+ * Example: svn_dirent_basename("/foo/bar") -> "bar"
+ *
+ * The returned basename will be allocated in @a pool. If @a pool is NULL
+ * a pointer to the basename in @a dirent is returned.
+ *
+ * @note If an empty string is passed, then an empty string will be returned.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_dirent_basename(const char *dirent,
+                    apr_pool_t *pool);
+
 /** Get the dirname of the specified canonicalized @a dirent, defined as
  * the dirent with its basename removed.
  *
- * If @a dirent is root  ("/", "X:/", "//server/share/"), it is returned
+ * If @a dirent is root  ("/", "X:/", "//server/share/") or "", it is returned
  * unchanged.
  *
  * The returned dirname will be allocated in @a pool.
@@ -126,8 +250,145 @@
 svn_dirent_dirname(const char *dirent,
                    apr_pool_t *pool);
 
+/** Divide the canonicalized @a dirent into @a *dirpath and @a
+ * *base_name, allocated in @a pool.
+ *
+ * If @a dirpath or @a base_name is NULL, then don't set that one.
+ *
+ * Either @a dirpath or @a base_name may be @a dirent's own address, but they
+ * may not both be the same address, or the results are undefined.
+ *
+ * If @a dirent has two or more components, the separator between @a dirpath
+ * and @a base_name is not included in either of the new names.
+ *
+ * Examples:
+ *             - <pre>"/foo/bar/baz"  ==>  "/foo/bar" and "baz"</pre>
+ *             - <pre>"/bar"          ==>  "/"  and "bar"</pre>
+ *             - <pre>"/"             ==>  "/"  and ""</pre>
+ *             - <pre>"bar"           ==>  ""   and "bar"</pre>
+ *             - <pre>""              ==>  ""   and ""</pre>
+ *  Windows:   - <pre>"X:/"           ==>  "X:/" and ""</pre>
+ *             - <pre>"X:/foo"        ==>  "X:/" and "foo"</pre>
+ *             - <pre>"X:foo"         ==>  "X:" and "foo"</pre>
+ *  Posix:     - <pre>"X:foo"         ==>  ""   and "X:foo"</pre>
+ *
+ * @since New in 1.7.
+ */
+void
+svn_dirent_split(const char **dirpath,
+                 const char **base_name,
+                 const char *dirent,
+                 apr_pool_t *pool);
+
+/** Divide the canonicalized @a relpath into @a *dirpath and @a
+ * *base_name, allocated in @a pool.
+ *
+ * If @a dirpath or @a base_name is NULL, then don't set that one.
+ *
+ * Either @a dirpath or @a base_name may be @a relpaths's own address, but
+ * they may not both be the same address, or the results are undefined.
+ *
+ * If @a relpath has two or more components, the separator between @a dirpath
+ * and @a base_name is not included in either of the new names.
+ *
+ *   examples:
+ *             - <pre>"foo/bar/baz"  ==>  "foo/bar" and "baz"</pre>
+ *             - <pre>"bar"          ==>  ""  and "bar"</pre>
+ *             - <pre>""              ==>  ""   and ""</pre>
+ *
+ * @since New in 1.7.
+ */
+void
+svn_relpath_split(const char **dirpath,
+                  const char **base_name,
+                  const char *relpath,
+                  apr_pool_t *pool);
+
+/** Get the basename of the specified canonicalized @a relpath.  The
+ * basename is defined as the last component of the relpath.  If the @a
+ * relpath has only one component then that is returned. The returned
+ * value will have no slashes in it.
+ *
+ * Example: svn_relpath_basename("/trunk/foo/bar") -> "bar"
+ *
+ * The returned basename will be allocated in @a pool. If @a
+ * pool is NULL a pointer to the basename in @a relpath is returned.
+ *
+ * @note If an empty string is passed, then an empty string will be returned.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_relpath_basename(const char *relpath,
+                     apr_pool_t *pool);
+
+/** Get the dirname of the specified canonicalized @a relpath, defined as
+ * the relpath with its basename removed.
+ *
+ * If @a relpath is empty, "" is returned.
+ *
+ * The returned relpath will be allocated in @a pool.
+ *
+ * @since New in 1.7.
+ */
+char *
+svn_relpath_dirname(const char *relpath,
+                    apr_pool_t *pool);
+
+
+/** Divide the canonicalized @a uri into a uri @a *dirpath and a
+ * (URI-decoded) relpath @a *base_name, allocated in @a pool.
+ *
+ * If @a dirpath or @a base_name is NULL, then don't set that one.
+ *
+ * Either @a dirpath or @a base_name may be @a uri's own address, but they
+ * may not both be the same address, or the results are undefined.
+ *
+ * If @a uri has two or more components, the separator between @a dirpath
+ * and @a base_name is not included in either of the new names.
+ *
+ * Examples:
+ *   - <pre>"http://server/foo/bar"  ==>  "http://server/foo" and "bar"</pre>
+ *
+ * @since New in 1.7.
+ */
+void
+svn_uri_split(const char **dirpath,
+              const char **base_name,
+              const char *uri,
+              apr_pool_t *pool);
+
+/** Get the (URI-decoded) basename of the specified canonicalized @a
+ * uri.  The basename is defined as the last component of the uri.  If
+ * the @a uri is root then that is returned.  Otherwise, the returned
+ * value will have no slashes in it.
+ *
+ * Example: svn_uri_basename("http://server/foo/bar") -> "bar"
+ *
+ * The returned basename will be allocated in @a pool.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_uri_basename(const char *uri,
+                 apr_pool_t *pool);
+
+/** Get the dirname of the specified canonicalized @a uri, defined as
+ * the uri with its basename removed.
+ *
+ * If @a uri is root (e.g. "http://server"), it is returned
+ * unchanged.
+ *
+ * The returned dirname will be allocated in @a pool.
+ *
+ * @since New in 1.7.
+ */
+char *
+svn_uri_dirname(const char *uri,
+                apr_pool_t *pool);
+
 /** Return TRUE if @a dirent is considered absolute on the platform at
- * hand. E.g. '/foo' on posix or 'X:/foo', '//server/share/foo' 
+ * hand. E.g. '/foo' on Posix platforms or 'X:/foo', '//server/share/foo'
  * on Windows.
  *
  * @since New in 1.6.
@@ -136,8 +397,13 @@
 svn_dirent_is_absolute(const char *dirent);
 
 /** Return TRUE if @a dirent is considered a root directory on the platform
- * at hand. E.g. '/' on posix platforms or 'X:/', '//server/share'
- * on Windows.
+ * at hand.
+ * E.g.:
+ *  On Posix:   '/'
+ *  On Windows: '/', 'X:/', '//server/share', 'X:'
+ *
+ * Note that on Windows '/' and 'X:' are roots, but paths starting with this
+ * root are not absolute.
  *
  * @since New in 1.5.
  */
@@ -145,18 +411,27 @@
 svn_dirent_is_root(const char *dirent,
                    apr_size_t len);
 
+/** Return TRUE if @a uri is a root URL (e.g., "http://server").
+ *
+ * @since New in 1.7
+ */
+svn_boolean_t
+svn_uri_is_root(const char *uri,
+                apr_size_t len);
+
 /** Return a new dirent like @a dirent, but transformed such that some types
  * of dirent specification redundancies are removed.
  *
- * This involves collapsing redundant "/./" elements, removing
- * multiple adjacent separator characters, removing trailing
- * separator characters, and possibly other semantically inoperative
- * transformations.
+ * This involves:
+ *   - collapsing redundant "/./" elements
+ *   - removing multiple adjacent separator characters
+ *   - removing trailing separator characters
+ *   - converting the server name of a UNC path to lower case (on Windows)
+ *   - converting a drive letter to upper case (on Windows)
  *
- * Convert the server name of UNC paths lowercase on Windows.
+ * and possibly other semantically inoperative transformations.
  *
- * The returned dirent may be statically allocated, equal to @a dirent, or
- * allocated from @a pool.
+ * The returned dirent may be allocated statically or from @a pool.
  *
  * @since New in 1.6.
  */
@@ -164,6 +439,49 @@
 svn_dirent_canonicalize(const char *dirent,
                         apr_pool_t *pool);
 
+
+/** Return a new relpath like @a relpath, but transformed such that some types
+ * of relpath specification redundancies are removed.
+ *
+ * This involves:
+ *   - collapsing redundant "/./" elements
+ *   - removing multiple adjacent separator characters
+ *   - removing trailing separator characters
+ *
+ * and possibly other semantically inoperative transformations.
+ *
+ * The returned relpath may be allocated statically or from @a pool.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_relpath_canonicalize(const char *relpath,
+                         apr_pool_t *pool);
+
+
+/** Return a new uri like @a uri, but transformed such that some types
+ * of uri specification redundancies are removed.
+ *
+ * This involves:
+ *   - collapsing redundant "/./" elements
+ *   - removing multiple adjacent separator characters
+ *   - removing trailing separator characters
+ *   - normalizing the escaping of the path component by unescaping
+ *     characters that don't need escaping and escaping characters that do
+ *     need escaping but weren't
+ *   - removing the port number if it is the default port number (80 for
+ *     http, 443 for https, 3690 for svn)
+ *
+ * and possibly other semantically inoperative transformations.
+ *
+ * The returned uri may be allocated statically or from @a pool.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_uri_canonicalize(const char *uri,
+                     apr_pool_t *pool);
+
 /** Return @c TRUE iff @a dirent is canonical.  Use @a pool for temporary
  * allocations.
  *
@@ -171,12 +489,31 @@
  * "looks exactly the same as @c svn_dirent_canonicalize() would make
  * it look".
  *
+ * @see svn_dirent_canonicalize()
  * @since New in 1.6.
  */
 svn_boolean_t
 svn_dirent_is_canonical(const char *dirent,
                         apr_pool_t *pool);
 
+/** Return @c TRUE iff @a relpath is canonical.
+ *
+ * @see svn_relpath_canonicalize()
+ * @since New in 1.7.
+ */
+svn_boolean_t
+svn_relpath_is_canonical(const char *relpath);
+
+/** Return @c TRUE iff @a uri is canonical.  Use @a pool for temporary
+ * allocations.
+ *
+ * @see svn_uri_canonicalize()
+ * @since New in 1.7.
+ */
+svn_boolean_t
+svn_uri_is_canonical(const char *uri,
+                     apr_pool_t *pool);
+
 /** Return the longest common dirent shared by two canonicalized dirents,
  * @a dirent1 and @a dirent2.  If there's no common ancestor, return the
  * empty path.
@@ -188,8 +525,35 @@
                                 const char *dirent2,
                                 apr_pool_t *pool);
 
+/** Return the longest common path shared by two relative paths,
+ * @a relpath1 and @a relpath2.  If there's no common ancestor, return the
+ * empty path.
+ *
+ * @since New in 1.7.
+ */
+char *
+svn_relpath_get_longest_ancestor(const char *relpath1,
+                                 const char *relpath2,
+                                 apr_pool_t *pool);
+
+/** Return the longest common path shared by two canonicalized uris,
+ * @a uri1 and @a uri2.  If there's no common ancestor, return the
+ * empty path.  In order for two URLs to have a common ancestor, they
+ * must (a) have the same protocol (since two URLs with the same path
+ * but different protocols may point at completely different
+ * resources), and (b) share a common ancestor in their path
+ * component, i.e. 'protocol://' is not a sufficient ancestor.
+ *
+ * @since New in 1.7.
+ */
+char *
+svn_uri_get_longest_ancestor(const char *uri1,
+                             const char *uri2,
+                             apr_pool_t *pool);
+
 /** Convert @a relative canonicalized dirent to an absolute dirent and
  * return the results in @a *pabsolute, allocated in @a pool.
+ * Raise SVN_ERR_BAD_FILENAME if the absolute dirent cannot be determined.
  *
  * @since New in 1.6.
  */
@@ -198,25 +562,225 @@
                         const char *relative,
                         apr_pool_t *pool);
 
-/**
- * This function is similar as @c svn_path_is_child, except that it supports
- * Windows dirents and UNC paths on Windows.
+/** Similar to svn_uri_skip_ancestor(), except that if @a child_uri is
+ * the same as @a parent_uri, it is not considered a child, so the result
+ * is @c NULL; an empty string is never returned.
+ */
+const char *
+svn_uri__is_child(const char *parent_uri,
+                  const char *child_uri,
+                  apr_pool_t *pool);
+
+/** Similar to svn_dirent_skip_ancestor(), except that if @a child_dirent is
+ * the same as @a parent_dirent, it is not considered a child, so the result
+ * is @c NULL; an empty string is never returned.
+ *
+ * ### TODO: Deprecate, as the semantics are trivially
+ * obtainable from *_skip_ancestor().
  *
  * @since New in 1.6.
  */
 const char *
-svn_dirent_is_child(const char *dirent1,
-                    const char *dirent2,
+svn_dirent_is_child(const char *parent_dirent,
+                    const char *child_dirent,
                     apr_pool_t *pool);
 
-/** Return TRUE if @a dirent1 is an ancestor of @a dirent2 or the dirents are
- * equal and FALSE otherwise.
+/** Similar to svn_relpath_skip_ancestor(), except that if @a child_relpath is
+ * the same as @a parent_relpath, it is not considered a child, so the result
+ * is @c NULL; an empty string is never returned.
+ */
+const char *
+svn_relpath__is_child(const char *parent_relpath,
+                      const char *child_relpath,
+                      apr_pool_t *pool);
+
+/** Return TRUE if @a parent_dirent is an ancestor of @a child_dirent or
+ * the dirents are equal, and FALSE otherwise.
+ *
+ * ### TODO: Deprecate, as the semantics are trivially
+ * obtainable from *_skip_ancestor().
  *
  * @since New in 1.6.
  */
 svn_boolean_t
-svn_dirent_is_ancestor(const char *path1,
-                       const char *path2);
+svn_dirent_is_ancestor(const char *parent_dirent,
+                       const char *child_dirent);
+
+/** Return TRUE if @a parent_relpath is an ancestor of @a child_relpath or
+ * the relpaths are equal, and FALSE otherwise.
+ */
+svn_boolean_t
+svn_relpath__is_ancestor(const char *parent_relpath,
+                         const char *child_relpath);
+
+/** Return TRUE if @a parent_uri is an ancestor of @a child_uri or
+ * the uris are equal, and FALSE otherwise.
+ */
+svn_boolean_t
+svn_uri__is_ancestor(const char *parent_uri,
+                     const char *child_uri);
+
+
+/** Return the relative path part of @a child_dirent that is below
+ * @a parent_dirent, or just "" if @a parent_dirent is equal to
+ * @a child_dirent. If @a child_dirent is not below or equal to
+ * @a parent_dirent, return NULL.
+ *
+ * If one of @a parent_dirent and @a child_dirent is absolute and
+ * the other relative, return NULL.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_dirent_skip_ancestor(const char *parent_dirent,
+                         const char *child_dirent);
+
+/** Return the relative path part of @a child_relpath that is below
+ * @a parent_relpath, or just "" if @a parent_relpath is equal to
+ * @a child_relpath. If @a child_relpath is not below or equal to
+ * @a parent_relpath, return NULL.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_relpath_skip_ancestor(const char *parent_relpath,
+                          const char *child_relpath);
+
+/** Return the URI-decoded relative path of @a child_uri that is below
+ * @a parent_uri, or just "" if @a parent_uri is equal to @a child_uri. If
+ * @a child_uri is not below or equal to @a parent_uri, return NULL.
+ * Allocate the result in @a result_pool.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_uri_skip_ancestor(const char *parent_uri,
+                      const char *child_uri,
+                      apr_pool_t *result_pool);
+
+/** Find the common prefix of the canonicalized dirents in @a targets
+ * (an array of <tt>const char *</tt>'s), and remove redundant dirents if @a
+ * remove_redundancies is TRUE.
+ *
+ *   - Set @a *pcommon to the absolute dirent of the dirent common to
+ *     all of the targets.  If the targets have no common prefix (e.g.
+ *     "C:/file" and "D:/file" on Windows), set @a *pcommon to the empty
+ *     string.
+ *
+ *   - If @a pcondensed_targets is non-NULL, set @a *pcondensed_targets
+ *     to an array of targets relative to @a *pcommon, and if
+ *     @a remove_redundancies is TRUE, omit any dirents that are
+ *     descendants of another dirent in @a targets.  If *pcommon
+ *     is empty, @a *pcondensed_targets will contain absolute dirents;
+ *     redundancies can still be removed.  If @a pcondensed_targets is NULL,
+ *     leave it alone.
+ *
+ * Else if there is exactly one target, then
+ *
+ *   - Set @a *pcommon to that target, and
+ *
+ *   - If @a pcondensed_targets is non-NULL, set @a *pcondensed_targets
+ *     to an array containing zero elements.  Else if
+ *     @a pcondensed_targets is NULL, leave it alone.
+ *
+ * If there are no items in @a targets, set @a *pcommon and (if
+ * applicable) @a *pcondensed_targets to @c NULL.
+ *
+ * Allocates @a *pcommon and @a *targets in @a result_pool. All
+ * intermediate allocations will be performed in @a scratch_pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_dirent_condense_targets(const char **pcommon,
+                            apr_array_header_t **pcondensed_targets,
+                            const apr_array_header_t *targets,
+                            svn_boolean_t remove_redundancies,
+                            apr_pool_t *result_pool,
+                            apr_pool_t *scratch_pool);
+
+/** Find the common prefix of the canonicalized uris in @a targets
+ * (an array of <tt>const char *</tt>'s), and remove redundant uris if @a
+ * remove_redundancies is TRUE.
+ *
+ *   - Set @a *pcommon to the common base uri of all of the targets.
+ *     If the targets have no common prefix (e.g. "http://srv1/file"
+ *     and "http://srv2/file"), set @a *pcommon to the empty
+ *     string.
+ *
+ *   - If @a pcondensed_targets is non-NULL, set @a *pcondensed_targets
+ *     to an array of URI-decoded targets relative to @a *pcommon, and
+ *     if @a remove_redundancies is TRUE, omit any uris that are
+ *     descendants of another uri in @a targets.  If *pcommon is
+ *     empty, @a *pcondensed_targets will contain absolute uris;
+ *     redundancies can still be removed.  If @a pcondensed_targets is
+ *     NULL, leave it alone.
+ *
+ * Else if there is exactly one target, then
+ *
+ *   - Set @a *pcommon to that target, and
+ *
+ *   - If @a pcondensed_targets is non-NULL, set @a *pcondensed_targets
+ *     to an array containing zero elements.  Else if
+ *     @a pcondensed_targets is NULL, leave it alone.
+ *
+ * If there are no items in @a targets, set @a *pcommon and (if
+ * applicable) @a *pcondensed_targets to @c NULL.
+ *
+ * Allocate @a *pcommon and @a *targets in @a result_pool. Temporary
+ * allocations will be performed in @a scratch_pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_uri_condense_targets(const char **pcommon,
+                         apr_array_header_t **pcondensed_targets,
+                         const apr_array_header_t *targets,
+                         svn_boolean_t remove_redundancies,
+                         apr_pool_t *result_pool,
+                         apr_pool_t *scratch_pool);
+
+/** Join @a path onto @a base_path, checking that @a path does not attempt
+ * to traverse above @a base_path. If @a path or any ".." component within
+ * it resolves to a path above @a base_path, or if @a path is an absolute
+ * path, then set @a *under_root to @c FALSE. Otherwise, set @a *under_root
+ * to @c TRUE and, if @a result_path is not @c NULL, set @a *result_path to
+ * the resulting path, allocated in @a result_pool.
+ *
+ * @a path need not be canonical. @a base_path must be canonical and
+ * @a *result_path will be canonical.
+ *
+ * Note: Use of this function is strongly encouraged. Do not roll your own.
+ * (http://cve.mitre.org/cgi-bin/cvename.cgi?name=2007-3846)
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_dirent_is_under_root(svn_boolean_t *under_root,
+                         const char **result_path,
+                         const char *base_path,
+                         const char *path,
+                         apr_pool_t *result_pool);
+
+/** Set @a *dirent to the path corresponding to the file:// URL @a url, using
+ * the platform-specific file:// rules.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_uri_get_dirent_from_file_url(const char **dirent,
+                                 const char *url,
+                                 apr_pool_t *pool);
+
+/** Set @a *url to a file:// URL, corresponding to @a dirent using the
+ * platform specific dirent and file:// rules.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_uri_get_file_url_from_dirent(const char **url,
+                                 const char *dirent,
+                                 apr_pool_t *pool);
 
 #ifdef __cplusplus
 }

Modified: trunk/GME/Include/subversion/svn_dso.h
==============================================================================
--- trunk/GME/Include/subversion/svn_dso.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_dso.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2006, 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -53,20 +58,8 @@
 svn_error_t *
 svn_dso_initialize2(void);
 
-/**
- * Initialize the DSO loading routines.
- *
- * @note This should be called prior to the creation of any pool that
- *       is passed to a function that comes from a DSO, otherwise you
- *       risk having the DSO unloaded before all pool cleanup callbacks
- *       that live in the DSO have been executed.  If it is not called
- *       prior to @c svn_dso_load being used for the first time there
- *       will be a best effort attempt made to initialize the subsystem,
- *       but it will not be entirely thread safe and it risks running
- *       into the previously mentioned problems with DSO unloading and
- *       pool cleanup callbacks.
- *
- * Calls svn_dso_initialize2(void) upon error aborts.
+/** The same as svn_dso_initialize2(), except that if there is an error this
+ * calls abort() instead of returning the error.
  *
  * @deprecated Provided for backwards compatibility with the 1.5 API.
  *
@@ -80,9 +73,9 @@
 #if APR_HAS_DSO
 
 /**
- * Attempt to load @a libname, returning it in @a dso.
+ * Attempt to load @a libname, returning it in @a *dso.
  *
- * If @a libname cannot be loaded set @a dso to NULL and return
+ * If @a libname cannot be loaded set @a *dso to NULL and return
  * @c SVN_NO_ERROR.
  *
  * @note Due to pool lifetime issues DSOs are all loaded into a global

Modified: trunk/GME/Include/subversion/svn_error.h
==============================================================================
--- trunk/GME/Include/subversion/svn_error.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_error.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -19,9 +24,6 @@
  * @brief Common exception handling for Subversion.
  */
 
-
-
-
 #ifndef SVN_ERROR_H
 #define SVN_ERROR_H
 
@@ -40,6 +42,14 @@
 extern "C" {
 #endif /* __cplusplus */
 
+
+/* For the Subversion developers, this #define turns on extended "stack
+   traces" of any errors that get thrown. See the SVN_ERR() macro.  */
+#ifdef SVN_DEBUG
+#define SVN_ERR__TRACING
+#endif
+
+
 /** the best kind of (@c svn_error_t *) ! */
 #define SVN_NO_ERROR   0
 
@@ -47,12 +57,6 @@
    there for the reasons why. */
 #include "svn_error_codes.h"
 
-/** Set the error location for debug mode. */
-void
-svn_error__locate(const char *file,
-                  long line);
-
-
 /** Put an English description of @a statcode into @a buf and return @a buf,
  * NULL-terminated. @a statcode is either an svn error or apr error.
  */
@@ -106,10 +110,6 @@
                  svn_error_t *child,
                  const char *message);
 
-/** Wrapper macro to collect file and line information */
-#define svn_error_create \
-  (svn_error__locate(__FILE__,__LINE__), (svn_error_create))
-
 /** Create an error structure with the given @a apr_err and @a child,
  * with a printf-style error message produced by passing @a fmt, using
  * apr_psprintf().
@@ -121,10 +121,6 @@
                   ...)
   __attribute__ ((format(printf, 3, 4)));
 
-/** Wrapper macro to collect file and line information */
-#define svn_error_createf \
-  (svn_error__locate(__FILE__,__LINE__), (svn_error_createf))
-
 /** Wrap a @a status from an APR function.  If @a fmt is NULL, this is
  * equivalent to svn_error_create(status,NULL,NULL).  Otherwise,
  * the error message is constructed by formatting @a fmt and the
@@ -139,10 +135,6 @@
                    ...)
        __attribute__((format(printf, 2, 3)));
 
-/** Wrapper macro to collect file and line information */
-#define svn_error_wrap_apr \
-  (svn_error__locate(__FILE__,__LINE__), (svn_error_wrap_apr))
-
 /** A quick n' easy way to create a wrapped exception with your own
  * message, before throwing it up the stack.  (It uses all of the
  * @a child's fields.)
@@ -151,15 +143,15 @@
 svn_error_quick_wrap(svn_error_t *child,
                      const char *new_msg);
 
-/** Wrapper macro to collect file and line information */
-#define svn_error_quick_wrap \
-  (svn_error__locate(__FILE__,__LINE__), (svn_error_quick_wrap))
-
 /** Compose two errors, returning the composition as a brand new error
  * and consuming the original errors.  Either or both of @a err1 and
  * @a err2 may be @c SVN_NO_ERROR.  If both are not @c SVN_NO_ERROR,
  * @a err2 will follow @a err1 in the chain of the returned error.
  *
+ * Either @a err1 or @a err2 can be functions that return svn_error_t*
+ * but if both are functions they can be evaluated in either order as
+ * per the C language rules.
+ *
  * @since New in 1.6.
  */
 svn_error_t *
@@ -169,6 +161,10 @@
 /** Add @a new_err to the end of @a chain's chain of errors.  The @a new_err
  * chain will be copied into @a chain's pool and destroyed, so @a new_err
  * itself becomes invalid after this function.
+ *
+ * Either @a chain or @a new_err can be functions that return svn_error_t*
+ * but if both are functions they can be evaluated in either order as
+ * per the C language rules.
  */
 void
 svn_error_compose(svn_error_t *chain,
@@ -183,6 +179,17 @@
 svn_error_t *
 svn_error_root_cause(svn_error_t *err);
 
+/** Return the first error in @a err's chain that has an error code @a
+ * apr_err or #SVN_NO_ERROR if there is no error with that code.  The
+ * returned error should @em not be cleared as it shares memory with @a err.
+ *
+ * If @a err is #SVN_NO_ERROR, return #SVN_NO_ERROR.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_error_find_cause(svn_error_t *err, apr_status_t apr_err);
+
 /** Create a new error that is a deep copy of @a err and return it.
  *
  * @since New in 1.2.
@@ -203,6 +210,24 @@
 svn_error_clear(svn_error_t *error);
 
 
+#if defined(SVN_DEBUG)
+/** Set the error location for debug mode. */
+void
+svn_error__locate(const char *file,
+                  long line);
+
+/* Wrapper macros to collect file and line information */
+#define svn_error_create \
+  (svn_error__locate(__FILE__,__LINE__), (svn_error_create))
+#define svn_error_createf \
+  (svn_error__locate(__FILE__,__LINE__), (svn_error_createf))
+#define svn_error_wrap_apr \
+  (svn_error__locate(__FILE__,__LINE__), (svn_error_wrap_apr))
+#define svn_error_quick_wrap \
+  (svn_error__locate(__FILE__,__LINE__), (svn_error_quick_wrap))
+#endif
+
+
 /**
  * Very basic default error handler: print out error stack @a error to the
  * stdio stream @a stream, with each error prefixed by @a prefix; quit and
@@ -236,6 +261,8 @@
  * stdio stream @a stream, prefixed by @a prefix.  Allocations are
  * performed in the error's pool.
  *
+ * @a error may not be @c NULL.
+ *
  * @since New in 1.2.
  */
 void
@@ -264,7 +291,7 @@
  *
  * @code
  *   if (a)
- *     SVN_ERR (some operation);
+ *     SVN_ERR(some operation);
  *   else
  *     foo;
  * @endcode
@@ -275,9 +302,46 @@
   do {                                          \
     svn_error_t *svn_err__temp = (expr);        \
     if (svn_err__temp)                          \
-      return svn_err__temp;                     \
+      return svn_error_trace(svn_err__temp);    \
   } while (0)
 
+/**
+ * A macro for wrapping an error in a source-location trace message.
+ *
+ * This macro can be used when directly returning an already created
+ * error (when not using SVN_ERR, svn_error_create(), etc.) to ensure
+ * that the call stack is recorded correctly.
+ *
+ * @since New in 1.7.
+ */
+#ifdef SVN_ERR__TRACING
+#define SVN_ERR__TRACED "traced call"
+
+#define svn_error_trace(expr)  svn_error_quick_wrap((expr), SVN_ERR__TRACED)
+#else
+#define svn_error_trace(expr)  (expr)
+#endif
+
+/**
+ * Returns an error chain that is based on @a err's error chain but
+ * does not include any error tracing placeholders.  @a err is not
+ * modified, except for any allocations using its pool.
+ *
+ * The returned error chain is allocated from @a err's pool and shares
+ * its message and source filename character arrays.  The returned
+ * error chain should *not* be cleared because it is not a fully
+ * fledged error chain, only clearing @a err should be done to clear
+ * the returned error chain.  If @a err is cleared, then the returned
+ * error chain is unusable.
+ *
+ * @a err can be #SVN_NO_ERROR.  If @a err is not #SVN_NO_ERROR, then
+ * the last link in the error chain must be a non-tracing error, i.e,
+ * a real error.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *svn_error_purge_tracing(svn_error_t *err);
+
 
 /** A statement macro, very similar to @c SVN_ERR.
  *
@@ -308,18 +372,27 @@
 
 /** @} */
 
+
+/** Error groups
+ *
+ * @defgroup svn_error_error_groups Error groups
+ * @{
+ */
+
 /**
  * Return TRUE if @a err is an error specifically related to locking a
  * path in the repository, FALSE otherwise.
  *
- * SVN_ERR_FS_OUT_OF_DATE is in here because it's a non-fatal error
- * that can be thrown when attempting to lock an item.
+ * SVN_ERR_FS_OUT_OF_DATE and SVN_ERR_FS_NOT_FOUND are in here because it's a
+ * non-fatal error that can be thrown when attempting to lock an item.
  *
  * @since New in 1.2.
  */
 #define SVN_ERR_IS_LOCK_ERROR(err)                          \
   (err->apr_err == SVN_ERR_FS_PATH_ALREADY_LOCKED ||        \
-   err->apr_err == SVN_ERR_FS_OUT_OF_DATE)                  \
+   err->apr_err == SVN_ERR_FS_NOT_FOUND           ||        \
+   err->apr_err == SVN_ERR_FS_OUT_OF_DATE         ||        \
+   err->apr_err == SVN_ERR_FS_BAD_LOCK_TOKEN)
 
 /**
  * Return TRUE if @a err is an error specifically related to unlocking
@@ -335,6 +408,25 @@
    err->apr_err == SVN_ERR_RA_NOT_LOCKED ||                 \
    err->apr_err == SVN_ERR_FS_LOCK_EXPIRED)
 
+/** Evaluates to @c TRUE iff @a apr_err (of type #apr_status_t) is in the given
+ * @a category, which should be one of the @c SVN_ERR_*_CATEGORY_START
+ * constants.
+ *
+ * @since New in 1.7.
+ */
+#define SVN_ERROR_IN_CATEGORY(apr_err, category)            \
+    ((category) == ((apr_err) / SVN_ERR_CATEGORY_SIZE) * SVN_ERR_CATEGORY_SIZE)
+
+
+/** @} */
+
+
+/** Internal malfunctions and assertions
+ *
+ * @defgroup svn_error_malfunction_assertion Malfunctions and assertions
+ * @{
+ */
+
 /** Report that an internal malfunction has occurred, and possibly terminate
  * the program.
  *
@@ -351,7 +443,8 @@
  */
 #define SVN_ERR_MALFUNCTION()                                      \
   do {                                                             \
-    return svn_error__malfunction(TRUE, __FILE__, __LINE__, NULL); \
+    return svn_error_trace(svn_error__malfunction(                 \
+                                 TRUE, __FILE__, __LINE__, NULL)); \
   } while (0)
 
 /** Similar to SVN_ERR_MALFUNCTION(), but without the option of returning
@@ -407,6 +500,9 @@
     }                                                           \
   } while (0)
 
+/** Report a "Not implemented" malfunction.  Internal use only. */
+#define SVN__NOT_IMPLEMENTED() \
+  return svn_error__malfunction(TRUE, __FILE__, __LINE__, "Not implemented.")
 
 /** A helper function for the macros that report malfunctions. Handle a
  * malfunction by calling the current "malfunction handler" which may have
@@ -446,6 +542,8 @@
  * The function may alter its behaviour according to compile-time
  * and run-time and even interactive conditions.
  *
+ * @see SVN_ERROR_IN_CATEGORY()
+ *
  * @since New in 1.6.
  */
 typedef svn_error_t *(*svn_error_malfunction_handler_t)
@@ -491,6 +589,8 @@
                                int line,
                                const char *expr);
 
+/** @} */
+
 
 #ifdef __cplusplus
 }

Modified: trunk/GME/Include/subversion/svn_error_codes.h
==============================================================================
--- trunk/GME/Include/subversion/svn_error_codes.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_error_codes.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2009 CollabNet.  All rights reserved.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
  *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -209,6 +214,16 @@
              SVN_ERR_BAD_CATEGORY_START + 12,
              "Invalid character in hex checksum")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_BAD_TOKEN,
+             SVN_ERR_BAD_CATEGORY_START + 13,
+             "Unknown string value of token")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_BAD_CHANGELIST_NAME,
+             SVN_ERR_BAD_CATEGORY_START + 14,
+             "Invalid changelist name")
+
   /* xml errors */
 
   SVN_ERRDEF(SVN_ERR_XML_ATTRIB_NOT_FOUND,
@@ -264,6 +279,11 @@
              SVN_ERR_IO_CATEGORY_START + 6,
              "Write error")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_IO_PIPE_WRITE_ERROR,
+             SVN_ERR_IO_CATEGORY_START + 7,
+             "Write error in pipe")
+
   /* stream errors */
 
   SVN_ERRDEF(SVN_ERR_STREAM_UNEXPECTED_EOF,
@@ -278,6 +298,11 @@
              SVN_ERR_STREAM_CATEGORY_START + 2,
              "Unrecognized stream data")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_STREAM_SEEK_NOT_SUPPORTED,
+             SVN_ERR_STREAM_CATEGORY_START + 3,
+             "Stream doesn't support seeking")
+
   /* node errors */
 
   SVN_ERRDEF(SVN_ERR_NODE_UNKNOWN_KIND,
@@ -350,10 +375,18 @@
              SVN_ERR_WC_CATEGORY_START + 6,
              "Invalid lock")
 
-  SVN_ERRDEF(SVN_ERR_WC_NOT_DIRECTORY,
+  /** @since New in 1.7. Previously this error number was used by
+   * #SVN_ERR_WC_NOT_DIRECTORY, which is now an alias for this error. */
+  SVN_ERRDEF(SVN_ERR_WC_NOT_WORKING_COPY,
              SVN_ERR_WC_CATEGORY_START + 7,
              "Path is not a working copy directory")
 
+  /** @deprecated Provided for backward compatibility with the 1.6 API.
+   * Use #SVN_ERR_WC_NOT_WORKING_COPY. */
+  SVN_ERRDEF(SVN_ERR_WC_NOT_DIRECTORY,
+             SVN_ERR_WC_NOT_WORKING_COPY,
+             "Path is not a working copy directory")
+
   SVN_ERRDEF(SVN_ERR_WC_NOT_FILE,
              SVN_ERR_WC_CATEGORY_START + 8,
              "Path is not a working copy file")
@@ -443,7 +476,10 @@
              SVN_ERR_WC_CATEGORY_START + 28,
              "Failed to locate 'copyfrom' path in working copy")
 
-  /** @since New in 1.5. */
+  /** @since New in 1.5.
+   * @deprecated Provided for backward compatibility with the 1.6 API.
+   * This event is not an error, and is now reported
+   * via the standard notification mechanism instead. */
   SVN_ERRDEF(SVN_ERR_WC_CHANGELIST_MOVE,
              SVN_ERR_WC_CATEGORY_START + 29,
              "Moving a path from one changelist to another")
@@ -458,6 +494,47 @@
              SVN_ERR_WC_CATEGORY_START + 31,
              "Cannot move a file external")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_WC_DB_ERROR,
+             SVN_ERR_WC_CATEGORY_START + 32,
+             "Something's amiss with the wc sqlite database")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_WC_MISSING,
+             SVN_ERR_WC_CATEGORY_START + 33,
+             "The working copy is missing")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_WC_NOT_SYMLINK,
+             SVN_ERR_WC_CATEGORY_START + 34,
+             "The specified node is not a symlink")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_WC_PATH_UNEXPECTED_STATUS,
+             SVN_ERR_WC_CATEGORY_START + 35,
+             "The specified path has an unexpected status")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_WC_UPGRADE_REQUIRED,
+             SVN_ERR_WC_CATEGORY_START + 36,
+             "The working copy needs to be upgraded")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_WC_CLEANUP_REQUIRED,
+             SVN_ERR_WC_CATEGORY_START + 37,
+             "Previous operation has not finished; "
+             "run 'cleanup' if it was interrupted")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_WC_INVALID_OPERATION_DEPTH,
+             SVN_ERR_WC_CATEGORY_START + 38,
+             "The operation can not be performed with the specified depth")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_WC_PATH_ACCESS_DENIED,
+             SVN_ERR_WC_CATEGORY_START + 39,
+             "Couldn't open a working copy file because access was denied")
+
   /* fs errors */
 
   SVN_ERRDEF(SVN_ERR_FS_GENERAL,
@@ -679,6 +756,12 @@
              SVN_ERR_FS_CATEGORY_START + 48,
              "Filesystem has no such checksum-representation index record")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_FS_PROP_BASEVALUE_MISMATCH,
+             SVN_ERR_FS_CATEGORY_START + 49,
+             "Property value in filesystem differs from the provided "
+             "base value")
+
   /* repos errors */
 
   SVN_ERRDEF(SVN_ERR_REPOS_LOCKED,
@@ -783,6 +866,11 @@
              SVN_ERR_RA_CATEGORY_START + 10,
              "Repository root URL does not match expected root URL")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_RA_SESSION_URL_MISMATCH,
+             SVN_ERR_RA_CATEGORY_START + 11,
+             "Session URL does not match expected session URL")
+
   /* ra_dav errors */
 
   SVN_ERRDEF(SVN_ERR_RA_DAV_SOCK_INIT,
@@ -842,7 +930,10 @@
              SVN_ERR_RA_DAV_CATEGORY_START + 11,
              "Repository has been moved")
 
-  /* SVN_ERR_RA_DAV_CATEGORY_START + 12 is reserved for use in 1.7. */
+  /** @since New in 1.7 */
+  SVN_ERRDEF(SVN_ERR_RA_DAV_CONN_TIMEOUT,
+             SVN_ERR_RA_DAV_CATEGORY_START + 12,
+             "Connection timed out")
 
   /** @since New in 1.6 */
   SVN_ERRDEF(SVN_ERR_RA_DAV_FORBIDDEN,
@@ -893,6 +984,11 @@
              SVN_ERR_RA_SVN_CATEGORY_START + 7,
              "Cannot negotiate authentication mechanism")
 
+  /** @since New in 1.7  */
+  SVN_ERRDEF(SVN_ERR_RA_SVN_EDIT_ABORTED,
+             SVN_ERR_RA_SVN_CATEGORY_START + 8,
+             "Editor drive was aborted")
+
   /* libsvn_ra_serf errors */
   /** @since New in 1.5. */
   SVN_ERRDEF(SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED,
@@ -902,6 +998,15 @@
   SVN_ERRDEF(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED,
              SVN_ERR_RA_SERF_CATEGORY_START + 1,
              "Server SSL certificate untrusted")
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED,
+             SVN_ERR_RA_SERF_CATEGORY_START + 2,
+             "Initialization of the GSSAPI context failed")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_RA_SERF_WRAPPED_ERROR,
+             SVN_ERR_RA_SERF_CATEGORY_START + 3,
+             "While handling serf response:")
 
   /* libsvn_auth errors */
 
@@ -1089,6 +1194,36 @@
              SVN_ERR_CLIENT_CATEGORY_START + 17,
              "A file external cannot overwrite an existing versioned item")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_CLIENT_PATCH_BAD_STRIP_COUNT,
+             SVN_ERR_CLIENT_CATEGORY_START + 18,
+             "Invalid path component strip count specified")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_CLIENT_CYCLE_DETECTED,
+             SVN_ERR_CLIENT_CATEGORY_START + 19,
+             "Detected a cycle while processing the operation")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_CLIENT_MERGE_UPDATE_REQUIRED,
+             SVN_ERR_CLIENT_CATEGORY_START + 20,
+             "Working copy and merge source not ready for reintegration")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_CLIENT_INVALID_MERGEINFO_NO_MERGETRACKING,
+             SVN_ERR_CLIENT_CATEGORY_START + 21,
+             "Invalid mergeinfo detected in merge target")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_CLIENT_NO_LOCK_TOKEN,
+             SVN_ERR_CLIENT_CATEGORY_START + 22,
+             "Can't perform this operation without a valid lock token")
+
+/** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_CLIENT_FORBIDDEN_BY_SERVER,
+             SVN_ERR_CLIENT_CATEGORY_START + 23,
+             "The operation is forbidden by the server")
+
   /* misc errors */
 
   SVN_ERRDEF(SVN_ERR_BASE,
@@ -1237,6 +1372,22 @@
              SVN_ERR_MISC_CATEGORY_START + 32,
              "Unsupported schema found in SQLite db")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_SQLITE_BUSY,
+             SVN_ERR_MISC_CATEGORY_START + 33,
+             "The SQLite db is busy")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_SQLITE_RESETTING_FOR_ROLLBACK,
+             SVN_ERR_MISC_CATEGORY_START + 34,
+             "SQLite busy at transaction rollback; "
+             "resetting all busy SQLite statements to allow rollback")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_SQLITE_CONSTRAINT,
+             SVN_ERR_MISC_CATEGORY_START + 35,
+             "Constraint error in SQLite db")
+
   /* command-line client errors */
 
   SVN_ERRDEF(SVN_ERR_CL_ARG_PARSING_ERROR,
@@ -1283,12 +1434,20 @@
              SVN_ERR_CL_CATEGORY_START + 10,
              "No external merge tool available")
 
+  SVN_ERRDEF(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS,
+             SVN_ERR_CL_CATEGORY_START + 11,
+             "Failed processing one or more externals definitions")
+
   /* malfunctions such as assertion failures */
 
   SVN_ERRDEF(SVN_ERR_ASSERTION_FAIL,
              SVN_ERR_MALFUNC_CATEGORY_START + 0,
              "Assertion failure")
 
+  SVN_ERRDEF(SVN_ERR_ASSERTION_ONLY_TRACING_LINKS,
+             SVN_ERR_MALFUNC_CATEGORY_START + 1,
+             "No non-tracing links found in the error chain")
+
 SVN_ERROR_END
 
 

Modified: trunk/GME/Include/subversion/svn_fs.h
==============================================================================
--- trunk/GME/Include/subversion/svn_fs.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_fs.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -68,6 +73,18 @@
 #define SVN_FS_CONFIG_BDB_TXN_NOSYNC            "bdb-txn-nosync"
 #define SVN_FS_CONFIG_BDB_LOG_AUTOREMOVE        "bdb-log-autoremove"
 
+/** Enable / disable text delta caching for a FSFS repository.
+ *
+ * @since New in 1.7.
+ */
+#define SVN_FS_CONFIG_FSFS_CACHE_DELTAS         "fsfs-cache-deltas"
+
+/** Enable / disable full-text caching for a FSFS repository.
+ *
+ * @since New in 1.7.
+ */
+#define SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS      "fsfs-cache-fulltexts"
+
 /* See also svn_fs_type(). */
 /** @since New in 1.1. */
 #define SVN_FS_CONFIG_FS_TYPE                   "fs-type"
@@ -164,7 +181,7 @@
  * pool's. It's a good idea to allocate @a fs_config from @a pool or
  * one of its ancestors.
  *
- * If @a fs_config contains a value for @c SVN_FS_CONFIG_FS_TYPE, that
+ * If @a fs_config contains a value for #SVN_FS_CONFIG_FS_TYPE, that
  * value determines the filesystem type for the new filesystem.
  * Currently defined values are:
  *
@@ -172,7 +189,7 @@
  *   SVN_FS_TYPE_FSFS  Native-filesystem implementation
  *
  * If @a fs_config is @c NULL or does not contain a value for
- * @c SVN_FS_CONFIG_FS_TYPE then the default filesystem type will be used.
+ * #SVN_FS_CONFIG_FS_TYPE then the default filesystem type will be used.
  * This will typically be BDB for version 1.1 and FSFS for later versions,
  * though the caller should not rely upon any particular default if they
  * wish to ensure that a filesystem of a specific type is created.
@@ -202,7 +219,7 @@
  * they open separate filesystem objects.
  *
  * @note You probably don't want to use this directly.  Take a look at
- * svn_repos_open() instead.
+ * svn_repos_open2() instead.
  *
  * @since New in 1.1.
  */
@@ -214,8 +231,8 @@
 
 /**
  * Upgrade the Subversion filesystem located in the directory @a path
- * to the latest version supported by this library.  Return @c
- * SVN_ERR_FS_UNSUPPORTED_UPGRADE and make no changes to the
+ * to the latest version supported by this library.  Return
+ * #SVN_ERR_FS_UNSUPPORTED_UPGRADE and make no changes to the
  * filesystem if the requested upgrade is not supported.  Use @a pool
  * for necessary allocations.
  *
@@ -466,7 +483,7 @@
 typedef struct svn_fs_access_t svn_fs_access_t;
 
 
-/** Set @a *access_ctx to a new @c svn_fs_access_t object representing
+/** Set @a *access_ctx to a new #svn_fs_access_t object representing
  *  @a username, allocated in @a pool.  @a username is presumed to
  *  have been authenticated by the caller.
  *
@@ -518,12 +535,12 @@
 svn_fs_access_add_lock_token2(svn_fs_access_t *access_ctx,
                               const char *path,
                               const char *token);
+
 /**
  * Same as svn_fs_access_add_lock_token2(), but with @a path set to value 1.
  *
- * @deprecated Provided for backward compatibility with the 1.1 API.
+ * @deprecated Provided for backward compatibility with the 1.5 API.
  */
-
 SVN_DEPRECATED
 svn_error_t *
 svn_fs_access_add_lock_token(svn_fs_access_t *access_ctx,
@@ -532,7 +549,7 @@
 /** @} */
 
 
-/** Filesystem Nodes.
+/** Filesystem Nodes and Node-Revisions.
  *
  * In a Subversion filesystem, a `node' corresponds roughly to an
  * `inode' in a Unix filesystem:
@@ -545,9 +562,11 @@
  *   different name.  So a node's identity isn't bound to a particular
  *   filename.
  *
- * A `node revision' refers to a node's contents at a specific point in
- * time.  Changing a node's contents always creates a new revision of that
- * node.  Once created, a node revision's contents never change.
+ * A `node revision' refers to one particular version of a node's contents,
+ * that existed over a specific period of time (one or more repository
+ * revisions).  Changing a node's contents always creates a new revision of
+ * that node, which is to say creates a new `node revision'.  Once created,
+ * a node revision's contents never change.
  *
  * When we create a node, its initial contents are the initial revision of
  * the node.  As users make changes to the node over time, we create new
@@ -557,16 +576,30 @@
  * the filesystem.  Instead, we just remove the reference to the node
  * from the directory.
  *
+ * Each node revision is a part of exactly one node, and appears only once
+ * in the history of that node.  It is uniquely identified by a node
+ * revision id, #svn_fs_id_t.  Its node revision id also identifies which
+ * node it is a part of.
+ *
+ * @note: Often when we talk about `the node' within the context of a single
+ * revision (or transaction), we implicitly mean `the node as it appears in
+ * this revision (or transaction)', or in other words `the node revision'.
+ *
+ * @note: Commonly, a node revision will have the same content as some other
+ * node revisions in the same node and in different nodes.  The FS libraries
+ * allow different node revisions to share the same data without storing a
+ * separate copy of the data.
+ *
  * @defgroup svn_fs_nodes Filesystem nodes
  * @{
  */
 
-/** An object representing a node-id.  */
+/** An object representing a node-revision id.  */
 typedef struct svn_fs_id_t svn_fs_id_t;
 
 
-/** Return -1, 0, or 1 if node revisions @a a and @a b are unrelated,
- * equivalent, or otherwise related (respectively).
+/** Return -1, 0, or 1 if node revisions @a a and @a b are respectively
+ * unrelated, equivalent, or otherwise related (part of the same node).
  */
 int
 svn_fs_compare_ids(const svn_fs_id_t *a,
@@ -574,8 +607,8 @@
 
 
 
-/** Return non-zero IFF the nodes associated with @a id1 and @a id2 are
- * related, else return zero.
+/** Return TRUE if node revisions @a id1 and @a id2 are related (part of the
+ * same node), else return FALSE.
  */
 svn_boolean_t
 svn_fs_check_related(const svn_fs_id_t *id1,
@@ -597,7 +630,7 @@
 
 
 /** Return a Subversion string containing the unparsed form of the
- * node or node revision id @a id.  Allocate the string containing the
+ * node revision id @a id.  Allocate the string containing the
  * unparsed form in @a pool.
  */
 svn_string_t *
@@ -733,7 +766,7 @@
  * transaction will be closed (neither committed nor aborted).
  *
  * @a flags determines transaction enforcement behaviors, and is composed
- * from the constants SVN_FS_TXN_* (@c SVN_FS_TXN_CHECK_OOD etc.).
+ * from the constants SVN_FS_TXN_* (#SVN_FS_TXN_CHECK_OOD etc.).
  *
  * @note If you're building a txn for committing, you probably
  * don't want to call this directly.  Instead, call
@@ -771,7 +804,7 @@
  * repository's hook configurations.
  *
  * If the transaction conflicts with other changes committed to the
- * repository, return an @c SVN_ERR_FS_CONFLICT error.  Otherwise, create
+ * repository, return an #SVN_ERR_FS_CONFLICT error.  Otherwise, create
  * a new filesystem revision containing the changes made in @a txn,
  * storing that new revision number in @a *new_rev, and return zero.
  *
@@ -783,15 +816,16 @@
  *
  * If the commit succeeds, @a txn is invalid.
  *
- * If the commit fails, @a txn is still valid; you can make more
- * operations to resolve the conflict, or call svn_fs_abort_txn() to
- * abort the transaction.
+ * If the commit fails for any reason, @a *new_rev is an invalid
+ * revision number, an error other than #SVN_NO_ERROR is returned and
+ * @a txn is still valid; you can make more operations to resolve the
+ * conflict, or call svn_fs_abort_txn() to abort the transaction.
  *
  * @note Success or failure of the commit of @a txn is determined by
  * examining the value of @a *new_rev upon this function's return.  If
  * the value is a valid revision number, the commit was successful,
  * even though a non- at c NULL function return value may indicate that
- * something else went wrong.
+ * something else went wrong in post commit FS processing.
  */
 svn_error_t *
 svn_fs_commit_txn(const char **conflict_p,
@@ -817,7 +851,7 @@
 
 /** Cleanup the dead transaction in @a fs whose ID is @a txn_id.  Use
  * @a pool for all allocations.  If the transaction is not yet dead,
- * the error @c SVN_ERR_FS_TRANSACTION_NOT_DEAD is returned.  (The
+ * the error #SVN_ERR_FS_TRANSACTION_NOT_DEAD is returned.  (The
  * caller probably forgot to abort the transaction, or the cleanup
  * step of that abort failed for some reason.)
  */
@@ -844,7 +878,7 @@
 /** Open the transaction named @a name in the filesystem @a fs.  Set @a *txn
  * to the transaction.
  *
- * If there is no such transaction, @c SVN_ERR_FS_NO_SUCH_TRANSACTION is
+ * If there is no such transaction, #SVN_ERR_FS_NO_SUCH_TRANSACTION is
  * the error returned.
  *
  * Allocate the new transaction in @a pool; when @a pool is freed, the new
@@ -881,7 +915,7 @@
 
 /** Set @a *table_p to the entire property list of transaction @a txn, as
  * an APR hash table allocated in @a pool.  The resulting table maps property
- * names to pointers to @c svn_string_t objects containing the property value.
+ * names to pointers to #svn_string_t objects containing the property value.
  */
 svn_error_t *
 svn_fs_txn_proplist(apr_hash_t **table_p,
@@ -903,7 +937,7 @@
 
 /** Change, add, and/or delete transaction property values in
  * transaction @a txn.  @a props is an array of <tt>svn_prop_t</tt>
- * elements.  This is equivalent to calling svn_fs_change_txp_prop
+ * elements.  This is equivalent to calling svn_fs_change_txn_prop()
  * multiple times with the @c name and @c value fields of each
  * successive <tt>svn_prop_t</tt>, but may be more efficient.
  * (Properties not mentioned are left alone.)  Do any necessary
@@ -913,7 +947,7 @@
  */
 svn_error_t *
 svn_fs_change_txn_props(svn_fs_txn_t *txn,
-                        apr_array_header_t *props,
+                        const apr_array_header_t *props,
                         apr_pool_t *pool);
 
 /** @} */
@@ -921,9 +955,10 @@
 
 /** Roots.
  *
- * An @c svn_fs_root_t object represents the root directory of some
+ * An #svn_fs_root_t object represents the root directory of some
  * revision or transaction in a filesystem.  To refer to particular
- * node, you provide a root, and a directory path relative that root.
+ * node or node revision, you provide a root, and a directory path
+ * relative to that root.
  *
  * @defgroup svn_fs_roots Filesystem roots
  * @{
@@ -933,8 +968,9 @@
 typedef struct svn_fs_root_t svn_fs_root_t;
 
 
-/** Set @a *root_p to the root directory of revision @a rev in filesystem
- * @a fs.  Allocate @a *root_p in @a pool.
+/** Set @a *root_p to the root directory of revision @a rev in filesystem @a fs.
+ * Allocate @a *root_p in a private subpool of @a pool; the root can be
+ * destroyed earlier than @a pool by calling #svn_fs_close_root.
  */
 svn_error_t *
 svn_fs_revision_root(svn_fs_root_t **root_p,
@@ -943,8 +979,9 @@
                      apr_pool_t *pool);
 
 
-/** Set @a *root_p to the root directory of @a txn.  Allocate @a *root_p in
- * @a pool.
+/** Set @a *root_p to the root directory of @a txn.  Allocate @a *root_p in a
+ * private subpool of @a pool; the root can be destroyed earlier than @a pool by
+ * calling #svn_fs_close_root.
  */
 svn_error_t *
 svn_fs_txn_root(svn_fs_root_t **root_p,
@@ -952,9 +989,10 @@
                 apr_pool_t *pool);
 
 
-/** Free the root directory @a root.  Simply clearing or destroying the
- * pool @a root was allocated in will have the same effect as calling
- * this function.
+/** Free the root directory @a root; this only needs to be used if you want to
+ * free the memory associated with @a root earlier than the time you destroy
+ * the pool passed to the function that created it (svn_fs_revision_root() or
+ * svn_fs_txn_root()).
  */
 void
 svn_fs_close_root(svn_fs_root_t *root);
@@ -982,8 +1020,8 @@
                      apr_pool_t *pool);
 
 /** If @a root is the root of a transaction, return the number of the
- * revision on which is was based when created.  Otherwise, return @c
- * SVN_INVALID_REVNUM.
+ * revision on which is was based when created.  Otherwise, return
+ * #SVN_INVALID_REVNUM.
  *
  * @since New in 1.5.
  */
@@ -991,7 +1029,7 @@
 svn_fs_txn_root_base_revision(svn_fs_root_t *root);
 
 /** If @a root is the root of a revision, return the revision number.
- * Otherwise, return @c SVN_INVALID_REVNUM.
+ * Otherwise, return #SVN_INVALID_REVNUM.
  */
 svn_revnum_t
 svn_fs_revision_root_revision(svn_fs_root_t *root);
@@ -1028,7 +1066,7 @@
 
 
 /** The kind of change that occurred on the path. */
-typedef enum
+typedef enum svn_fs_path_change_kind_t
 {
   /** path modified in txn */
   svn_fs_path_change_modify = 0,
@@ -1069,7 +1107,7 @@
   svn_boolean_t prop_mod;
 
   /** what node kind is the path?
-      (Note: it is legal for this to be @c svn_node_unknown.) */
+      (Note: it is legal for this to be #svn_node_unknown.) */
   svn_node_kind_t node_kind;
 
   /** Copyfrom revision and path; this is only valid if copyfrom_known
@@ -1083,7 +1121,7 @@
 } svn_fs_path_change2_t;
 
 
-/** Similar to @c svn_fs_path_change2_t, but without kind and copyfrom
+/** Similar to #svn_fs_path_change2_t, but without kind and copyfrom
  * information.
  *
  * @deprecated Provided for backwards compatibility with the 1.5 API.
@@ -1106,7 +1144,7 @@
 } svn_fs_path_change_t;
 
 /**
- * Allocate an @c svn_fs_path_change2_t structure in @a pool, initialize and
+ * Allocate an #svn_fs_path_change2_t structure in @a pool, initialize and
  * return it.
  *
  * Set the @c node_rev_id field of the created struct to @a node_rev_id, and
@@ -1122,27 +1160,27 @@
 
 /** Determine what has changed under a @a root.
  *
- * Allocate and return a hash @a *changed_paths_p containing descriptions
+ * Allocate and return a hash @a *changed_paths2_p containing descriptions
  * of the paths changed under @a root.  The hash is keyed with
- * <tt>const char *</tt> paths, and has @c svn_fs_path_change2_t * values.
+ * <tt>const char *</tt> paths, and has #svn_fs_path_change2_t * values.
  *
  * Callers can assume that this function takes time proportional to
  * the amount of data output, and does not need to do tree crawls;
  * however, it is possible that some of the @c node_kind fields in the
- * @c svn_fs_path_change2_t * values will be @c svn_node_unknown or
+ * #svn_fs_path_change2_t * values will be #svn_node_unknown or
  * that and some of the @c copyfrom_known fields will be FALSE.
  *
- * Use @c pool for all allocations, including the hash and its values.
+ * Use @a pool for all allocations, including the hash and its values.
  *
  * @since New in 1.6.
  */
 svn_error_t *
-svn_fs_paths_changed2(apr_hash_t **changed_paths_p,
+svn_fs_paths_changed2(apr_hash_t **changed_paths2_p,
                       svn_fs_root_t *root,
                       apr_pool_t *pool);
 
 
-/** Same as svn_fs_paths_changed2(), only with @c svn_fs_path_change_t * values
+/** Same as svn_fs_paths_changed2(), only with #svn_fs_path_change_t * values
  * in the hash (and thus no kind or copyfrom data).
  *
  * @deprecated Provided for backward compatibility with the 1.5 API.
@@ -1159,8 +1197,8 @@
 /* Operations appropriate to all kinds of nodes.  */
 
 /** Set @a *kind_p to the type of node present at @a path under @a
- * root.  If @a path does not exist under @a root, set @a *kind_p to @c
- * svn_node_none.  Use @a pool for temporary allocation.
+ * root.  If @a path does not exist under @a root, set @a *kind_p to
+ * #svn_node_none.  Use @a pool for temporary allocation.
  */
 svn_error_t *
 svn_fs_check_path(svn_node_kind_t *kind_p,
@@ -1265,7 +1303,7 @@
 
 /** Set @a *revision to the revision in which @a path under @a root was
  * created.  Use @a pool for any temporary allocations.  @a *revision will
- * be set to @c SVN_INVALID_REVNUM for uncommitted nodes (i.e. modified nodes
+ * be set to #SVN_INVALID_REVNUM for uncommitted nodes (i.e. modified nodes
  * under a transaction root).  Note that the root of an unmodified transaction
  * is not itself considered to be modified; in that case, return the revision
  * upon which the transaction was based.
@@ -1279,9 +1317,9 @@
 /** Set @a *revision to the revision in which the line of history
  * represented by @a path under @a root originated.  Use @a pool for
  * any temporary allocations.  If @a root is a transaction root, @a
- * *revision will be set to @c SVN_INVALID_REVNUM for any nodes newly
+ * *revision will be set to #SVN_INVALID_REVNUM for any nodes newly
  * added in that transaction (brand new files or directories created
- * using @c svn_fs_make_dir or @c svn_fs_make_file).
+ * using #svn_fs_make_dir or #svn_fs_make_file).
  *
  * @since New in 1.5.
  */
@@ -1318,7 +1356,7 @@
 
 /** Set @a *table_p to the entire property list of @a path in @a root,
  * as an APR hash table allocated in @a pool.  The resulting table maps
- * property names to pointers to @c svn_string_t objects containing the
+ * property names to pointers to #svn_string_t objects containing the
  * property value.
  */
 svn_error_t *
@@ -1364,11 +1402,12 @@
 /** Discover a node's copy ancestry, if any.
  *
  * If the node at @a path in @a root was copied from some other node, set
- * @a *rev_p and @a *path_p to the revision and path of the other node,
- * allocating @a *path_p in @a pool.
+ * @a *rev_p and @a *path_p to the revision and path (expressed as an
+ * absolute filesystem path) of the other node, allocating @a *path_p
+ * in @a pool.
  *
  * Else if there is no copy ancestry for the node, set @a *rev_p to
- * @c SVN_INVALID_REVNUM and @a *path_p to NULL.
+ * #SVN_INVALID_REVNUM and @a *path_p to NULL.
  *
  * If an error is returned, the values of @a *rev_p and @a *path_p are
  * undefined, but otherwise, if one of them is set as described above,
@@ -1447,10 +1486,10 @@
  *
  * If @a include_descendants is TRUE, then additionally return the
  * mergeinfo for any descendant of any element of @a paths which has
- * the @c SVN_PROP_MERGEINFO property explicitly set on it.  (Note
+ * the #SVN_PROP_MERGEINFO property explicitly set on it.  (Note
  * that inheritance is only taken into account for the elements in @a
  * paths; descendants of the elements in @a paths which get their
- * mergeinfo via inheritance are not included in @a *mergeoutput.)
+ * mergeinfo via inheritance are not included in @a *catalog.)
  *
  * Do any necessary temporary allocation in @a pool.
  *
@@ -1478,7 +1517,7 @@
  *
  * If there are differences between @a ancestor and @a source that conflict
  * with changes between @a ancestor and @a target, this function returns an
- * @c SVN_ERR_FS_CONFLICT error.
+ * #SVN_ERR_FS_CONFLICT error.
  *
  * If the merge is successful, @a target is left in the merged state, and
  * the base root of @a target's txn is set to the root node of @a source.
@@ -1525,7 +1564,7 @@
 /** Set @a *entries_p to a newly allocated APR hash table containing the
  * entries of the directory at @a path in @a root.  The keys of the table
  * are entry names, as byte strings, excluding the final NULL
- * character; the table's values are pointers to @c svn_fs_dirent_t
+ * character; the table's values are pointers to #svn_fs_dirent_t
  * structures.  Allocate the table and its contents in @a pool.
  */
 svn_error_t *
@@ -1552,19 +1591,12 @@
  * the root of a transaction, not of a revision.  Use @a pool for
  * temporary allocation.
  *
- * This function may be more efficient than making the equivalent
- * series of calls to svn_fs_delete(), because it takes advantage of the
- * fact that, to delete an immutable subtree, shared with some
- * committed revision, you need only remove the directory entry.  The
- * dumb algorithm would recurse into the subtree and end up cloning
- * each non-empty directory it contains, only to delete it later.
- *
- * If return @c SVN_ERR_FS_NO_SUCH_ENTRY, then the basename of @a path is
+ * If return #SVN_ERR_FS_NO_SUCH_ENTRY, then the basename of @a path is
  * missing from its parent, that is, the final target of the deletion
  * is missing.
  *
  * Attempting to remove the root dir also results in an error,
- * @c SVN_ERR_FS_ROOT_DIR, even if the dir is empty.
+ * #SVN_ERR_FS_ROOT_DIR, even if the dir is empty.
  */
 svn_error_t *
 svn_fs_delete(svn_fs_root_t *root,
@@ -1687,7 +1719,7 @@
  * contents of the file @a path in @a root.  Allocate the stream in
  * @a pool.  You can only use @a *contents for as long as the underlying
  * filesystem is open.  If @a path is not a file, return
- * @c SVN_ERR_FS_NOT_FILE.
+ * #SVN_ERR_FS_NOT_FILE.
  *
  * If @a root is the root of a transaction, it is possible that the
  * contents of the file @a path will change between calls to
@@ -1735,7 +1767,7 @@
  * checksum of the base text against which svndiff data is being
  * applied; if not, svn_fs_apply_textdelta() or the @a *contents_p call
  * which detects the mismatch will return the error
- * @c SVN_ERR_CHECKSUM_MISMATCH (if there is no base text, there may
+ * #SVN_ERR_CHECKSUM_MISMATCH (if there is no base text, there may
  * still be an error if @a base_checksum is neither NULL nor the
  * checksum of the empty string).
  *
@@ -1743,7 +1775,7 @@
  * results from this delta application.  It is ignored if NULL, but if
  * not NULL, it must match the checksum of the result; if it does not,
  * then the @a *contents_p call which detects the mismatch will return
- * the error @c SVN_ERR_CHECKSUM_MISMATCH.
+ * the error #SVN_ERR_CHECKSUM_MISMATCH.
  *
  * The caller must send all delta windows including the terminating
  * NULL window to @a *contents_p before making further changes to the
@@ -1777,7 +1809,7 @@
  * written to the stream.  It is ignored if NULL, but if not null, it
  * must match the checksum of the result; if it does not, then the @a
  * *contents_p call which detects the mismatch will return the error
- * @c SVN_ERR_CHECKSUM_MISMATCH.
+ * #SVN_ERR_CHECKSUM_MISMATCH.
  *
  * Do any necessary temporary allocation in @a pool.
  *
@@ -1854,7 +1886,7 @@
 
 /** Set @a *table_p to the entire property list of revision @a rev in
  * filesystem @a fs, as an APR hash table allocated in @a pool.  The table
- * maps <tt>char *</tt> property names to @c svn_string_t * values; the names
+ * maps <tt>char *</tt> property names to #svn_string_t * values; the names
  * and values are allocated in @a pool.
  */
 svn_error_t *
@@ -1869,6 +1901,11 @@
  * - @a fs is a filesystem, and @a rev is the revision in that filesystem
  *   whose property should change.
  * - @a name is the name of the property to change.
+ * - if @a old_value_p is not @c NULL, then changing the property will fail with
+ *   error #SVN_ERR_FS_PROP_BASEVALUE_MISMATCH if the present value of the
+ *   property is not @a *old_value_p.  (This is an atomic test-and-set).
+ *   @a *old_value_p may be @c NULL, representing that the property must be not
+ *   already set.
  * - @a value is the new value of the property, or zero if the property should
  *   be removed altogether.
  *
@@ -1877,7 +1914,25 @@
  * via transactions.
  *
  * Do any necessary temporary allocation in @a pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_fs_change_rev_prop2(svn_fs_t *fs,
+                        svn_revnum_t rev,
+                        const char *name,
+                        const svn_string_t *const *old_value_p,
+                        const svn_string_t *value,
+                        apr_pool_t *pool);
+
+
+/**
+ * Similar to svn_fs_change_rev_prop2(), but with @a old_value_p passed as
+ * @c NULL.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_fs_change_rev_prop(svn_fs_t *fs,
                        svn_revnum_t rev,
@@ -1921,7 +1976,7 @@
 
 /** If not @c NULL, associate @a *uuid with @a fs.  Otherwise (if @a
  * uuid is @c NULL), generate a new UUID for @a fs.  Use @a pool for
- * any scratchwork.
+ * any scratch work.
  */
 svn_error_t *
 svn_fs_set_uuid(svn_fs_t *fs,
@@ -1941,8 +1996,8 @@
 
 /** A lock represents one user's exclusive right to modify a path in a
  * filesystem.  In order to create or destroy a lock, a username must
- * be associated with the filesystem's access context (see @c
- * svn_fs_access_t).
+ * be associated with the filesystem's access context (see
+ * #svn_fs_access_t).
  *
  * When a lock is created, a 'lock-token' is returned.  The lock-token
  * is a unique URI that represents the lock (treated as an opaque
@@ -1970,8 +2025,8 @@
  * @warning You may prefer to use svn_repos_fs_lock() instead,
  * which see.
  *
- * @a fs must have a username associated with it (see @c
- * svn_fs_access_t), else return @c SVN_ERR_FS_NO_USER.  Set the
+ * @a fs must have a username associated with it (see
+ * #svn_fs_access_t), else return #SVN_ERR_FS_NO_USER.  Set the
  * 'owner' field in the new lock to the fs username.
  *
  * @a comment is optional: it's either an xml-escapable UTF8 string
@@ -1981,7 +2036,7 @@
  * generic DAV client; only mod_dav_svn's autoversioning feature needs
  * to use it.  If in doubt, pass 0.
  *
- * If path is already locked, then return @c SVN_ERR_FS_PATH_ALREADY_LOCKED,
+ * If path is already locked, then return #SVN_ERR_FS_PATH_ALREADY_LOCKED,
  * unless @a steal_lock is TRUE, in which case "steal" the existing
  * lock, even if the FS access-context's username does not match the
  * current lock's owner: delete the existing lock on @a path, and
@@ -1999,8 +2054,8 @@
  *
  * If @a current_rev is a valid revnum, then do an out-of-dateness
  * check.  If the revnum is less than the last-changed-revision of @a
- * path (or if @a path doesn't exist in HEAD), return @c
- * SVN_ERR_FS_OUT_OF_DATE.
+ * path (or if @a path doesn't exist in HEAD), return
+ * #SVN_ERR_FS_OUT_OF_DATE.
  *
  * @note At this time, only files can be locked.
  */
@@ -2031,14 +2086,14 @@
 
 /** Remove the lock on @a path represented by @a token in @a fs.
  *
- * If @a token doesn't point to a lock, return @c SVN_ERR_FS_BAD_LOCK_TOKEN.
- * If @a token points to an expired lock, return @c SVN_ERR_FS_LOCK_EXPIRED.
- * If @a fs has no username associated with it, return @c SVN_ERR_FS_NO_USER
+ * If @a token doesn't point to a lock, return #SVN_ERR_FS_BAD_LOCK_TOKEN.
+ * If @a token points to an expired lock, return #SVN_ERR_FS_LOCK_EXPIRED.
+ * If @a fs has no username associated with it, return #SVN_ERR_FS_NO_USER
  * unless @a break_lock is specified.
  *
  * If @a token points to a lock, but the username of @a fs's access
- * context doesn't match the lock's owner, return @c
- * SVN_ERR_FS_LOCK_OWNER_MISMATCH.  If @a break_lock is TRUE, however, don't
+ * context doesn't match the lock's owner, return
+ * #SVN_ERR_FS_LOCK_OWNER_MISMATCH.  If @a break_lock is TRUE, however, don't
  * return error;  allow the lock to be "broken" in any case.  In the latter
  * case, @a token shall be @c NULL.
  *
@@ -2079,10 +2134,45 @@
  * get_locks_func / @a get_locks_baton.  Use @a pool for necessary
  * allocations.
  *
+ * @a depth limits the reported locks to those associated with paths
+ * within the specified depth of @a path, and must be one of the
+ * following values:  #svn_depth_empty, #svn_depth_files,
+ * #svn_depth_immediates, or #svn_depth_infinity.
+ *
  * If the @a get_locks_func callback implementation returns an error,
  * lock iteration will terminate and that error will be returned by
  * this function.
+ *
+ * @note Over the course of this function's invocation, locks might be
+ * added, removed, or modified by concurrent processes.  Callers need
+ * to anticipate and gracefully handle the transience of this
+ * information.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_fs_get_locks2(svn_fs_t *fs,
+                  const char *path,
+                  svn_depth_t depth,
+                  svn_fs_get_locks_callback_t get_locks_func,
+                  void *get_locks_baton,
+                  apr_pool_t *pool);
+
+/** Similar to svn_fs_get_locks2(), but with @a depth always passed as
+ * svn_depth_infinity, and with the following known problem (which is
+ * not present in svn_fs_get_locks2()):
+ *
+ * @note On Berkeley-DB-backed filesystems in Subversion 1.6 and
+ * prior, the @a get_locks_func callback will be invoked from within a
+ * Berkeley-DB transaction trail.  Implementors of the callback are,
+ * as a result, forbidden from calling any svn_fs API functions which
+ * might themselves attempt to start a new Berkeley DB transaction
+ * (which is most of this svn_fs API).  Yes, this is a nasty
+ * implementation detail to have to be aware of.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_fs_get_locks(svn_fs_t *fs,
                  const char *path,
@@ -2104,13 +2194,21 @@
 
 
 /** The kind of action being taken by 'pack'. */
-typedef enum
+typedef enum svn_fs_pack_notify_action_t
 {
   /** packing of the shard has commenced */
   svn_fs_pack_notify_start = 0,
 
   /** packing of the shard is completed */
-  svn_fs_pack_notify_end
+  svn_fs_pack_notify_end,
+
+  /** packing of the shard revprops has commenced
+      @since New in 1.7. */
+  svn_fs_pack_notify_start_revprop,
+
+  /** packing of the shard revprops has completed
+      @since New in 1.7. */
+  svn_fs_pack_notify_end_revprop
 
 } svn_fs_pack_notify_action_t;
 
@@ -2141,6 +2239,7 @@
 
 /** @} */
 
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: trunk/GME/Include/subversion/svn_hash.h
==============================================================================
--- trunk/GME/Include/subversion/svn_hash.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_hash.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -242,7 +247,40 @@
  * @since New in 1.5.
  */
 svn_error_t *
-svn_hash__clear(apr_hash_t *hash);
+svn_hash__clear(apr_hash_t *hash, apr_pool_t *pool);
+
+/** @} */
+
+
+/**
+ * @defgroup svn_hash_getters Specialized getter APIs for hashes
+ * @{
+ */
+
+/** Find the value of a @a key in @a hash, return the value.
+ *
+ * If @a hash is @c NULL or if the @a key cannot be found, the
+ * @a default_value will be returned.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_hash__get_cstring(apr_hash_t *hash,
+                      const char *key,
+                      const char *default_value);
+
+/** Like svn_hash_get_cstring(), but for boolean values.
+ *
+ * Parses the value as a boolean value. The recognized representations
+ * are 'TRUE'/'FALSE', 'yes'/'no', 'on'/'off', '1'/'0'; case does not
+ * matter.
+ *
+ * @since New in 1.7.
+ */
+svn_boolean_t
+svn_hash__get_bool(apr_hash_t *hash,
+                   const char *key,
+                   svn_boolean_t default_value);
 
 /** @} */
 

Modified: trunk/GME/Include/subversion/svn_io.h
==============================================================================
--- trunk/GME/Include/subversion/svn_io.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_io.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -60,16 +65,65 @@
   svn_io_file_del_on_pool_cleanup
 } svn_io_file_del_t;
 
+/** A set of directory entry data elements as returned by svn_io_get_dirents
+ *
+ * Note that the first two fields are exactly identical to svn_io_dirent_t
+ * to allow returning a svn_io_dirent2_t as a svn_io_dirent_t.
+ *
+ * Use svn_io_dirent2_create() to create new svn_dirent2_t instances or
+ * svn_io_dirent2_dup() to duplicate an existing instance.
+ *
+ * @since New in 1.7.
+ */
+typedef struct svn_io_dirent2_t {
+  /* New fields must be added at the end to preserve binary compatibility */
+
+  /** The kind of this entry. */
+  svn_node_kind_t kind;
+
+  /** If @c kind is #svn_node_file, whether this entry is a special file;
+   * else FALSE.
+   *
+   * @see svn_io_check_special_path().
+   */
+  svn_boolean_t special;
+
+  /** The filesize of this entry or undefined for a directory */
+  svn_filesize_t filesize;
+
+  /** The time the file was last modified */
+  apr_time_t mtime;
+
+  /* Don't forget to update svn_io_dirent2_dup() when adding new fields */
+} svn_io_dirent2_t;
+
+
+/** Creates a new #svn_io_dirent2_t structure
+ *
+ * @since New in 1.7.
+ */
+svn_io_dirent2_t *
+svn_io_dirent2_create(apr_pool_t *result_pool);
+
+/** Duplicates a @c svn_io_dirent2_t structure into @a result_pool.
+ *
+ * @since New in 1.7.
+ */
+svn_io_dirent2_t *
+svn_io_dirent2_dup(const svn_io_dirent2_t *item,
+                   apr_pool_t *result_pool);
 
-
 /** Represents the kind and special status of a directory entry.
  *
+ * Note that the first two fields are exactly identical to svn_io_dirent2_t
+ * to allow returning a svn_io_dirent2_t as a svn_io_dirent_t.
+ *
  * @since New in 1.3.
  */
 typedef struct svn_io_dirent_t {
   /** The kind of this entry. */
   svn_node_kind_t kind;
-  /** If @c kind is @c svn_node_file, whether this entry is a special file;
+  /** If @c kind is #svn_node_file, whether this entry is a special file;
    * else FALSE.
    *
    * @see svn_io_check_special_path().
@@ -79,14 +133,14 @@
 
 /** Determine the @a kind of @a path.  @a path should be UTF-8 encoded.
  *
- * If @a path is a file, set @a *kind to @c svn_node_file.
+ * If @a path is a file, set @a *kind to #svn_node_file.
  *
- * If @a path is a directory, set @a *kind to @c svn_node_dir.
+ * If @a path is a directory, set @a *kind to #svn_node_dir.
  *
- * If @a path does not exist, set @a *kind to @c svn_node_none.
+ * If @a path does not exist, set @a *kind to #svn_node_none.
  *
- * If @a path exists but is none of the above, set @a *kind to @c
- * svn_node_unknown.
+ * If @a path exists but is none of the above, set @a *kind to
+ * #svn_node_unknown.
  *
  * If @a path is not a valid pathname, set @a *kind to #svn_node_none.  If
  * unable to determine @a path's kind for any other reason, return an error,
@@ -125,9 +179,10 @@
  * utf-8 encoded @a filename, in the directory @a dirpath.  The file handle is
  * returned in @a *file, and the name, which ends with @a suffix, is returned
  * in @a *unique_name, also utf8-encoded.  Either @a file or @a unique_name
- * may be @c NULL.
+ * may be @c NULL.  If @a file is @c NULL, the file will be created but not
+ * open.
  *
- * If @a delete_when is @c svn_io_file_del_on_close, then the @c APR_DELONCLOSE
+ * If @a delete_when is #svn_io_file_del_on_close, then the @c APR_DELONCLOSE
  * flag will be used when opening the file.  The @c APR_BUFFERED flag will
  * always be used.
  *
@@ -160,7 +215,7 @@
  * Allocates @a *file and @a *unique_name in @a result_pool. All
  * intermediate allocations will be performed in @a scratch_pool.
  *
- * If no unique name can be found, @c SVN_ERR_IO_UNIQUE_NAMES_EXHAUSTED is
+ * If no unique name can be found, #SVN_ERR_IO_UNIQUE_NAMES_EXHAUSTED is
  * the error returned.
  *
  * Claim of Historical Inevitability: this function was written
@@ -182,17 +237,25 @@
                            apr_pool_t *scratch_pool);
 
 
-/** Create a writable file in the directory @a dirpath. The file will have
- * an arbitrary and unique name, and the full path will be returned in
- * @a temp_path. The file will be returned in @a file. Both will be
- * allocated from @a result_pool.
+/** Create a writable file, with an arbitrary and unique name, in the
+ * directory @a dirpath.  Set @a *temp_path to its full path, and set
+ * @a *file to the file handle, both allocated from @a result_pool.  Either
+ * @a file or @a unique_name may be @c NULL.  If @a file is @c NULL, the file
+ * will be created but not open.
  *
  * If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir().
  * (Note that when using the system-provided temp directory, it may not
- * be possibly to atomically rename the resulting file due to cross-device
+ * be possible to atomically rename the resulting file due to cross-device
  * issues.)
  *
- * The file will be deleted according to @a delete_when.
+ * The file will be deleted according to @a delete_when.  If @a delete_when
+ * is @c svn_io_file_del_on_close and @a file is @c NULL, the file will be
+ * deleted before this function returns.
+ *
+ * When passing @c svn_io_file_del_none please don't forget to eventually
+ * remove the temporary file to avoid filling up the system temp directory.
+ * It is often appropriate to bind the lifetime of the temporary file to
+ * the lifetime of a pool by using @c svn_io_file_del_on_pool_cleanup.
  *
  * Temporary allocations will be performed in @a scratch_pool.
  *
@@ -226,7 +289,7 @@
 
 /** Like svn_io_open_unique_file2, but can't delete on pool cleanup.
  *
- * @deprecated Provided for backward compatibility with the 1.0 API
+ * @deprecated Provided for backward compatibility with the 1.3 API
  *
  * @note In 1.4 the API was extended to require either @a f or
  *       @a unique_name_p (the other can be NULL).  Before that, both were
@@ -290,6 +353,8 @@
 
 /** Copy permission flags from @a src onto the file at @a dst. Both
  * filenames are utf8-encoded filenames.
+ *
+ * @since New in 1.6.
  */
 svn_error_t *
 svn_io_copy_perms(const char *src,
@@ -319,7 +384,7 @@
  *
  * If @a cancel_func is non-NULL, invoke it with @a cancel_baton at
  * various points during the operation.  If it returns any error
- * (typically @c SVN_ERR_CANCELLED), return that error immediately.
+ * (typically #SVN_ERR_CANCELLED), return that error immediately.
  */
 svn_error_t *
 svn_io_copy_dir_recursively(const char *src,
@@ -627,8 +692,13 @@
 svn_io_file_flush_to_disk(apr_file_t *file,
                           apr_pool_t *pool);
 
-/** Copy file @a file from location @a src_path to location @a dest_path.
- * Use @a pool for memory allocations.
+/** Copy the file whose basename (or relative path) is @a file within
+ * directory @a src_path to the same basename (or relative path) within
+ * directory @a dest_path.  Overwrite the destination file if it already
+ * exists.  The destination directory (including any directory
+ * components in @a name) must already exist.  Set the destination
+ * file's permissions to match those of the source.  Use @a pool for
+ * memory allocations.
  */
 svn_error_t *
 svn_io_dir_file_copy(const char *src_path,
@@ -665,6 +735,10 @@
  * to the maximum extent possible; thus, a short read with no
  * associated error implies the end of the input stream, and a short
  * write should never occur without an associated error.
+ *
+ * In Subversion 1.7 reset support was added as an optional feature of
+ * streams. If a stream implements resetting it allows reading the data
+ * again after a successful call to svn_stream_reset().
  */
 typedef struct svn_stream_t svn_stream_t;
 
@@ -675,6 +749,13 @@
                                       char *buffer,
                                       apr_size_t *len);
 
+/** Skip data handler function for a generic stream.  @see svn_stream_t
+ * and svn_stream_skip().
+ * @since New in 1.7.
+ */
+typedef svn_error_t *(*svn_stream_skip_fn_t)(void *baton,
+                                             apr_size_t len);
+
 /** Write handler function for a generic stream.  @see svn_stream_t. */
 typedef svn_error_t *(*svn_write_fn_t)(void *baton,
                                        const char *data,
@@ -683,6 +764,31 @@
 /** Close handler function for a generic stream.  @see svn_stream_t. */
 typedef svn_error_t *(*svn_close_fn_t)(void *baton);
 
+/** An opaque type which represents a mark on a stream.  There is no
+ * concrete definition of this type, it is a named type for stream
+ * implementation specific baton pointers.
+ *
+ * @see svn_stream_mark().
+ * @since New in 1.7.
+ */
+typedef struct svn_stream_mark_t svn_stream_mark_t;
+
+/** Mark handler function for a generic stream. @see svn_stream_t and
+ * svn_stream_mark().
+ *
+ * @since New in 1.7.
+ */
+typedef svn_error_t *(*svn_stream_mark_fn_t)(void *baton,
+                                         svn_stream_mark_t **mark,
+                                         apr_pool_t *pool);
+
+/** Seek handler function for a generic stream. @see svn_stream_t and
+ * svn_stream_seek().
+ *
+ * @since New in 1.7.
+ */
+typedef svn_error_t *(*svn_stream_seek_fn_t)(void *baton,
+                                         const svn_stream_mark_t *mark);
 
 /** Create a generic stream.  @see svn_stream_t. */
 svn_stream_t *
@@ -699,6 +805,14 @@
 svn_stream_set_read(svn_stream_t *stream,
                     svn_read_fn_t read_fn);
 
+/** Set @a stream's skip function to @a skip_fn
+ *
+ * @since New in 1.7
+ */
+void
+svn_stream_set_skip(svn_stream_t *stream,
+                    svn_stream_skip_fn_t skip_fn);
+
 /** Set @a stream's write function to @a write_fn */
 void
 svn_stream_set_write(svn_stream_t *stream,
@@ -709,6 +823,21 @@
 svn_stream_set_close(svn_stream_t *stream,
                      svn_close_fn_t close_fn);
 
+/** Set @a stream's mark function to @a mark_fn
+ *
+ * @since New in 1.7.
+ */
+void
+svn_stream_set_mark(svn_stream_t *stream,
+                    svn_stream_mark_fn_t mark_fn);
+
+/** Set @a stream's seek function to @a seek_fn
+ *
+ * @since New in 1.7.
+ */
+void
+svn_stream_set_seek(svn_stream_t *stream,
+                    svn_stream_seek_fn_t seek_fn);
 
 /** Create a stream that is empty for reading and infinite for writing. */
 svn_stream_t *
@@ -769,7 +898,7 @@
  *
  * If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir().
  * (Note that when using the system-provided temp directory, it may not
- * be possibly to atomically rename the resulting file due to cross-device
+ * be possible to atomically rename the resulting file due to cross-device
  * issues.)
  *
  * The file will be deleted according to @a delete_when.
@@ -818,6 +947,26 @@
 svn_stream_from_aprfile(apr_file_t *file,
                         apr_pool_t *pool);
 
+/** Set @a *in to a generic stream connected to stdin, allocated in
+ * @a pool.  The stream and its underlying APR handle will be closed
+ * when @a pool is cleared or destroyed.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_stream_for_stdin(svn_stream_t **in,
+                     apr_pool_t *pool);
+
+/** Set @a *err to a generic stream connected to stderr, allocated in
+ * @a pool.  The stream and its underlying APR handle will be closed
+ * when @a pool is cleared or destroyed.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_stream_for_stderr(svn_stream_t **err,
+                      apr_pool_t *pool);
+
 /** Set @a *out to a generic stream connected to stdout, allocated in
  * @a pool.  The stream and its underlying APR handle will be closed
  * when @a pool is cleared or destroyed.
@@ -904,6 +1053,22 @@
                 char *buffer,
                 apr_size_t *len);
 
+/**
+ * Skip @a len bytes from a generic @a stream. If the stream is exhausted
+ * before @a len bytes have been read, return an error.
+ *
+ * @note  No assumption can be made on the semantics of this function
+ * other than that the stream read pointer will be advanced by *len
+ * bytes. Depending on the capabilities of the underlying stream
+ * implementation, this may for instance be translated into a sequence
+ * of reads or a simple seek operation. If the stream implementation has
+ * not provided a skip function, this will read from the stream and
+ * discard the data.
+ */
+svn_error_t *
+svn_stream_skip(svn_stream_t *stream,
+                apr_size_t len);
+
 /** Write to a generic stream. @see svn_stream_t. */
 svn_error_t *
 svn_stream_write(svn_stream_t *stream,
@@ -914,6 +1079,63 @@
 svn_error_t *
 svn_stream_close(svn_stream_t *stream);
 
+/** Reset a generic stream back to its origin. E.g. On a file this would be
+ * implemented as a seek to position 0).  This function returns a
+ * #SVN_ERR_STREAM_RESET_NOT_SUPPORTED error when the stream doesn't
+ * implement resetting.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_stream_reset(svn_stream_t *stream);
+
+/** Returns @c TRUE if the generic @a stream supports svn_stream_mark().
+ *
+ * @see svn_stream_mark()
+ * @since New in 1.7.
+ */
+svn_boolean_t
+svn_stream_supports_mark(svn_stream_t *stream);
+
+/** Set a @a mark at the current position of a generic @a stream,
+ * which can later be sought back to using svn_stream_seek().
+ * The @a mark is allocated in @a pool.
+ *
+ * This function returns the #SVN_ERR_STREAM_SEEK_NOT_SUPPORTED error
+ * if the stream doesn't implement seeking.
+ *
+ * @see svn_stream_seek()
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_stream_mark(svn_stream_t *stream,
+                svn_stream_mark_t **mark,
+                apr_pool_t *pool);
+
+/** Seek to a @a mark in a generic @a stream.
+ * This function returns the #SVN_ERR_STREAM_SEEK_NOT_SUPPORTED error
+ * if the stream doesn't implement seeking. Passing NULL as @a mark,
+ * seeks to the start of the stream.
+ *
+ * @see svn_stream_mark()
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_stream_seek(svn_stream_t *stream, const svn_stream_mark_t *mark);
+
+/** Return a writable stream which, when written to, writes to both of the
+ * underlying streams.  Both of these streams will be closed upon closure of
+ * the returned stream; use svn_stream_disown() if this is not the desired
+ * behavior.  One or both of @a out1 and @a out2 may be @c NULL.  If both are
+ * @c NULL, @c NULL is returned.
+ *
+ * @since New in 1.7.
+ */
+svn_stream_t *
+svn_stream_tee(svn_stream_t *out1,
+               svn_stream_t *out2,
+               apr_pool_t *pool);
+
 
 /** Write to @a stream using a printf-style @a fmt specifier, passed through
  * apr_psprintf() using memory from @a pool.
@@ -957,7 +1179,6 @@
                     svn_boolean_t *eof,
                     apr_pool_t *pool);
 
-
 /**
  * Read the contents of the readable stream @a from and write them to the
  * writable stream @a to calling @a cancel_func before copying each chunk.
@@ -969,7 +1190,6 @@
  * the two streams). If the closure is not desired, then you can use
  * svn_stream_disown() to protect either or both of the streams from
  * being closed.
- * ### TODO: should close the streams ALWAYS, even on error exit
  *
  * @since New in 1.6.
  */
@@ -1009,10 +1229,29 @@
 
 
 /** Set @a *same to TRUE if @a stream1 and @a stream2 have the same
- * contents, else set it to FALSE.  Use @a pool for temporary allocations.
+ * contents, else set it to FALSE.
+ *
+ * Both streams will be closed before this function returns (regardless of
+ * the result, or any possible error).
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_stream_contents_same2(svn_boolean_t *same,
+                          svn_stream_t *stream1,
+                          svn_stream_t *stream2,
+                          apr_pool_t *pool);
+
+
+/**
+ * Same as svn_stream_contents_same2(), but the streams will not be closed.
  *
  * @since New in 1.4.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_stream_contents_same(svn_boolean_t *same,
                          svn_stream_t *stream1,
@@ -1062,7 +1301,7 @@
                          apr_pool_t *pool);
 
 /** Similar to svn_stringbuf_from_file2(), except that if @a filename
- * is "-", return the error @c SVN_ERR_UNSUPPORTED_FEATURE and don't
+ * is "-", return the error #SVN_ERR_UNSUPPORTED_FEATURE and don't
  * touch @a *result.
  *
  * @deprecated Provided for backwards compatibility with the 1.4 API.
@@ -1086,8 +1325,25 @@
                            apr_pool_t *pool);
 
 /** Remove file @a path, a utf8-encoded path.  This wraps apr_file_remove(),
- * converting any error to a Subversion error.
+ * converting any error to a Subversion error. If @a ignore_enoent is TRUE, and
+ * the file is not present (APR_STATUS_IS_ENOENT returns TRUE), then no
+ * error will be returned.
+ *
+ * The file will be removed even if it is not writable.  (On Windows and
+ * OS/2, this function first clears the file's read-only bit.)
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_io_remove_file2(const char *path,
+                    svn_boolean_t ignore_enoent,
+                    apr_pool_t *scratch_pool);
+
+/** Similar to svn_io_remove_file2(), except with @a ignore_enoent set to FALSE.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_io_remove_file(const char *path,
                    apr_pool_t *pool);
@@ -1097,7 +1353,7 @@
  * doesn't exist.  Use @a pool for temporary allocations.
  *
  * Because recursive delete of a directory tree can be a lengthy operation,
- * provide @a cancel_func and @a cancel_baton for interruptability.
+ * provide @a cancel_func and @a cancel_baton for interruptibility.
  *
  * @since New in 1.5.
  */
@@ -1126,7 +1382,9 @@
  * apr_dir_read() are NOT returned in the hash.
  *
  * @since New in 1.4.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_io_get_dir_filenames(apr_hash_t **dirents,
                          const char *path,
@@ -1134,23 +1392,41 @@
 
 /** Read all of the disk entries in directory @a path, a utf8-encoded
  * path.  Set @a *dirents to a hash mapping dirent names (<tt>char *</tt>) to
- * @c svn_io_dirent_t structures, allocated in @a pool.
+ * #svn_io_dirent2_t structures, allocated in @a pool.
+ *
+ * If @a only_check_type is set to @c TRUE, only the kind and special
+ * fields of the svn_io_dirent2_t are filled.
  *
  * @note The `.' and `..' directories normally returned by
  * apr_dir_read() are NOT returned in the hash.
  *
  * @note The kind field in the @a dirents is set according to the mapping
- *       as documented for svn_io_check_path()
+ *       as documented for svn_io_check_path().
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_io_get_dirents3(apr_hash_t **dirents,
+                    const char *path,
+                    svn_boolean_t only_check_type,
+                    apr_pool_t *result_pool,
+                    apr_pool_t *scratch_pool);
+
+
+/** Similar to svn_io_get_dirents3, but returns a mapping to svn_io_dirent_t
+ * structures instead of svn_io_dirent2_t and with only a single pool.
  *
  * @since New in 1.3.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_io_get_dirents2(apr_hash_t **dirents,
                     const char *path,
                     apr_pool_t *pool);
 
 /** Similar to svn_io_get_dirents2(), but @a *dirents is a hash table
- * with @c svn_node_kind_t values.
+ * with #svn_node_kind_t values.
  *
  * @deprecated Provided for backwards compatibility with the 1.2 API.
  */
@@ -1160,6 +1436,21 @@
                    const char *path,
                    apr_pool_t *pool);
 
+/** Create a svn_io_dirent2_t instance for path. Specialized variant of
+ * svn_io_stat() that directly translates node_kind and special.
+ *
+ * If @a ignore_enoent is set to @c TRUE, set *dirent_p->kind to
+ * svn_node_none instead of returning an error.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_io_stat_dirent(const svn_io_dirent2_t **dirent_p,
+                   const char *path,
+                   svn_boolean_t ignore_enoent,
+                   apr_pool_t *result_pool,
+                   apr_pool_t *scratch_pool);
+
 
 /** Callback function type for svn_io_dir_walk() */
 typedef svn_error_t * (*svn_io_walk_func_t)(void *baton,
@@ -1167,19 +1458,39 @@
                                             const apr_finfo_t *finfo,
                                             apr_pool_t *pool);
 
-/** This function will recursively walk over the files and directories
- * rooted at @a dirname, a utf8-encoded path. For each file or directory,
- * @a walk_func is invoked, passing in the @a walk_baton, the utf8-encoded
- * full path to the entry, an @c apr_finfo_t structure, and a temporary
- * pool for allocations.  For any directory, @a walk_func will be invoked
- * on the directory itself before being invoked on any subdirectories or
- * files within the directory.
- *
- * The set of information passed to @a walk_func is specified by @a wanted,
- * and the items specified by @c APR_FINFO_TYPE and @c APR_FINFO_NAME.
+/** Recursively walk the directory rooted at @a dirname, a
+ * utf8-encoded path, invoking @a walk_func (with @a walk_baton) for
+ * each item in the tree.  For a given directory, invoke @a walk_func
+ * on the directory itself before invoking it on any children thereof.
+ *
+ * Deliver to @a walk_func the information specified by @a wanted,
+ * which is a combination of @c APR_FINFO_* flags, plus the
+ * information specified by @c APR_FINFO_TYPE and @c APR_FINFO_NAME.
+ *
+ * Use @a pool for all allocations.
+ *
+ * @note This function does not currently pass all file types to @a
+ * walk_func -- only APR_DIR, APR_REG, and APR_LNK.  We reserve the
+ * right to pass additional file types through this interface in the
+ * future, though, so implementations of this callback should
+ * explicitly test FINFO->filetype.  See the APR library's
+ * apr_filetype_e enum for the various filetypes and their meanings.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_io_dir_walk2(const char *dirname,
+                 apr_int32_t wanted,
+                 svn_io_walk_func_t walk_func,
+                 void *walk_baton,
+                 apr_pool_t *pool);
+
+/** Similar to svn_io_dir_walk(), but only calls @a walk_func for
+ * files of type APR_DIR (directory) and APR_REG (regular file).
  *
- * All allocations will be performed in @a pool.
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_io_dir_walk(const char *dirname,
                 apr_int32_t wanted,
@@ -1189,9 +1500,17 @@
 
 /**
  * Start @a cmd with @a args, using utf8-encoded @a path as working
- * directory.  Connect @a cmd's stdin, stdout, and stderr to @a infile,
- * @a outfile, and @a errfile, except where they are NULL.  Return the
- * process handle for the invoked program in @a *cmd_proc.
+ * directory.  Return the process handle for the invoked program in @a
+ * *cmd_proc.
+ *
+ * If @a infile_pipe is TRUE, connect @a cmd's stdin to a pipe;
+ * otherwise, connect it to @a infile (which may be NULL).  If
+ * @a outfile_pipe is TRUE, connect @a cmd's stdout to a pipe; otherwise,
+ * connect it to @a outfile (which may be NULL).  If @a errfile_pipe
+ * is TRUE, connect @a cmd's stderr to a pipe; otherwise, connect it
+ * to @a errfile (which may be NULL).  (Callers must pass FALSE for
+ * each of these boolean values for which the corresponding file
+ * handle is non-NULL.)
  *
  * @a args is a list of utf8-encoded <tt>const char *</tt> arguments,
  * terminated by @c NULL.  @a args[0] is the name of the program, though it
@@ -1206,8 +1525,29 @@
  * will result in error output being written to @a errfile, if non-NULL, and
  * a non-zero exit status being returned to the parent process.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *svn_io_start_cmd2(apr_proc_t *cmd_proc,
+                               const char *path,
+                               const char *cmd,
+                               const char *const *args,
+                               svn_boolean_t inherit,
+                               svn_boolean_t infile_pipe,
+                               apr_file_t *infile,
+                               svn_boolean_t outfile_pipe,
+                               apr_file_t *outfile,
+                               svn_boolean_t errfile_pipe,
+                               apr_file_t *errfile,
+                               apr_pool_t *pool);
+
+/**
+ * Similar to svn_io_start_cmd2() but with @a infile_pipe, @a
+ * outfile_pipe, and @a errfile_pipe always FALSE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API
  * @since New in 1.3.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_io_start_cmd(apr_proc_t *cmd_proc,
                  const char *path,
@@ -1223,15 +1563,15 @@
  * Wait for the process @a *cmd_proc to complete and optionally retrieve
  * its exit code.  @a cmd is used only in error messages.
  *
- * If @a exitcode is not NULL, and SVN_NO_ERROR is returned, @a *exitcode
- * will contain the exit code of the process.  If @a exitcode is NULL and
- * the exit code is non-zero, then an @c SVN_ERR_EXTERNAL_PROGRAM error
- * will be returned.
- *
- * If @a exitwhy is not NULL, and SVN_NO_ERROR is returned, @a *exitwhy
- * will indicate why the process terminated.  If @a exitwhy is NULL,
- * and the exit reason is not @c APR_PROC_CHECK_EXIT(), then an
- * @c SVN_ERR_EXTERNAL_PROGRAM error will be returned.
+ * If @a exitcode is not NULL, set @a *exitcode to the exit code of the
+ * process and do not consider any exit code to be an error.  If @a exitcode
+ * is NULL, then if the exit code of the process is non-zero then return an
+ * #SVN_ERR_EXTERNAL_PROGRAM error.
+ *
+ * If @a exitwhy is not NULL, set @a *exitwhy to indicate why the process
+ * terminated and do not consider any reason to be an error.  If @a exitwhy
+ * is NULL, then if the termination reason is not @c APR_PROC_CHECK_EXIT()
+ * then return an #SVN_ERR_EXTERNAL_PROGRAM error.
  *
  * @since New in 1.3.
  */
@@ -1292,7 +1632,7 @@
                  const char *diff_cmd,
                  apr_pool_t *pool);
 
-/** Similar to svn_io_run_diff2() but with @diff_cmd encoded in internal
+/** Similar to svn_io_run_diff2() but with @a diff_cmd encoded in internal
  * encoding used by APR.
  *
  * @deprecated Provided for backwards compatibility with the 1.5 API. */
@@ -1336,7 +1676,7 @@
  * used instead.
  *
  * Set @a *exitcode to diff3's exit status.  If @a *exitcode is anything
- * other than 0 or 1, then return @c SVN_ERR_EXTERNAL_PROGRAM.  (Note the
+ * other than 0 or 1, then return #SVN_ERR_EXTERNAL_PROGRAM.  (Note the
  * following from the diff3 info pages: "An exit status of 0 means
  * `diff3' was successful, 1 means some conflicts were found, and 2
  * means trouble.")
@@ -1446,6 +1786,16 @@
                        apr_pool_t *pool);
 
 
+/** Examine up to @a len bytes of data in @a buf to determine if the
+ * can be considered binary data, in which case return TRUE.
+ * If the data can be considered plain-text data, return FALSE.
+ *
+ * @since New in 1.7.
+ */
+svn_boolean_t
+svn_io_is_binary_data(const void *buf, apr_size_t len);
+
+
 /** Wrapper for apr_file_open().  @a fname is utf8-encoded. */
 svn_error_t *
 svn_io_file_open(apr_file_t **new_file,
@@ -1468,6 +1818,15 @@
                  apr_pool_t *pool);
 
 
+/** Wrapper for apr_file_putc().
+  * @since New in 1.7
+  */
+svn_error_t *
+svn_io_file_putc(char ch,
+                 apr_file_t *file,
+                 apr_pool_t *pool);
+
+
 /** Wrapper for apr_file_info_get(). */
 svn_error_t *
 svn_io_file_info_get(apr_finfo_t *finfo,
@@ -1484,7 +1843,28 @@
                  apr_pool_t *pool);
 
 
-/** Wrapper for apr_file_read_full(). */
+/** Wrapper for apr_file_read_full().
+ *
+ * If @a hit_eof is not NULL, EOF will be indicated there and no
+ * svn_error_t error object will be created upon EOF.
+ *
+ * @since New in 1.7
+ */
+svn_error_t *
+svn_io_file_read_full2(apr_file_t *file,
+                       void *buf,
+                       apr_size_t nbytes,
+                       apr_size_t *bytes_read,
+                       svn_boolean_t *hit_eof,
+                       apr_pool_t *pool);
+
+
+/** Similar to svn_io_file_read_full2 with hit_eof being set
+ * to @c NULL.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API
+ */
+SVN_DEPRECATED
 svn_error_t *
 svn_io_file_read_full(apr_file_t *file,
                       void *buf,
@@ -1519,12 +1899,12 @@
 
 /**
  * Open a unique file in @a dirpath, and write @a nbytes from @a buf to
- * the file before closing it.  Return the name of the newly created file
- * in @a *tmp_path, allocated in @a pool.
+ * the file before flushing it to disk and closing it.  Return the name
+ * of the newly created file in @a *tmp_path, allocated in @a pool.
  *
  * If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir().
  * (Note that when using the system-provided temp directory, it may not
- * be possibly to atomically rename the resulting file due to cross-device
+ * be possible to atomically rename the resulting file due to cross-device
  * issues.)
  *
  * The file will be deleted according to @a delete_when.
@@ -1555,7 +1935,11 @@
             apr_pool_t *pool);
 
 
-/** Wrapper for apr_file_rename().  @a from_path and @a to_path are
+/** Rename and/or move the node (not necessarily a regular file) at
+ * @a from_path to a new path @a to_path within the same filesystem.
+ * In some cases, an existing node at @a to_path will be overwritten.
+ *
+ * A wrapper for apr_file_rename().  @a from_path and @a to_path are
  * utf8-encoded.
  */
 svn_error_t *
@@ -1612,6 +1996,12 @@
                 const char *dirname,
                 apr_pool_t *pool);
 
+/** Wrapper for apr_dir_close().
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_io_dir_close(apr_dir_t *thedir);
 
 /** Wrapper for apr_dir_remove().  @a dirname is utf8-encoded.
  * @note This function has this name to avoid confusion with
@@ -1633,6 +2023,16 @@
                 apr_dir_t *thedir,
                 apr_pool_t *pool);
 
+/** Wrapper for apr_file_name_get().  @a *filename is utf8-encoded.
+ *
+ * @note The file name may be NULL.
+ *
+ * @since New in 1.7. */
+svn_error_t *
+svn_io_file_name_get(const char **filename,
+                     apr_file_t *file,
+                     apr_pool_t *pool);
+
 
 
 /** Version/format files.
@@ -1643,7 +2043,7 @@
 
 /** Set @a *version to the integer that starts the file at @a path.  If the
  * file does not begin with a series of digits followed by a newline,
- * return the error @c SVN_ERR_BAD_VERSION_FILE_FORMAT.  Use @a pool for
+ * return the error #SVN_ERR_BAD_VERSION_FILE_FORMAT.  Use @a pool for
  * all allocations.
  */
 svn_error_t *

Modified: trunk/GME/Include/subversion/svn_iter.h
==============================================================================
--- trunk/GME/Include/subversion/svn_iter.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_iter.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2007 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -61,7 +66,7 @@
  * If @a func returns an error other than @c SVN_ERR_ITER_BREAK, that
  * error is returned.  When @a func returns @c SVN_ERR_ITER_BREAK,
  * iteration is interrupted, but no error is returned and @a *completed is
- * set to @c FALSE.
+ * set to @c FALSE (even if this iteration was the last one).
  *
  * @since New in 1.5.
  */
@@ -97,7 +102,7 @@
  * If @a func returns an error other than @c SVN_ERR_ITER_BREAK, that
  * error is returned.  When @a func returns @c SVN_ERR_ITER_BREAK,
  * iteration is interrupted, but no error is returned and @a *completed is
- * set to @c FALSE.
+ * set to @c FALSE (even if this iteration was the last one).
  *
  * @since New in 1.5.
  */

Modified: trunk/GME/Include/subversion/svn_md5.h
==============================================================================
--- trunk/GME/Include/subversion/svn_md5.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_md5.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *

Modified: trunk/GME/Include/subversion/svn_mergeinfo.h
==============================================================================
--- trunk/GME/Include/subversion/svn_mergeinfo.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_mergeinfo.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2006-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -56,7 +61,7 @@
  *
  * If a path has no @c SVN_PROP_MERGEINFO of its own, it inherits mergeinfo
  * from its nearest parent that has @c SVN_PROP_MERGEINFO set.  The
- * exception to this is @c SVN_PROP_MERGEINFO with non-ineritable revision
+ * exception to this is @c SVN_PROP_MERGEINFO with non-inheritable revision
  * ranges.  These non-inheritable ranges apply only to the path which they
  * are set on.
  *
@@ -122,15 +127,14 @@
  *     mergeinfo.
  *
  * (d) @c svn_mergeinfo_catalog_t, called a "mergeinfo catalog".  A hash
- *     mapping paths (@c const char *, starting with slashes) to
- *     @c svn_mergeinfo_t.
+ *     mapping paths (@c const char *) to @c svn_mergeinfo_t.
  *
  * Both @c svn_mergeinfo_t and @c svn_mergeinfo_catalog_t are just
  * typedefs for @c apr_hash_t *; there is no static type-checking, and
  * you still use standard @c apr_hash_t functions to interact with
  * them.
  *
- * Note that while the keys of mergeinfos are always relative to the
+ * Note that while the keys of mergeinfos are always absolute from the
  * repository root, the keys of a catalog may be relative to something
  * else, such as an RA session root.
  */
@@ -188,8 +192,8 @@
                    svn_boolean_t consider_inheritance,
                    apr_pool_t *pool);
 
-/** Merge one mergeinfo, @a changes, into another mergeinfo @a
- * mergeinfo.
+/** Merge a shallow copy of one mergeinfo, @a changes, into another mergeinfo
+ * @a mergeinfo.
  *
  * When intersecting rangelists for a path are merged, the inheritability of
  * the resulting svn_merge_range_t depends on the inheritability of the
@@ -205,15 +209,49 @@
 svn_mergeinfo_merge(svn_mergeinfo_t mergeinfo, svn_mergeinfo_t changes,
                     apr_pool_t *pool);
 
-/** Removes @a eraser (the subtrahend) from @a whiteboard (the
- * minuend), and places the resulting difference in @a *mergeinfo.
+/** Combine one mergeinfo catalog, @a changes_catalog, into another mergeinfo
+ * catalog @a mergeinfo_catalog.  If both catalogs have mergeinfo for the same
+ * key, use svn_mergeinfo_merge() to combine the mergeinfos.
  *
- * @since New in 1.5.
+ * Additions to @a mergeinfo_catalog are deep copies allocated in
+ * @a result_pool.  Temporary allocations are made in @a scratch_pool.
+ *
+ * @since New in 1.7.
  */
 svn_error_t *
+svn_mergeinfo_catalog_merge(svn_mergeinfo_catalog_t mergeinfo_catalog,
+                            svn_mergeinfo_catalog_t changes_catalog,
+                            apr_pool_t *result_pool,
+                            apr_pool_t *scratch_pool);
+
+/** Like svn_mergeinfo_remove2, but always considers inheritance.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
 svn_mergeinfo_remove(svn_mergeinfo_t *mergeinfo, svn_mergeinfo_t eraser,
                      svn_mergeinfo_t whiteboard, apr_pool_t *pool);
 
+/** Removes @a eraser (the subtrahend) from @a whiteboard (the
+ * minuend), and places the resulting difference in @a *mergeinfo.
+ * Allocates @a *mergeinfo in @a result_pool.  Temporary allocations
+ * will be performed in @a scratch_pool.
+ *
+ * @a consider_inheritance determines how to account for the inheritability
+ * of the two mergeinfo's ranges when calculating the range equivalence,
+ * as described for svn_mergeinfo_diff().
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_mergeinfo_remove2(svn_mergeinfo_t *mergeinfo,
+                      svn_mergeinfo_t eraser,
+                      svn_mergeinfo_t whiteboard,
+                      svn_boolean_t consider_inheritance,
+                      apr_pool_t *result_pool,
+                      apr_pool_t *scratch_pool);
+
 /** Calculate the delta between two rangelists consisting of @c
  * svn_merge_range_t * elements (sorted in ascending order), @a from
  * and @a to, and place the result in @a *deleted and @a *added
@@ -227,7 +265,7 @@
  */
 svn_error_t *
 svn_rangelist_diff(apr_array_header_t **deleted, apr_array_header_t **added,
-                   apr_array_header_t *from, apr_array_header_t *to,
+                   const apr_array_header_t *from, const apr_array_header_t *to,
                    svn_boolean_t consider_inheritance,
                    apr_pool_t *pool);
 
@@ -248,7 +286,7 @@
  */
 svn_error_t *
 svn_rangelist_merge(apr_array_header_t **rangelist,
-                    apr_array_header_t *changes,
+                    const apr_array_header_t *changes,
                     apr_pool_t *pool);
 
 /** Removes @a eraser (the subtrahend) from @a whiteboard (the
@@ -265,18 +303,36 @@
  * @since New in 1.5.
  */
 svn_error_t *
-svn_rangelist_remove(apr_array_header_t **output, apr_array_header_t *eraser,
-                     apr_array_header_t *whiteboard,
+svn_rangelist_remove(apr_array_header_t **output, const apr_array_header_t *eraser,
+                     const apr_array_header_t *whiteboard,
                      svn_boolean_t consider_inheritance,
                      apr_pool_t *pool);
 
 /** Find the intersection of two mergeinfos, @a mergeinfo1 and @a
  * mergeinfo2, and place the result in @a *mergeinfo, which is (deeply)
- * allocated in @a pool.
+ * allocated in @a result_pool.  Temporary allocations will be performed
+ * in @a scratch_pool.
  *
- * @since New in 1.5.
+ * @a consider_inheritance determines how to account for the inheritability
+ * of the two mergeinfo's ranges when calculating the range equivalence,
+ * @see svn_rangelist_intersect().
+ *
+ * @since New in 1.7.
  */
 svn_error_t *
+svn_mergeinfo_intersect2(svn_mergeinfo_t *mergeinfo,
+                         svn_mergeinfo_t mergeinfo1,
+                         svn_mergeinfo_t mergeinfo2,
+                         svn_boolean_t consider_inheritance,
+                         apr_pool_t *result_pool,
+                         apr_pool_t *scratch_pool);
+
+/** Like svn_mergeinfo_intersect2, but always considers inheritance.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
 svn_mergeinfo_intersect(svn_mergeinfo_t *mergeinfo,
                         svn_mergeinfo_t mergeinfo1,
                         svn_mergeinfo_t mergeinfo2,
@@ -302,8 +358,8 @@
  */
 svn_error_t *
 svn_rangelist_intersect(apr_array_header_t **rangelist,
-                        apr_array_header_t *rangelist1,
-                        apr_array_header_t *rangelist2,
+                        const apr_array_header_t *rangelist1,
+                        const apr_array_header_t *rangelist2,
                         svn_boolean_t consider_inheritance,
                         apr_pool_t *pool);
 
@@ -332,33 +388,68 @@
                         apr_pool_t *pool);
 
 /** Return a deep copy of @c svn_merge_range_t *'s in @a rangelist excluding
- * all non-inheritable @c svn_merge_range_t.  If @a start and @a end are valid
- * revisions and @a start is less than or equal to @a end, then exclude only the
- * non-inheritable revision ranges that intersect inclusively with the range
- * defined by @a start and @a end.  If @a rangelist contains no elements, return
- * an empty array.  Allocate the copy in @a pool.
+ * all non-inheritable @c svn_merge_range_t if @a inheritable is TRUE or
+ * excluding all inheritable @c svn_merge_range_t otherwise.  If @a start and
+ * @a end are valid revisions and @a start is less than or equal to @a end,
+ * then exclude only the non-inheritable revision ranges that intersect
+ * inclusively with the range defined by @a start and @a end.  If
+ * @a rangelist contains no elements, return an empty array.  Allocate the
+ * copy in @a result_pool, use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_rangelist_inheritable2(apr_array_header_t **inheritable_rangelist,
+                           const apr_array_header_t *rangelist,
+                           svn_revnum_t start,
+                           svn_revnum_t end,
+                           svn_boolean_t inheritable,
+                           apr_pool_t *result_pool,
+                           apr_pool_t *scratch_pool);
+
+/** Like svn_rangelist_inheritable2, but always finds inheritable ranges.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_rangelist_inheritable(apr_array_header_t **inheritable_rangelist,
-                          apr_array_header_t *rangelist,
+                          const apr_array_header_t *rangelist,
                           svn_revnum_t start,
                           svn_revnum_t end,
                           apr_pool_t *pool);
 
 /** Return a deep copy of @a mergeinfo, excluding all non-inheritable
- * @c svn_merge_range_t.  If @a start and @a end are valid revisions
- * and @a start is less than or equal to @a end, then exclude only the
- * non-inheritable revisions that intersect inclusively with the range
- * defined by @a start and @a end.  If @a path is not NULL remove
- * non-inheritable ranges only for @a path.  If all ranges are removed
- * for a given path then remove that path as well.  If all paths are
- * removed or @a rangelist is empty then set @a *inheritable_rangelist
- * to an empty array.  Allocate the copy in @a pool.
+ * @c svn_merge_range_t if @a inheritable is TRUE or excluding all
+ * inheritable @c svn_merge_range_t otherwise.  If @a start and @a end
+ * are valid revisions and @a start is less than or equal to @a end,
+ * then exclude only the non-inheritable revisions that intersect
+ * inclusively with the range defined by @a start and @a end.  If @a path
+ * is not NULL remove non-inheritable ranges only for @a path.  If all
+ * ranges are removed for a given path then remove that path as well.
+ * If all paths are removed or @a rangelist is empty then set
+ * @a *inheritable_rangelist to an empty array.  Allocate the copy in
+ * @a result_pool, use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_mergeinfo_inheritable2(svn_mergeinfo_t *inheritable_mergeinfo,
+                           svn_mergeinfo_t mergeinfo,
+                           const char *path,
+                           svn_revnum_t start,
+                           svn_revnum_t end,
+                           svn_boolean_t inheritable,
+                           apr_pool_t *result_pool,
+                           apr_pool_t *scratch_pool);
+
+/** Like svn_mergeinfo_inheritable2, but always finds inheritable mergeinfo.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_mergeinfo_inheritable(svn_mergeinfo_t *inheritable_mergeinfo,
                           svn_mergeinfo_t mergeinfo,
@@ -367,9 +458,9 @@
                           svn_revnum_t end,
                           apr_pool_t *pool);
 
-/** Take a mergeinfo in MERGEINPUT, and convert it back to unparsed
- *  mergeinfo in *OUTPUT.  If INPUT contains no elements, return the
- *  empty string.
+/** Take a mergeinfo in @a mergeinput, and convert it to unparsed
+ *  mergeinfo. Set @a *output to the result, allocated in @a pool.
+ *  If @a input contains no elements, set @a *output to the empty string.
  *
  * @a mergeinput may contain relative merge source paths, but these are
  * converted to absolute paths in @a *output.
@@ -412,7 +503,7 @@
  * @since New in 1.5.
  */
 apr_array_header_t *
-svn_rangelist_dup(apr_array_header_t *rangelist, apr_pool_t *pool);
+svn_rangelist_dup(const apr_array_header_t *rangelist, apr_pool_t *pool);
 
 
 /**
@@ -420,7 +511,7 @@
  *
  * @since New in 1.5.
  */
-typedef enum
+typedef enum svn_mergeinfo_inheritance_t
 {
   /** Explicit mergeinfo only. */
   svn_mergeinfo_explicit,
@@ -431,7 +522,7 @@
   svn_mergeinfo_inherited,
 
   /** Mergeinfo on target's nearest (path-wise, not history-wise)
-      ancestor, regardless of whether target has explict mergeinfo. */
+      ancestor, regardless of whether target has explicit mergeinfo. */
   svn_mergeinfo_nearest_ancestor
 } svn_mergeinfo_inheritance_t;
 

Modified: trunk/GME/Include/subversion/svn_nls.h
==============================================================================
--- trunk/GME/Include/subversion/svn_nls.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_nls.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2005, 2008 CollabNet.  All rights reserved.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
  *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *

Modified: trunk/GME/Include/subversion/svn_opt.h
==============================================================================
--- trunk/GME/Include/subversion/svn_opt.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_opt.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -54,8 +59,8 @@
  * unless the instance is explicitly documented to allocate from a
  * pool in @a baton.
  */
-typedef svn_error_t *(svn_opt_subcommand_t)
-       (apr_getopt_t *os, void *baton, apr_pool_t *pool);
+typedef svn_error_t *(svn_opt_subcommand_t)(
+  apr_getopt_t *os, void *baton, apr_pool_t *pool);
 
 
 /** The maximum number of aliases a subcommand can have. */
@@ -159,7 +164,7 @@
 /**
  * Return pointer to an @c apr_getopt_option_t for the option whose
  * option code is @a code, or @c NULL if no match.  @a option_table must end
- * with an element whose every field is zero.  If @c command is non-NULL,
+ * with an element whose every field is zero.  If @a command is non-NULL,
  * then return the subcommand-specific option description instead of the
  * generic one, if a specific description is defined.
  *
@@ -287,6 +292,11 @@
  * command name or an alias.  ### @todo Why does this only print to
  * @c stdout, whereas svn_opt_print_generic_help() gives us a choice?
  *
+ * When printing the description of an option, if the same option code
+ * appears a second time in @a options_table with a different name, then
+ * use that second name as an alias for the first name.  This additional
+ * behaviour is new in 1.7.
+ *
  * @since New in 1.5.
  */
 void
@@ -360,6 +370,8 @@
 
   /** repository youngest */
   svn_opt_revision_head
+
+  /* please update svn_opt__revision_to_string() when extending this enum */
 };
 
 /**
@@ -510,7 +522,7 @@
 svn_error_t *
 svn_opt_args_to_target_array3(apr_array_header_t **targets_p,
                               apr_getopt_t *os,
-                              apr_array_header_t *known_targets,
+                              const apr_array_header_t *known_targets,
                               apr_pool_t *pool);
 
 /**
@@ -526,7 +538,7 @@
 svn_error_t *
 svn_opt_args_to_target_array2(apr_array_header_t **targets_p,
                               apr_getopt_t *os,
-                              apr_array_header_t *known_targets,
+                              const apr_array_header_t *known_targets,
                               apr_pool_t *pool);
 
 
@@ -548,7 +560,7 @@
 svn_error_t *
 svn_opt_args_to_target_array(apr_array_header_t **targets_p,
                              apr_getopt_t *os,
-                             apr_array_header_t *known_targets,
+                             const apr_array_header_t *known_targets,
                              svn_opt_revision_t *start_revision,
                              svn_opt_revision_t *end_revision,
                              svn_boolean_t extract_revisions,
@@ -604,31 +616,31 @@
                        apr_pool_t *pool);
 
 /**
- * Parse a working-copy or URL in @a path, extracting any trailing
+ * Parse a working-copy path or URL in @a path, extracting any trailing
  * revision specifier of the form "@rev" from the last component of
  * the path.
  *
  * Some examples would be:
  *
- *    "foo/bar"                      -> "foo/bar",       (unspecified)
- *    "foo/bar at 13"                   -> "foo/bar",       (number, 13)
- *    "foo/bar at HEAD"                 -> "foo/bar",       (head)
- *    "foo/bar@{1999-12-31}"         -> "foo/bar",       (date, 1999-12-31)
- *    "http://a/b@27"                -> "http://a/b",    (number, 27)
- *    "http://a/b@COMMITTED"         -> "http://a/b",    (committed) [*]
- *    "http://a/b@{1999-12-31}       -> "http://a/b",    (date, 1999-12-31)
- *    "http://a/b@%7B1999-12-31%7D   -> "http://a/b",    (date, 1999-12-31)
- *    "foo/bar at 1:2"                  -> error
- *    "foo/bar at baz"                  -> error
- *    "foo/bar@"                     -> "foo/bar",       (base)
- *    "foo/@bar@"                    -> "foo/@bar",      (base)
- *    "foo/bar/@13"                  -> "foo/bar/",      (number, 13)
- *    "foo/bar@@13"                  -> "foo/bar@",      (number, 13)
- *    "foo/@bar at HEAD"                -> "foo/@bar",      (head)
- *    "foo@/bar"                     -> "foo@/bar",      (unspecified)
- *    "foo at HEAD/bar"                 -> "foo at HEAD/bar",  (unspecified)
- *    "@foo/bar"                     -> error
- *    "@foo/bar@"                    -> "@foo/bar",      (unspecified)
+ *   - "foo/bar"                      -> "foo/bar",       (unspecified)
+ *   - "foo/bar at 13"                   -> "foo/bar",       (number, 13)
+ *   - "foo/bar at HEAD"                 -> "foo/bar",       (head)
+ *   - "foo/bar@{1999-12-31}"         -> "foo/bar",       (date, 1999-12-31)
+ *   - "http://a/b@27"                -> "http://a/b",    (number, 27)
+ *   - "http://a/b@COMMITTED"         -> "http://a/b",    (committed) [*]
+ *   - "http://a/b@{1999-12-31}"      -> "http://a/b",    (date, 1999-12-31)
+ *   - "http://a/b@%7B1999-12-31%7D"  -> "http://a/b",    (date, 1999-12-31)
+ *   - "foo/bar at 1:2"                  -> error
+ *   - "foo/bar at baz"                  -> error
+ *   - "foo/bar@"                     -> "foo/bar",       (unspecified)
+ *   - "foo/@bar@"                    -> "foo/@bar",      (unspecified)
+ *   - "foo/bar/@13"                  -> "foo/bar/",      (number, 13)
+ *   - "foo/bar@@13"                  -> "foo/bar@",      (number, 13)
+ *   - "foo/@bar at HEAD"                -> "foo/@bar",      (head)
+ *   - "foo@/bar"                     -> "foo@/bar",      (unspecified)
+ *   - "foo at HEAD/bar"                 -> "foo at HEAD/bar",  (unspecified)
+ *   - "@foo/bar"                     -> "@foo/bar",      (unspecified)
+ *   - "@foo/bar@"                    -> "@foo/bar",      (unspecified)
  *
  *   [*] Syntactically valid but probably not semantically useful.
  *

Modified: trunk/GME/Include/subversion/svn_path.h
==============================================================================
--- trunk/GME/Include/subversion/svn_path.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_path.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -49,6 +54,7 @@
 
 #include "svn_types.h"
 #include "svn_string.h"
+#include "svn_dirent_uri.h"
 
 
 #ifdef __cplusplus
@@ -57,11 +63,21 @@
 
 
 
-/** Convert @a path from the local style to the canonical internal style. */
+/** Convert @a path from the local style to the canonical internal style.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_internal_style().
+ */
+SVN_DEPRECATED
 const char *
 svn_path_internal_style(const char *path, apr_pool_t *pool);
 
-/** Convert @a path from the canonical internal style to the local style. */
+/** Convert @a path from the canonical internal style to the local style.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_local_style().
+ */
+SVN_DEPRECATED
 const char *
 svn_path_local_style(const char *path, apr_pool_t *pool);
 
@@ -88,7 +104,12 @@
  * based on a leading '/' character.  Thus, an "absolute URI" for the
  * @a component won't be detected. An absolute URI can only be used
  * for the base.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_join(), svn_uri_join(),
+ * svn_relpath_join() or svn_fspath__join().
  */
+SVN_DEPRECATED
 char *
 svn_path_join(const char *base, const char *component, apr_pool_t *pool);
 
@@ -103,7 +124,12 @@
  * This function does not support URLs.
  *
  * See svn_path_join() for further notes about joining paths.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * For new code, consider using svn_dirent_join_many() or a sequence of
+ * calls to one of the *_join() functions.
  */
+SVN_DEPRECATED
 char *
 svn_path_join_many(apr_pool_t *pool, const char *base, ...);
 
@@ -119,7 +145,12 @@
  * The returned basename will be allocated in @a pool.
  *
  * @note If an empty string is passed, then an empty string will be returned.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_basename(), svn_uri_basename(),
+ * svn_relpath_basename() or svn_fspath__basename().
  */
+SVN_DEPRECATED
 char *
 svn_path_basename(const char *path, apr_pool_t *pool);
 
@@ -128,7 +159,12 @@
  * returned unchanged.
  *
  * The returned dirname will be allocated in @a pool.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_dirname(), svn_uri_dirname(),
+ * svn_relpath_dirname() or svn_fspath__dirname().
  */
+SVN_DEPRECATED
 char *
 svn_path_dirname(const char *path, apr_pool_t *pool);
 
@@ -195,7 +231,12 @@
  *             - <pre>"X:/"           ==>  "X:/" and "X:/"</pre>
  *             - <pre>"bar"           ==>  ""   and "bar"</pre>
  *             - <pre>""              ==>  ""   and ""</pre>
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_split(), svn_uri_split(),
+ * svn_relpath_split() or svn_fspath__split().
  */
+SVN_DEPRECATED
 void
 svn_path_split(const char *path,
                const char **dirpath,
@@ -210,13 +251,15 @@
 int
 svn_path_is_empty(const char *path);
 
+
 #ifndef SVN_DIRENT_URI_H
-/* This declaration has been moved to svn_dirent_uri.h, remains here only for
-   compatiblity reasons. */
+/* This declaration has been moved to svn_dirent_uri.h, and remains
+   here only for compatibility reasons. */
 svn_boolean_t
 svn_dirent_is_root(const char *dirent, apr_size_t len);
 #endif /* SVN_DIRENT_URI_H */
 
+
 /** Return a new path (or URL) like @a path, but transformed such that
  * some types of path specification redundancies are removed.
  *
@@ -229,7 +272,12 @@
  *
  * The returned path may be statically allocated, equal to @a path, or
  * allocated from @a pool.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_canonicalize(), svn_uri_canonicalize(),
+ * svn_relpath_canonicalize() or svn_fspath__canonicalize().
  */
+SVN_DEPRECATED
 const char *
 svn_path_canonicalize(const char *path, apr_pool_t *pool);
 
@@ -237,7 +285,11 @@
  * allocations.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_is_canonical(), svn_uri_is_canonical(),
+ * svn_relpath_is_canonical() or svn_fspath__is_canonical().
  */
+SVN_DEPRECATED
 svn_boolean_t
 svn_path_is_canonical(const char *path, apr_pool_t *pool);
 
@@ -258,7 +310,13 @@
  * with the same path but different protocols may point at completely
  * different resources), and (b) share a common ancestor in their path
  * component, i.e. 'protocol://' is not a sufficient ancestor.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_get_longest_ancestor(),
+ * svn_uri_get_longest_ancestor(), svn_relpath_get_longest_ancestor() or
+ * svn_fspath__get_longest_ancestor().
  */
+SVN_DEPRECATED
 char *
 svn_path_get_longest_ancestor(const char *path1,
                               const char *path2,
@@ -269,7 +327,11 @@
  *
  * @a relative may be a URL, in which case no attempt is made to convert it,
  * and a copy of the URL is returned.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_get_absolute() on a non-URL input.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_path_get_absolute(const char **pabsolute,
                       const char *relative,
@@ -280,7 +342,12 @@
  * directory, set @a *pdirectory to @a path, and @a *pfile to the
  * empty string.  If @a path does not exist it is treated as if it is
  * a file, since directories do not normally vanish.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should implement the required logic directly; no direct
+ * replacement is provided.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_path_split_if_file(const char *path,
                        const char **pdirectory,
@@ -316,7 +383,13 @@
  * applicable) @a *pcondensed_targets to @c NULL.
  *
  * @note There is no guarantee that @a *pcommon is within a working
- * copy.  */
+ * copy.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_condense_targets() or
+ * svn_uri_condense_targets().
+ */
+SVN_DEPRECATED
 svn_error_t *
 svn_path_condense_targets(const char **pcommon,
                           apr_array_header_t **pcondensed_targets,
@@ -435,11 +508,11 @@
  *       in which case a pointer into @a path2 will be returned to
  *       identify the remainder path.
  *
- * ### @todo the ".." restriction is unfortunate, and would ideally
- * be lifted by making the implementation smarter.  But this is not
- * trivial: if the path is "../foo", how do you know whether or not
- * the current directory is named "foo" in its parent?
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_is_child(), svn_uri_is_child(),
+ * svn_relpath_is_child() or svn_fspath__is_child().
  */
+SVN_DEPRECATED
 const char *
 svn_path_is_child(const char *path1, const char *path2, apr_pool_t *pool);
 
@@ -447,7 +520,12 @@
  * and FALSE otherwise.
  *
  * @since New in 1.3.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_dirent_is_ancestor(), svn_uri_is_ancestor(),
+ * svn_relpath_is_ancestor() or svn_fspath__is_ancestor().
  */
+SVN_DEPRECATED
 svn_boolean_t
 svn_path_is_ancestor(const char *path1, const char *path2);
 
@@ -530,7 +608,7 @@
                             const char *component,
                             apr_pool_t *pool);
 
-/** Like svn_path_url_add_component2, but allows path components that
+/** Like svn_path_url_add_component2(), but allows path components that
  * end with a trailing '/'
  *
  * @deprecated Provided for backward compatibility with the 1.5 API.

Modified: trunk/GME/Include/subversion/svn_pools.h
==============================================================================
--- trunk/GME/Include/subversion/svn_pools.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_pools.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
  *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *

Modified: trunk/GME/Include/subversion/svn_props.h
==============================================================================
--- trunk/GME/Include/subversion/svn_props.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_props.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -92,6 +97,19 @@
                        apr_pool_t *pool);
 
 /**
+ * Given an array of svn_prop_t items, return a hash mapping const char *
+ * property names to const svn_string_t * values.
+ *
+ * @warning The behaviour on #svn_prop_t objects with a @c NULL @c
+ * svn_prop_t.value member is undefined.
+ *
+ * @since New in 1.7.
+ */
+apr_hash_t *
+svn_prop_array_to_hash(const apr_array_header_t *properties,
+                       apr_pool_t *result);
+
+/**
  * Creates a deep copy of @a hash (keys <tt>const char *</tt> and
  * values <tt>const svn_string_t</tt>) in @a pool.
  *
@@ -102,6 +120,17 @@
                   apr_pool_t *pool);
 
 /**
+ * Return the value of property @a prop_name as it is in @a properties,
+ * with values <tt>const svn_string_t</tt>. If @a prop_name is not
+ * in @a properties or @a properties is NULL, return NULL.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_prop_get_value(apr_hash_t *properties,
+                   const char *prop_name);
+
+/**
  * Subversion distinguishes among several kinds of properties,
  * particularly on the client-side.  There is no "unknown" kind; if
  * there's nothing special about a property name, the default category
@@ -175,11 +204,6 @@
  * are uninterested.  If no props exist in a certain category, and the
  * property list argument for that category is non-NULL, then that
  * array will come back with <tt>->nelts == 0</tt>.
- *
- * ### Hmmm, maybe a better future interface is to return an array of
- *     arrays, where the index into the array represents the index
- *     into @c svn_prop_kind_t.  That way we can add more prop kinds
- *     in the future without changing this interface...
  */
 svn_error_t *
 svn_categorize_props(const apr_array_header_t *proplist,
@@ -253,7 +277,7 @@
  * @{
  */
 
-/* Properties whose values are interpreted as booleans (such as
+/** Properties whose values are interpreted as booleans (such as
  * svn:executable, svn:needs_lock, and svn:special) always fold their
  * value to this.
  *
@@ -308,13 +332,14 @@
  *
  * The format is a series of lines, such as:
  *
- *@verbatim
+ * <pre reason="Should use 'verbatim' instead, but Doxygen v1.6.1 & v1.7.1
+ *              then doesn't recognize the #define; presumably a bug.">
      localdir1           http://url.for.external.source/etc/
      localdir1/foo       http://url.for.external.source/foo
      localdir1/bar       http://blah.blah.blah/repositories/theirproj
      localdir1/bar/baz   http://blorg.blorg.blorg/basement/code
      localdir2           http://another.url/blah/blah/blah
-     localdir3           http://and.so.on/and/so/forth @endverbatim
+     localdir3           http://and.so.on/and/so/forth </pre>
  *
  * The subdir names on the left side are relative to the directory on
  * which this property is set.
@@ -335,15 +360,10 @@
 
 /** Meta-data properties.
  *
- * ====================================================================
- * They are documented here to avoid name reuse in other branches;
- * the "plain" subversion doesn't use them (yet?).
- * ====================================================================
- *
  * The following properties are used for storing meta-data about
  * individual entries in the meta-data branches of subversion,
  * see issue #1256 or browseable at
- * http://svn.collab.net/viewvc/svn/branches/meta-data-versioning/ .
+ * http://svn.apache.org/viewvc/subversion/branches/meta-data-versioning/ .
  * Furthermore @c svntar (http://svn.borg.ch/svntar/) and @c FSVS
  * (http://fsvs.tigris.org/) use these, too.
  *
@@ -389,12 +409,13 @@
 
 /** The property name *prefix* that makes a property a "WC property".
  *
- * For example, WebDAV RA implementations might store a versioned-resource url as a WC
- * prop like this:
+ * For example, WebDAV RA implementations might store a versioned-resource
+ * url as a WC prop like this:
  *
- * @verbatim
+ * <pre reason="Should use 'verbatim' instead, but Doxygen v1.6.1 & v1.7.1
+ *              then doesn't recognize the #define; presumably a bug.">
       name = svn:wc:dav_url
-      val  = http://www.lyra.org/repos/452348/e.289 @endverbatim
+      val  = http://www.example.com/repos/452348/e.289 </pre>
  *
  * The client will try to protect WC props by warning users against
  * changing them.  The client will also send them back to the RA layer

Modified: trunk/GME/Include/subversion/svn_quoprint.h
==============================================================================
--- trunk/GME/Include/subversion/svn_quoprint.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_quoprint.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
  *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *

Modified: trunk/GME/Include/subversion/svn_ra.h
==============================================================================
--- trunk/GME/Include/subversion/svn_ra.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_ra.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -60,13 +65,13 @@
  * @a close_baton as appropriate.
  *
  * @a path is relative to the "root" of the session, defined by the
- * @a repos_URL passed to svn_ra_open3() vtable call.
+ * @a repos_URL passed to svn_ra_open4() vtable call.
  *
  * @a name is the name of the property to fetch. If the property is present,
  * then it is returned in @a value. Otherwise, @a *value is set to @c NULL.
  */
 typedef svn_error_t *(*svn_ra_get_wc_prop_func_t)(void *baton,
-                                                  const char *relpath,
+                                                  const char *path,
                                                   const char *name,
                                                   const svn_string_t **value,
                                                   apr_pool_t *pool);
@@ -117,14 +122,16 @@
 
 
 /** A function type for retrieving the youngest revision from a repos. */
-typedef svn_error_t *(*svn_ra_get_latest_revnum_func_t)
-  (void *session_baton,
-   svn_revnum_t *latest_revnum);
+typedef svn_error_t *(*svn_ra_get_latest_revnum_func_t)(
+  void *session_baton,
+  svn_revnum_t *latest_revnum);
 
 /** A function type which allows the RA layer to ask about any
  * customizations to the client name string.  This is primarily used
  * by HTTP-based RA layers wishing to extend the string reported to
  * Apache/mod_dav_svn via the User-agent HTTP header.
+ *
+ * @since New in 1.5.
  */
 typedef svn_error_t *(*svn_ra_get_client_string_func_t)(void *baton,
                                                         const char **name,
@@ -147,15 +154,15 @@
  *
  * @since New in 1.1.
  */
-typedef svn_error_t *(*svn_ra_file_rev_handler_t)
-  (void *baton,
-   const char *path,
-   svn_revnum_t rev,
-   apr_hash_t *rev_props,
-   svn_txdelta_window_handler_t *delta_handler,
-   void **delta_baton,
-   apr_array_header_t *prop_diffs,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_ra_file_rev_handler_t)(
+  void *baton,
+  const char *path,
+  svn_revnum_t rev,
+  apr_hash_t *rev_props,
+  svn_txdelta_window_handler_t *delta_handler,
+  void **delta_baton,
+  apr_array_header_t *prop_diffs,
+  apr_pool_t *pool);
 
 /**
  * Callback function type for locking and unlocking actions.
@@ -214,13 +221,13 @@
  *
  * @since New in 1.5.
  */
-typedef svn_error_t *(*svn_ra_replay_revstart_callback_t)
-  (svn_revnum_t revision,
-   void *replay_baton,
-   const svn_delta_editor_t **editor,
-   void **edit_baton,
-   apr_hash_t *rev_props,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_ra_replay_revstart_callback_t)(
+  svn_revnum_t revision,
+  void *replay_baton,
+  const svn_delta_editor_t **editor,
+  void **edit_baton,
+  apr_hash_t *rev_props,
+  apr_pool_t *pool);
 
 /**
  * Callback function type for replay_range actions.
@@ -238,13 +245,13 @@
  *
  * @since New in 1.5.
  */
-typedef svn_error_t *(*svn_ra_replay_revfinish_callback_t)
-  (svn_revnum_t revision,
-   void *replay_baton,
-   const svn_delta_editor_t *editor,
-   void *edit_baton,
-   apr_hash_t *rev_props,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_ra_replay_revfinish_callback_t)(
+  svn_revnum_t revision,
+  void *replay_baton,
+  const svn_delta_editor_t *editor,
+  void *edit_baton,
+  apr_hash_t *rev_props,
+  apr_pool_t *pool);
 
 
 /**
@@ -287,7 +294,7 @@
    * implementor should assume the directory has no entries or props.
    *
    * This will *override* any previous set_path() calls made on parent
-   * paths.  @a path is relative to the URL specified in svn_ra_open3().
+   * paths.  @a path is relative to the URL specified in svn_ra_open4().
    *
    * If @a lock_token is non-NULL, it is the lock token for @a path in the WC.
    *
@@ -438,7 +445,7 @@
 /** A collection of callbacks implemented by libsvn_client which allows
  * an RA layer to "pull" information from the client application, or
  * possibly store information.  libsvn_client passes this vtable to
- * svn_ra_open3().
+ * svn_ra_open4().
  *
  * Each routine takes a @a callback_baton originally provided with the
  * vtable.
@@ -496,7 +503,7 @@
   /** Notification callback baton, used with progress_func. */
   void *progress_baton;
 
-  /** Cancelation function
+  /** Cancellation function
    *
    * As its baton, the general callback baton is used
    *
@@ -573,8 +580,19 @@
 typedef struct svn_ra_session_t svn_ra_session_t;
 
 /**
- * Open a repository session to @a repos_URL.  Return an opaque object
- * representing this session in @a *session_p, allocated in @a pool.
+ * Open a repository access session to the repository at @a repos_URL,
+ * or inform the caller regarding a correct URL by which to access
+ * that repository.
+ *
+ * If @a repos_URL can be used successfully to access the repository,
+ * set @a *session_p to an opaque object representing a repository
+ * session for the repository and (if @a corrected_url is non-NULL)
+ * set @a *corrected_url to NULL.  If there's a better URL that the
+ * caller should try and @a corrected_url is non-NULL, set
+ * @a *session_p to NULL and @a *corrected_url to the corrected URL.  If
+ * there's a better URL that the caller should try, and @a
+ * corrected_url is NULL, return an #SVN_ERR_RA_SESSION_URL_MISMATCH
+ * error.  Allocate all returned items in @a pool.
  *
  * Return @c SVN_ERR_RA_UUID_MISMATCH if @a uuid is non-NULL and not equal
  * to the UUID of the repository at @c repos_URL.
@@ -591,8 +609,25 @@
  *
  * @see svn_client_open_ra_session().
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_ra_open4(svn_ra_session_t **session_p,
+             const char **corrected_url,
+             const char *repos_URL,
+             const char *uuid,
+             const svn_ra_callbacks2_t *callbacks,
+             void *callback_baton,
+             apr_hash_t *config,
+             apr_pool_t *pool);
+
+/** Similar to svn_ra_open4(), but with @a corrected_url always passed
+ * as @c NULL.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_ra_open3(svn_ra_session_t **session_p,
              const char *repos_URL,
@@ -603,7 +638,7 @@
              apr_pool_t *pool);
 
 /**
- * Similiar to svn_ra_open3(), but with @a uuid set to @c NULL.
+ * Similar to svn_ra_open3(), but with @a uuid set to @c NULL.
  *
  * @since New in 1.3.
  * @deprecated Provided for backward compatibility with the 1.4 API.
@@ -647,6 +682,8 @@
 
 /** Set @a *url to the repository URL to which @a ra_session was
  * opened or most recently reparented.
+ *
+ * @since New in 1.5.
  */
 svn_error_t *
 svn_ra_get_session_url(svn_ra_session_t *ra_session,
@@ -654,6 +691,37 @@
                        apr_pool_t *pool);
 
 
+/** Convert @a url into a path relative to the URL at which @a ra_session
+ * is parented, setting @a *rel_path to that value.  If @a url is not
+ * a child of the session URL, return @c SVN_ERR_RA_ILLEGAL_URL.
+ *
+ * The returned path is uri decoded to allow using it with the ra or other
+ * apis as a valid relpath.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_ra_get_path_relative_to_session(svn_ra_session_t *ra_session,
+                                    const char **rel_path,
+                                    const char *url,
+                                    apr_pool_t *pool);
+
+/** Convert @a url into a path relative to the repository root URL of
+ * the repository with which @a ra_session is associated, setting @a
+ * *rel_path to that value.  If @a url is not a child of repository
+ * root URL, return @c SVN_ERR_RA_ILLEGAL_URL.
+ *
+ * The returned path is uri decoded to allow using it with the ra or other
+ * apis as a valid relpath.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_ra_get_path_relative_to_root(svn_ra_session_t *ra_session,
+                                 const char **rel_path,
+                                 const char *url,
+                                 apr_pool_t *pool);
+
 /**
  * Get the latest revision number from the repository of @a session.
  *
@@ -686,12 +754,40 @@
  *
  * If @a value is @c NULL, delete the named revision property.
  *
+ * If the server advertises the #SVN_RA_CAPABILITY_ATOMIC_REVPROPS capability
+ * and @a old_value_p is not @c NULL, then changing the property will fail with
+ * an error chain that contains #SVN_ERR_FS_PROP_BASEVALUE_MISMATCH if the
+ * present value of the property is not @a *old_value_p.  (This is an atomic
+ * test-and-set).
+ * @a *old_value_p may be @c NULL, representing that the property must be not
+ * already set.
+ *
+ * If the capability is not advertised, then @a old_value_p MUST be @c NULL.
+ *
  * Please note that properties attached to revisions are @em unversioned.
  *
  * Use @a pool for memory allocation.
  *
+ * @see svn_fs_change_rev_prop2(), svn_error_find_cause().
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_ra_change_rev_prop2(svn_ra_session_t *session,
+                        svn_revnum_t rev,
+                        const char *name,
+                        const svn_string_t *const *old_value_p,
+                        const svn_string_t *value,
+                        apr_pool_t *pool);
+
+/**
+ * Similar to svn_ra_change_rev_prop2(), but with @a old_value_p set
+ * to @c NULL.
+ *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_ra_change_rev_prop(svn_ra_session_t *session,
                        svn_revnum_t rev,
@@ -745,8 +841,8 @@
  * or @c SVN_PROP_REVISION_AUTHOR.
  *
  * Before @c close_edit returns, but after the commit has succeeded,
- * it will invoke @a callback with the new revision number, the
- * commit date (as a <tt>const char *</tt>), commit author (as a
+ * it will invoke @a callback (if non-NULL) with the new revision number,
+ * the commit date (as a <tt>const char *</tt>), commit author (as a
  * <tt>const char *</tt>), and @a callback_baton as arguments.  If
  * @a callback returns an error, that error will be returned from @c
  * close_edit, otherwise @c close_edit will return successfully
@@ -1123,7 +1219,10 @@
  * represented by the @a session's URL, or empty if the entire directory
  * is meant to be examined.
  *
- * Get status only as deeply as @a depth indicates.
+ * Get status as deeply as @a depth indicates. If @a depth is
+ * #svn_depth_unknown, get the status down to the ambient depth of the
+ * working copy. If @a depth is deeper than the working copy, include changes
+ * that would be needed to populate the working copy to that depth.
  *
  * The caller may not perform any RA operations using @a session
  * before finishing the report, and may not perform any RA operations
@@ -1305,7 +1404,7 @@
  * If @a limit is non-zero only invoke @a receiver on the first @a limit
  * logs.
  *
- * If @a discover_changed_paths, then each call to receiver passes a
+ * If @a discover_changed_paths, then each call to @a receiver passes a
  * <tt>const apr_hash_t *</tt> for the receiver's @a changed_paths argument;
  * the hash's keys are all the paths committed in that revision.
  * Otherwise, each call to receiver passes NULL for @a changed_paths.
@@ -1481,7 +1580,7 @@
                      apr_hash_t **locations,
                      const char *path,
                      svn_revnum_t peg_revision,
-                     apr_array_header_t *location_revisions,
+                     const apr_array_header_t *location_revisions,
                      apr_pool_t *pool);
 
 
@@ -1533,8 +1632,9 @@
  * empty file.  In the following calls, the delta will be against the
  * fulltext contents for the previous call.
  *
- * If @a include_merged_revisions is TRUE, revisions which a included as a
- * result of a merge between @a start and @a end will be included.
+ * If @a include_merged_revisions is TRUE, revisions which are
+ * included as a result of a merge between @a start and @a end will be
+ * included.
  *
  * @note This functionality is not available in pre-1.1 servers.  If the
  * server doesn't implement it, an alternative (but much slower)
@@ -1553,7 +1653,7 @@
                       apr_pool_t *pool);
 
 /**
- * Similiar to svn_ra_get_file_revs2(), but with @a include_merged_revisions
+ * Similar to svn_ra_get_file_revs2(), but with @a include_merged_revisions
  * set to FALSE.
  *
  * @since New in 1.2.
@@ -1657,6 +1757,11 @@
  * Set @a *locks to a hashtable which represents all locks on or
  * below @a path.
  *
+ * @a depth limits the returned locks to those associated with paths
+ * within the specified depth of @a path, and must be one of the
+ * following values:  #svn_depth_empty, #svn_depth_files,
+ * #svn_depth_immediates, or #svn_depth_infinity.
+ *
  * The hashtable maps (const char *) absolute fs paths to (const
  * svn_lock_t *) structures.  The hashtable -- and all keys and
  * values -- are allocated in @a pool.
@@ -1668,8 +1773,23 @@
  * server doesn't implement it, an @c SVN_ERR_RA_NOT_IMPLEMENTED error is
  * returned.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_ra_get_locks2(svn_ra_session_t *session,
+                  apr_hash_t **locks,
+                  const char *path,
+                  svn_depth_t depth,
+                  apr_pool_t *pool);
+
+/**
+ * Similar to svn_ra_get_locks2(), but with @a depth always passed as
+ * #svn_depth_infinity.
+ *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_ra_get_locks(svn_ra_session_t *session,
                  apr_hash_t **locks,
@@ -1743,24 +1863,6 @@
               apr_pool_t *pool);
 
 /**
- * Set @a *has to TRUE if the server represented by @a session has
- * @a capability (one of the capabilities beginning with
- * @c "SVN_RA_CAPABILITY_"), else set @a *has to FALSE.
- *
- * If @a capability isn't recognized, throw @c SVN_ERR_UNKNOWN_CAPABILITY,
- * with the effect on @a *has undefined.
- *
- * Use @a pool for all allocation.
- *
- * @since New in 1.5.
- */
-svn_error_t *
-svn_ra_has_capability(svn_ra_session_t *session,
-                      svn_boolean_t *has,
-                      const char *capability,
-                      apr_pool_t *pool);
-
-/**
  * Given @a path at revision @a peg_revision, set @a *revision_deleted to the
  * revision @a path was first deleted, within the inclusive revision range
  * defined by @a peg_revision and @a end_revision.  @a path is relative
@@ -1784,6 +1886,30 @@
                        apr_pool_t *pool);
 
 /**
+ * @defgroup Capabilities Dynamically query the server's capabilities.
+ *
+ * @{
+ */
+
+/**
+ * Set @a *has to TRUE if the server represented by @a session has
+ * @a capability (one of the capabilities beginning with
+ * @c "SVN_RA_CAPABILITY_"), else set @a *has to FALSE.
+ *
+ * If @a capability isn't recognized, throw @c SVN_ERR_UNKNOWN_CAPABILITY,
+ * with the effect on @a *has undefined.
+ *
+ * Use @a pool for all allocation.
+ *
+ * @since New in 1.5.
+ */
+svn_error_t *
+svn_ra_has_capability(svn_ra_session_t *session,
+                      svn_boolean_t *has,
+                      const char *capability,
+                      apr_pool_t *pool);
+
+/**
  * The capability of understanding @c svn_depth_t (e.g., the server
  * understands what the client means when the client describes the
  * depth of a working copy to the server.)
@@ -1823,6 +1949,14 @@
  */
 #define SVN_RA_CAPABILITY_COMMIT_REVPROPS "commit-revprops"
 
+/**
+ * The capability of specifying (and atomically verifying) expected
+ * preexisting values when modifying revprops.
+ *
+ * @since New in 1.7.
+ */
+#define SVN_RA_CAPABILITY_ATOMIC_REVPROPS "atomic-revprops"
+
 /*       *** PLEASE READ THIS IF YOU ADD A NEW CAPABILITY ***
  *
  * RA layers generally fetch all capabilities when asked about any
@@ -1835,6 +1969,9 @@
  * hook as a single, colon-separated string.
  */
 
+/** @} */
+
+
 /**
  * Append a textual list of all available RA modules to the stringbuf
  * @a output.

Modified: trunk/GME/Include/subversion/svn_ra_svn.h
==============================================================================
--- trunk/GME/Include/subversion/svn_ra_svn.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_ra_svn.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2006, 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -55,6 +60,8 @@
 #define SVN_RA_SVN_CAP_LOG_REVPROPS "log-revprops"
 /* maps to SVN_RA_CAPABILITY_PARTIAL_REPLAY */
 #define SVN_RA_SVN_CAP_PARTIAL_REPLAY "partial-replay"
+/* maps to SVN_RA_CAPABILITY_ATOMIC_REVPROPS */
+#define SVN_RA_SVN_CAP_ATOMIC_REVPROPS "atomic-revprops"
 
 /** ra_svn passes @c svn_dirent_t fields over the wire as a list of
  * words, these are the values used to represent each field.
@@ -154,8 +161,26 @@
  * input/output files.
  *
  * Either @a sock or @a in_file/@a out_file must be set, not both.
+ * Specify the desired network data compression level (zlib) from
+ * 0 (no compression) to 9 (best but slowest).
+ *
+ * @since New in 1.7.
  */
 svn_ra_svn_conn_t *
+svn_ra_svn_create_conn2(apr_socket_t *sock,
+                        apr_file_t *in_file,
+                        apr_file_t *out_file,
+                        int compression_level,
+                        apr_pool_t *pool);
+
+/** Similar to svn_ra_svn_create_conn2() but uses default
+ * compression level (#SVN_DELTA_COMPRESSION_LEVEL_DEFAULT) for network
+ * transmissions.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_ra_svn_conn_t *
 svn_ra_svn_create_conn(apr_socket_t *sock,
                        apr_file_t *in_file,
                        apr_file_t *out_file,
@@ -170,7 +195,7 @@
  */
 svn_error_t *
 svn_ra_svn_set_capabilities(svn_ra_svn_conn_t *conn,
-                            apr_array_header_t *list);
+                            const apr_array_header_t *list);
 
 /** Return @c TRUE if @a conn has the capability @a capability, or
  * @c FALSE if it does not. */
@@ -178,6 +203,13 @@
 svn_ra_svn_has_capability(svn_ra_svn_conn_t *conn,
                           const char *capability);
 
+/** Return the data compression level to use for network transmissions
+ *
+ * @since New in 1.7.
+ */
+int
+svn_ra_svn_compression_level(svn_ra_svn_conn_t *conn);
+
 /** Returns the remote address of the connection as a string, if known,
  *  or NULL if inapplicable. */
 const char *
@@ -281,11 +313,11 @@
  * Use the '!' format specifier to write partial tuples when you have
  * to transmit an array or other unusual data.  For example, to write
  * a tuple containing a revision, an array of words, and a boolean:
- * @verbatim
+ * @code
      SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "r(!", rev));
      for (i = 0; i < n; i++)
        SVN_ERR(svn_ra_svn_write_word(conn, pool, words[i]));
-     SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)b", flag)); @endverbatim
+     SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)b", flag)); @endcode
  */
 svn_error_t *
 svn_ra_svn_write_tuple(svn_ra_svn_conn_t *conn,
@@ -342,7 +374,7 @@
  * tuple specification; use 'B' instead.
  */
 svn_error_t *
-svn_ra_svn_parse_tuple(apr_array_header_t *list,
+svn_ra_svn_parse_tuple(const apr_array_header_t *list,
                        apr_pool_t *pool,
                        const char *fmt, ...);
 
@@ -360,7 +392,7 @@
  * @since New in 1.5.
  */
 svn_error_t *
-svn_ra_svn_parse_proplist(apr_array_header_t *list,
+svn_ra_svn_parse_proplist(const apr_array_header_t *list,
                           apr_pool_t *pool,
                           apr_hash_t **props);
 

Modified: trunk/GME/Include/subversion/svn_repos.h
==============================================================================
--- trunk/GME/Include/subversion/svn_repos.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_repos.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -32,7 +37,6 @@
 #include "svn_delta.h"
 #include "svn_fs.h"
 #include "svn_io.h"
-#include "svn_version.h"
 #include "svn_mergeinfo.h"
 
 
@@ -51,6 +55,25 @@
 svn_repos_version(void);
 
 
+/* Some useful enums.  They need to be declared here for the notification
+   system to pick them up. */
+/** The different "actions" attached to nodes in the dumpfile. */
+enum svn_node_action
+{
+  svn_node_action_change,
+  svn_node_action_add,
+  svn_node_action_delete,
+  svn_node_action_replace
+};
+
+/** The different policies for processing the UUID in the dumpfile. */
+enum svn_repos_load_uuid
+{
+  svn_repos_load_uuid_default,
+  svn_repos_load_uuid_ignore,
+  svn_repos_load_uuid_force
+};
+
 
 /** Callback type for checking authorization on paths produced by (at
  * least) svn_repos_dir_delta2().
@@ -83,7 +106,7 @@
  *
  * @since New in 1.3.
  */
-typedef enum
+typedef enum svn_repos_authz_access_t
 {
   /** No access. */
   svn_authz_none = 0,
@@ -142,7 +165,7 @@
    apr_pool_t *pool);
 
 /**
- * Similar to @c svn_file_rev_handler_t, but without the @a
+ * Similar to #svn_file_rev_handler_t, but without the @a
  * result_of_merge parameter.
  *
  * @deprecated Provided for backward compatibility with 1.4 API.
@@ -159,6 +182,164 @@
    apr_pool_t *pool);
 
 
+/* Notification system. */
+
+/** The type of action occurring.
+ *
+ * @since New in 1.7.
+ */
+typedef enum svn_repos_notify_action_t
+{
+  /** A warning message is waiting. */
+  svn_repos_notify_warning = 0,
+
+  /** A revision has finished being dumped. */
+  svn_repos_notify_dump_rev_end,
+
+  /** A revision has finished being verified. */
+  svn_repos_notify_verify_rev_end,
+
+  /** All revisions have finished being dumped. */
+  svn_repos_notify_dump_end,
+
+  /** All revisions have finished being verified. */
+  svn_repos_notify_verify_end,
+
+  /** packing of an FSFS shard has commenced */
+  svn_repos_notify_pack_shard_start,
+
+  /** packing of an FSFS shard is completed */
+  svn_repos_notify_pack_shard_end,
+
+  /** packing of the shard revprops has commenced */
+  svn_repos_notify_pack_shard_start_revprop,
+
+  /** packing of the shard revprops has completed */
+  svn_repos_notify_pack_shard_end_revprop,
+
+  /** A revision has begun loading */
+  svn_repos_notify_load_txn_start,
+
+  /** A revision has finished loading */
+  svn_repos_notify_load_txn_committed,
+
+  /** A node has begun loading */
+  svn_repos_notify_load_node_start,
+
+  /** A node has finished loading */
+  svn_repos_notify_load_node_done,
+
+  /** A copied node has been encountered */
+  svn_repos_notify_load_copied_node,
+
+  /** Mergeinfo has been normalized */
+  svn_repos_notify_load_normalized_mergeinfo,
+
+  /** The operation has acquired a mutex for the repo. */
+  svn_repos_notify_mutex_acquired,
+
+  /** Recover has started. */
+  svn_repos_notify_recover_start,
+
+  /** Upgrade has started. */
+  svn_repos_notify_upgrade_start
+
+} svn_repos_notify_action_t;
+
+/** The type of error occurring.
+ *
+ * @since New in 1.7.
+ */
+typedef enum svn_repos_notify_warning_t
+{
+  /** Referencing copy source data from a revision earlier than the
+   * first revision dumped. */
+  svn_repos_notify_warning_found_old_reference,
+
+  /** An #SVN_PROP_MERGEINFO property's encoded mergeinfo references a
+   * revision earlier than the first revision dumped. */
+  svn_repos_notify_warning_found_old_mergeinfo,
+
+  /** Found an invalid path in the filesystem.
+   * @see svn_fs.h:"Directory entry names and directory paths" */
+  /* ### TODO(doxygen): make that a proper doxygen link */
+  /* See svn_fs__path_valid(). */
+  svn_repos_notify_warning_invalid_fspath
+
+} svn_repos_notify_warning_t;
+
+/**
+ * Structure used by #svn_repos_notify_func_t.
+ *
+ * The only field guaranteed to be populated is @c action.  Other fields are
+ * dependent upon the @c action.  (See individual fields for more information.)
+ *
+ * @note Callers of notification functions should use
+ * svn_repos_notify_create() to create structures of this type to allow for
+ * future extensibility.
+ *
+ * @since New in 1.7.
+ */
+typedef struct svn_repos_notify_t
+{
+  /** Action that describes what happened in the repository. */
+  svn_repos_notify_action_t action;
+
+  /** For #svn_repos_notify_dump_rev_end and #svn_repos_notify_verify_rev_end,
+   * the revision which just completed. */
+  svn_revnum_t revision;
+
+  /** For #svn_repos_notify_warning, the warning object. Must be cleared
+      by the consumer of the notification. */
+  const char *warning_str;
+  svn_repos_notify_warning_t warning;
+
+  /** For #svn_repos_notify_pack_shard_start,
+      #svn_repos_notify_pack_shard_end,
+      #svn_repos_notify_pack_shard_start_revprop, and
+      #svn_repos_notify_pack_shard_end_revprop, the shard processed. */
+  apr_int64_t shard;
+
+  /** For #svn_repos_notify_load_committed_rev, the revision committed. */
+  svn_revnum_t new_revision;
+
+  /** For #svn_repos_notify_load_committed_rev, the source revision, if
+      different from @a new_revision, otherwise #SVN_INVALID_REVNUM.
+      For #svn_repos_notify_load_txn_start, the source revision. */
+  svn_revnum_t old_revision;
+
+  /** For #svn_repos_notify_load_node_start, the action being taken on the
+      node. */
+  enum svn_node_action node_action;
+
+  /** For #svn_repos_notify_load_node_start, the path of the node. */
+  const char *path;
+
+  /* NOTE: Add new fields at the end to preserve binary compatibility.
+     Also, if you add fields here, you have to update
+     svn_repos_notify_create(). */
+} svn_repos_notify_t;
+
+/** Callback for providing notification from the repository.
+ * Returns @c void.  Justification: success of an operation is not dependent
+ * upon successful notification of that operation.
+ *
+ * @since New in 1.7. */
+typedef void (*svn_repos_notify_func_t)(void *baton,
+                                        const svn_repos_notify_t *notify,
+                                        apr_pool_t *scratch_pool);
+
+/**
+ * Allocate an #svn_repos_notify_t structure in @a result_pool, initialize
+ * and return it.
+ *
+ * @since New in 1.7.
+ */
+svn_repos_notify_t *
+svn_repos_notify_create(svn_repos_notify_action_t action,
+                        apr_pool_t *result_pool);
+
+
 /** The repository object. */
 typedef struct svn_repos_t svn_repos_t;
 
@@ -182,8 +363,22 @@
  * Acquires a shared lock on the repository, and attaches a cleanup
  * function to @a pool to remove the lock.  If no lock can be acquired,
  * returns error, with undefined effect on @a *repos_p.  If an exclusive
- * lock is present, this blocks until it's gone.
+ * lock is present, this blocks until it's gone.  @a fs_config will be
+ * passed to the filesystem initialization function and may be @c NULL.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_open2(svn_repos_t **repos_p,
+                const char *path,
+                apr_hash_t *fs_config,
+                apr_pool_t *pool);
+
+/** Similar to svn_repos_open2() with @a fs_config set to NULL.
+ *
+ * @deprecated Provided for backward compatibility with 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_open(svn_repos_t **repos_p,
                const char *path,
@@ -193,7 +388,7 @@
  * directory structure, creating the filesystem, and so on.
  * Return the repository object in @a *repos_p, allocated in @a pool.
  *
- * @a config is a client configuration hash of @c svn_config_t * items
+ * @a config is a client configuration hash of #svn_config_t * items
  * keyed on config category names, and may be NULL.
  *
  * @a fs_config is passed to the filesystem, and may be NULL.
@@ -214,8 +409,8 @@
  * filesystem) located in the directory @a path to the latest version
  * supported by this library.  If the requested upgrade is not
  * supported due to the current state of the repository or it
- * underlying filesystem, return @c SVN_ERR_REPOS_UNSUPPORTED_UPGRADE
- * or @c SVN_ERR_FS_UNSUPPORTED_UPGRADE (respectively) and make no
+ * underlying filesystem, return #SVN_ERR_REPOS_UNSUPPORTED_UPGRADE
+ * or #SVN_ERR_FS_UNSUPPORTED_UPGRADE (respectively) and make no
  * changes to the repository or filesystem.
  *
  * Acquires an exclusive lock on the repository, upgrades the
@@ -239,8 +434,23 @@
  * It does *not* guarantee the most optimized repository state as a
  * dump and subsequent load would.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_upgrade2(const char *path,
+                   svn_boolean_t nonblocking,
+                   svn_repos_notify_func_t notify_func,
+                   void *notify_baton,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_upgrade2(), but with @a start_callback and baton,
+ * rather than a notify_callback / baton
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_upgrade(const char *path,
                   svn_boolean_t nonblocking,
@@ -260,7 +470,7 @@
  * capabilities beginning with @c "SVN_REPOS_CAPABILITY_"), else set
  * @a *has to FALSE.
  *
- * If @a capability isn't recognized, throw @c SVN_ERR_UNKNOWN_CAPABILITY,
+ * If @a capability isn't recognized, throw #SVN_ERR_UNKNOWN_CAPABILITY,
  * with the effect on @a *has undefined.
  *
  * Use @a pool for all allocation.
@@ -315,8 +525,24 @@
  * Possibly update the repository, @a repos, to use a more efficient
  * filesystem representation.  Use @a pool for allocations.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_fs_pack2(svn_repos_t *repos,
+                   svn_repos_notify_func_t notify_func,
+                   void *notify_baton,
+                   svn_cancel_func_t cancel_func,
+                   void *cancel_baton,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_fs_pack2(), but with a #svn_fs_pack_notify_t instead
+ * of a #svn_repos_notify_t.
+ *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_fs_pack(svn_repos_t *repos,
                   svn_fs_pack_notify_t notify_func,
@@ -325,7 +551,6 @@
                   void *cancel_baton,
                   apr_pool_t *pool);
 
-
 /**
  * Run database recovery procedures on the repository at @a path,
  * returning the database to a consistent state.  Use @a pool for all
@@ -338,8 +563,8 @@
  * If @a nonblocking is TRUE, an error of type EWOULDBLOCK is
  * returned if the lock is not immediately available.
  *
- * If @a start_callback is not NULL, it will be called with @a
- * start_callback_baton as argument before the recovery starts, but
+ * If @a notify_func is not NULL, it will be called with @a
+ * notify_baton as argument before the recovery starts, but
  * after the exclusive lock has been acquired.
  *
  * If @a cancel_func is not @c NULL, it is called periodically with
@@ -351,8 +576,25 @@
  * by a single threaded process, or by a multi-threaded process when
  * no other threads are accessing the repository.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_recover4(const char *path,
+                   svn_boolean_t nonblocking,
+                   svn_repos_notify_func_t notify_func,
+                   void *notify_baton,
+                   svn_cancel_func_t cancel_func,
+                   void * cancel_baton,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_recover4(), but with @a start callback in place of
+ * the notify_func / baton.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_recover3(const char *path,
                    svn_boolean_t nonblocking,
@@ -537,38 +779,39 @@
  * arguments to the editor's add_file() and add_directory() methods,
  * whenever it deems feasible.
  *
- * The @a authz_read_func and @a authz_read_baton are passed along to
- * svn_repos_dir_delta2(); see that function for how they are used.
+ * Use @a authz_read_func and @a authz_read_baton (if not @c NULL) to
+ * avoid sending data through @a editor/@a edit_baton which is not
+ * authorized for transmission.
  *
  * All allocation for the context and collected state will occur in
  * @a pool.
  *
  * @a depth is the requested depth of the editor drive.
  *
- * If @a depth is @c svn_depth_unknown, the editor will affect only the
- * paths reported by the individual calls to @c svn_repos_set_path3 and
- * @c svn_repos_link_path3.
+ * If @a depth is #svn_depth_unknown, the editor will affect only the
+ * paths reported by the individual calls to svn_repos_set_path3() and
+ * svn_repos_link_path3().
  *
  * For example, if the reported tree is the @c A subdir of the Greek Tree
- * (see Subversion's test suite), at depth @c svn_depth_empty, but the
- * @c A/B subdir is reported at depth @c svn_depth_infinity, then
+ * (see Subversion's test suite), at depth #svn_depth_empty, but the
+ * @c A/B subdir is reported at depth #svn_depth_infinity, then
  * repository-side changes to @c A/mu, or underneath @c A/C and @c
  * A/D, would not be reflected in the editor drive, but changes
  * underneath @c A/B would be.
  *
  * Additionally, the editor driver will call @c add_directory and
  * and @c add_file for directories with an appropriate depth.  For
- * example, a directory reported at @c svn_depth_files will receive
- * file (but not directory) additions.  A directory at @c svn_depth_empty
+ * example, a directory reported at #svn_depth_files will receive
+ * file (but not directory) additions.  A directory at #svn_depth_empty
  * will receive neither.
  *
- * If @a depth is @c svn_depth_files, @c svn_depth_immediates or
- * @c svn_depth_infinity and @a depth is greater than the reported depth
+ * If @a depth is #svn_depth_files, #svn_depth_immediates or
+ * #svn_depth_infinity and @a depth is greater than the reported depth
  * of the working copy, then the editor driver will emit editor
  * operations so as to upgrade the working copy to this depth.
  *
- * If @a depth is @c svn_depth_empty, @c svn_depth_files,
- * @c svn_depth_immediates and @a depth is lower
+ * If @a depth is #svn_depth_empty, #svn_depth_files,
+ * #svn_depth_immediates and @a depth is lower
  * than or equal to the depth of the working copy, then the editor
  * operations will affect only paths at or above @a depth.
  *
@@ -596,8 +839,8 @@
  * @a recurse flag, and sending FALSE for @a send_copyfrom_args.
  *
  * If @a recurse is TRUE, the editor driver will drive the editor with
- * a depth of @c svn_depth_infinity; if FALSE, then with a depth of
- * @c svn_depth_files.
+ * a depth of #svn_depth_infinity; if FALSE, then with a depth of
+ * #svn_depth_files.
  *
  * @note @a username is ignored, and has been removed in a revised
  * version of this API.
@@ -633,16 +876,16 @@
  *
  * @a revision may be SVN_INVALID_REVNUM if (for example) @a path
  * represents a locally-added path with no revision number, or @a
- * depth is @c svn_depth_exclude.
+ * depth is #svn_depth_exclude.
  *
  * @a path may not be underneath a path on which svn_repos_set_path3()
- * was previously called with @c svn_depth_exclude in this report.
+ * was previously called with #svn_depth_exclude in this report.
  *
  * The first call of this in a given report usually passes an empty
  * @a path; this is used to set up the correct root revision for the editor
  * drive.
  *
- * A depth of @c svn_depth_unknown is not allowed, and results in an
+ * A depth of #svn_depth_unknown is not allowed, and results in an
  * error.
  *
  * If @a start_empty is TRUE and @a path is a directory, then require the
@@ -668,7 +911,7 @@
 
 /**
  * Similar to svn_repos_set_path3(), but with @a depth set to
- * @c svn_depth_infinity.
+ * #svn_depth_infinity.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
@@ -699,11 +942,11 @@
  * record the presence of @a path in the current tree, containing the contents
  * of @a link_path at @a revision with depth @a depth.
  *
- * A depth of @c svn_depth_unknown is not allowed, and results in an
+ * A depth of #svn_depth_unknown is not allowed, and results in an
  * error.
  *
  * @a path may not be underneath a path on which svn_repos_set_path3()
- * was previously called with @c svn_depth_exclude in this report.
+ * was previously called with #svn_depth_exclude in this report.
  *
  * Note that while @a path is relative to the anchor/target used in the
  * creation of the @a report_baton, @a link_path is an absolute filesystem
@@ -733,7 +976,7 @@
 
 /**
  * Similar to svn_repos_link_path3(), but with @a depth set to
- * @c svn_depth_infinity.
+ * #svn_depth_infinity.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
@@ -765,7 +1008,7 @@
  * record the non-existence of @a path in the current tree.
  *
  * @a path may not be underneath a path on which svn_repos_set_path3()
- * was previously called with @c svn_depth_exclude in this report.
+ * was previously called with #svn_depth_exclude in this report.
  *
  * (This allows the reporter's driver to describe missing pieces of a
  * working copy, so that 'svn up' can recreate them.)
@@ -787,7 +1030,7 @@
  *
  * After the call to this function, @a report_baton is no longer valid;
  * it should not be passed to any other reporting functions, including
- * svn_repos_abort_report().
+ * svn_repos_abort_report(), even if this function returns an error.
  */
 svn_error_t *
 svn_repos_finish_report(void *report_baton,
@@ -844,11 +1087,11 @@
  * If @a text_deltas is @c FALSE, send a single @c NULL txdelta window to
  * the window handler returned by @a editor->apply_textdelta().
  *
- * If @a depth is @c svn_depth_empty, invoke @a editor calls only on
+ * If @a depth is #svn_depth_empty, invoke @a editor calls only on
  * @a src_entry (or @a src_parent_dir, if @a src_entry is empty).
- * If @a depth is @c svn_depth_files, also invoke the editor on file
- * children, if any; if @c svn_depth_immediates, invoke it on
- * immediate subdirectories as well as files; if @c svn_depth_infinity,
+ * If @a depth is #svn_depth_files, also invoke the editor on file
+ * children, if any; if #svn_depth_immediates, invoke it on
+ * immediate subdirectories as well as files; if #svn_depth_infinity,
  * recurse fully.
  *
  * If @a entry_props is @c TRUE, accompany each opened/added entry with
@@ -867,7 +1110,7 @@
  * proportional to the greatest depth of the tree under @a tgt_root, not
  * the total size of the delta.
  *
- * ### svn_repos_dir_delta2 is mostly superceded by the reporter
+ * ### svn_repos_dir_delta2 is mostly superseded by the reporter
  * ### functionality (svn_repos_begin_report2 and friends).
  * ### svn_repos_dir_delta2 does allow the roots to be transaction
  * ### roots rather than just revision roots, and it has the
@@ -894,8 +1137,8 @@
 
 /**
  * Similar to svn_repos_dir_delta2(), but if @a recurse is TRUE, pass
- * @c svn_depth_infinity for @a depth, and if @a recurse is FALSE,
- * pass @c svn_depth_files for @a depth.
+ * #svn_depth_infinity for @a depth, and if @a recurse is FALSE,
+ * pass #svn_depth_files for @a depth.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
@@ -922,7 +1165,7 @@
  * (revision or transaction).
  *
  * Changes will be limited to those within @a base_dir, and if
- * @a low_water_mark is set to something other than @c SVN_INVALID_REVNUM
+ * @a low_water_mark is set to something other than #SVN_INVALID_REVNUM
  * it is assumed that the client has no knowledge of revisions prior to
  * @a low_water_mark.  Together, these two arguments define the portion of
  * the tree that the client is assumed to have knowledge of, and thus any
@@ -962,7 +1205,7 @@
 
 /**
  * Similar to svn_repos_replay2(), but with @a base_dir set to @c "",
- * @a low_water_mark set to @c SVN_INVALID_REVNUM, @a send_deltas
+ * @a low_water_mark set to #SVN_INVALID_REVNUM, @a send_deltas
  * set to @c FALSE, and @a authz_read_func and @a authz_read_baton
  * set to @c NULL.
  *
@@ -991,11 +1234,11 @@
  * create (and fully manage) a new transaction.
  *
  * Store the contents of @a revprop_table, a hash mapping <tt>const
- * char *</tt> property names to @c svn_string_t values, as properties
+ * char *</tt> property names to #svn_string_t values, as properties
  * of the commit transaction, including author and log message if
  * present.
  *
- * @note @c SVN_PROP_REVISION_DATE may be present in @a revprop_table, but
+ * @note #SVN_PROP_REVISION_DATE may be present in @a revprop_table, but
  * it will be overwritten when the transaction is committed.
  *
  * Iff @a authz_callback is provided, check read/write authorizations
@@ -1007,7 +1250,7 @@
  *
  * If @a callback is non-NULL, then before @c close_edit returns (but
  * after the commit has succeeded) @c close_edit will invoke
- * @a callback with a filled-in @c svn_commit_info_t *, @a callback_baton,
+ * @a callback with a filled-in #svn_commit_info_t *, @a callback_baton,
  * and @a pool or some subpool thereof as arguments.  If @a callback
  * returns an error, that error will be returned from @c close_edit,
  * otherwise if there was a post-commit hook failure, then that error
@@ -1021,6 +1264,9 @@
  * for cleaning them up (either by committing them, or aborting them).
  *
  * @since New in 1.5.
+ *
+ * @note Yes, @a repos_url is a <em>decoded</em> URL.  We realize
+ * that's sorta wonky.  Sorry about that.
  */
 svn_error_t *
 svn_repos_get_commit_editor5(const svn_delta_editor_t **editor,
@@ -1039,7 +1285,7 @@
 /**
  * Similar to svn_repos_get_commit_editor5(), but with @a revprop_table
  * set to a hash containing @a user and @a log_msg as the
- * @c SVN_PROP_REVISION_AUTHOR and @c SVN_PROP_REVISION_LOG properties,
+ * #SVN_PROP_REVISION_AUTHOR and #SVN_PROP_REVISION_LOG properties,
  * respectively.  @a user and @a log_msg may both be @c NULL.
  *
  * @since New in 1.4.
@@ -1163,7 +1409,7 @@
 
 
 /**
- * Set @a *dirent to an @c svn_dirent_t associated with @a path in @a
+ * Set @a *dirent to an #svn_dirent_t associated with @a path in @a
  * root.  If @a path does not exist in @a root, set @a *dirent to
  * NULL.  Use @a pool for memory allocation.
  *
@@ -1203,7 +1449,7 @@
  * longer than a single callback call.
  *
  * Signal to callback driver to stop processing/invoking this callback
- * by returning the @c SVN_ERR_CEASE_INVOCATION error code.
+ * by returning the #SVN_ERR_CEASE_INVOCATION error code.
  *
  * @note SVN_ERR_CEASE_INVOCATION is new in 1.5.
  */
@@ -1216,7 +1462,7 @@
  * Call @a history_func (with @a history_baton) for each interesting
  * history location in the lifetime of @a path in @a fs, from the
  * youngest of @a end and @a start to the oldest.  Stop processing if
- * @a history_func returns @c SVN_ERR_CEASE_INVOCATION.  Only cross
+ * @a history_func returns #SVN_ERR_CEASE_INVOCATION.  Only cross
  * filesystem copy history if @a cross_copies is @c TRUE.  And do all
  * of this in @a pool.
  *
@@ -1287,7 +1533,7 @@
                                apr_hash_t **locations,
                                const char *fs_path,
                                svn_revnum_t peg_revision,
-                               apr_array_header_t *location_revisions,
+                               const apr_array_header_t *location_revisions,
                                svn_repos_authz_func_t authz_read_func,
                                void *authz_read_baton,
                                apr_pool_t *pool);
@@ -1299,23 +1545,23 @@
  * (inclusive) for the line of history identified by the peg-object @a
  * path in @a peg_revision (and in @a repos).
  *
- * @a end_rev may be @c SVN_INVALID_REVNUM to indicate that you want
+ * @a end_rev may be #SVN_INVALID_REVNUM to indicate that you want
  * to trace the history of the object to its origin.
  *
- * @a start_rev may be @c SVN_INVALID_REVNUM to indicate "the HEAD
+ * @a start_rev may be #SVN_INVALID_REVNUM to indicate "the HEAD
  * revision".  Otherwise, @a start_rev must be younger than @a end_rev
- * (unless @a end_rev is @c SVN_INVALID_REVNUM).
+ * (unless @a end_rev is #SVN_INVALID_REVNUM).
  *
- * @a peg_revision may be @c SVN_INVALID_REVNUM to indicate "the HEAD
+ * @a peg_revision may be #SVN_INVALID_REVNUM to indicate "the HEAD
  * revision", and must evaluate to be at least as young as @a start_rev.
  *
  * If optional @a authz_read_func is not @c NULL, then use it (and @a
  * authz_read_baton) to verify that the peg-object is readable.  If
- * not, return @c SVN_ERR_AUTHZ_UNREADABLE.  Also use the @a
+ * not, return #SVN_ERR_AUTHZ_UNREADABLE.  Also use the @a
  * authz_read_func to check that every path reported in a location
  * segment is readable.  If an unreadable path is encountered, report
  * a final (possibly truncated) location segment (if any), stop
- * tracing history, and return @c SVN_NO_ERROR.
+ * tracing history, and return #SVN_NO_ERROR.
  *
  * @a pool is used for all allocations.
  *
@@ -1355,7 +1601,7 @@
  * or less than @a end; this just controls whether the log messages are
  * processed in descending or ascending revision number order.
  *
- * If @a start or @a end is @c SVN_INVALID_REVNUM, it defaults to youngest.
+ * If @a start or @a end is #SVN_INVALID_REVNUM, it defaults to youngest.
  *
  * If @a paths is non-NULL and has one or more elements, then only show
  * revisions in which at least one of @a paths was changed (i.e., if
@@ -1377,7 +1623,10 @@
  * not be traversed while harvesting revision logs for each path.
  *
  * If @a include_merged_revisions is set, log information for revisions
- * which have been merged to @a targets will also be returned.
+ * which have been merged to @a paths will also be returned, unless these
+ * revisions are already part of @a start to @a end in @a repos's
+ * filesystem, as limited by @a paths. In the latter case those revisions
+ * are skipped and @a receiver is not invoked.
  *
  * If @a revprops is NULL, retrieve all revprops; else, retrieve only the
  * revprops named in the array (i.e. retrieve none if the array is empty).
@@ -1386,7 +1635,7 @@
  * immediately and without wrapping it.
  *
  * If @a start or @a end is a non-existent revision, return the error
- * @c SVN_ERR_FS_NO_SUCH_REVISION, without ever invoking @a receiver.
+ * #SVN_ERR_FS_NO_SUCH_REVISION, without ever invoking @a receiver.
  *
  * If optional @a authz_read_func is non-NULL, then use this function
  * (along with optional @a authz_read_baton) to check the readability
@@ -1398,7 +1647,7 @@
  * changed-paths readable at all, then all paths are omitted and no
  * revprops are available.
  *
- * See also the documentation for @c svn_log_entry_receiver_t.
+ * See also the documentation for #svn_log_entry_receiver_t.
  *
  * Use @a pool for temporary allocations.
  *
@@ -1421,8 +1670,8 @@
                     apr_pool_t *pool);
 
 /**
- * Same as svn_repos_get_logs4(), but with @a receiver being @c
- * svn_log_message_receiver_t instead of @c svn_log_entry_receiver_t.
+ * Same as svn_repos_get_logs4(), but with @a receiver being
+ * #svn_log_message_receiver_t instead of #svn_log_entry_receiver_t.
  * Also, @a include_merged_revisions is set to @c FALSE and @a revprops is
  * svn:author, svn:date, and svn:log.  If @a paths is empty, nothing
  * is returned.
@@ -1497,11 +1746,11 @@
  * @a inherit indicates whether explicit, explicit or inherited, or
  * only inherited mergeinfo for @a paths is fetched.
  *
- * If @a revision is @c SVN_INVALID_REVNUM, it defaults to youngest.
+ * If @a revision is #SVN_INVALID_REVNUM, it defaults to youngest.
  *
  * If @a include_descendants is TRUE, then additionally return the
  * mergeinfo for any descendant of any element of @a paths which has
- * the @c SVN_PROP_MERGEINFO property explicitly set on it.  (Note
+ * the #SVN_PROP_MERGEINFO property explicitly set on it.  (Note
  * that inheritance is only taken into account for the elements in @a
  * paths; descendants of the elements in @a paths which get their
  * mergeinfo via inheritance are not included in @a *catalog.)
@@ -1603,15 +1852,27 @@
  * @{
  */
 
-/** Like svn_fs_commit_txn(), but invoke the @a repos's pre- and
+/** Like svn_fs_commit_txn(), but invoke the @a repos' pre- and
  * post-commit hooks around the commit.  Use @a pool for any necessary
  * allocations.
  *
- * If the pre-commit hook or svn_fs_commit_txn() fails, throw the
- * original error to caller.  If an error occurs when running the
- * post-commit hook, return the original error wrapped with
- * SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED.  If the caller sees this
- * error, it knows that the commit succeeded anyway.
+ * If the pre-commit hook fails, do not attempt to commit the
+ * transaction and throw the original error to the caller.
+ *
+ * A successful commit is indicated by a valid revision value in @a
+ * *new_rev, not if svn_fs_commit_txn() returns an error, which can
+ * occur during its post commit FS processing.  If the transaction was
+ * not committed, then return the associated error and do not execute
+ * the post-commit hook.
+ *
+ * If the commit succeeds the post-commit hook is executed.  If the
+ * post-commit hook returns an error, always wrap it with
+ * SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED; this allows the caller to
+ * find the post-commit hook error in the returned error chain.  If
+ * both svn_fs_commit_txn() and the post-commit hook return errors,
+ * then svn_fs_commit_txn()'s error is the parent error and the
+ * SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED wrapped error is the child
+ * error.
  *
  * @a conflict_p, @a new_rev, and @a txn are as in svn_fs_commit_txn().
  */
@@ -1623,16 +1884,16 @@
                         apr_pool_t *pool);
 
 /** Like svn_fs_begin_txn(), but use @a revprop_table, a hash mapping
- * <tt>const char *</tt> property names to @c svn_string_t values, to
+ * <tt>const char *</tt> property names to #svn_string_t values, to
  * set the properties on transaction @a *txn_p.  @a repos is the
  * repository object which contains the filesystem.  @a rev, @a
  * *txn_p, and @a pool are as in svn_fs_begin_txn().
  *
  * Before a txn is created, the repository's start-commit hooks are
  * run; if any of them fail, no txn is created, @a *txn_p is unaffected,
- * and @c SVN_ERR_REPOS_HOOK_FAILURE is returned.
+ * and #SVN_ERR_REPOS_HOOK_FAILURE is returned.
  *
- * @note @a revprop_table may contain an @c SVN_PROP_REVISION_DATE property,
+ * @note @a revprop_table may contain an #SVN_PROP_REVISION_DATE property,
  * which will be set on the transaction, but that will be overwritten
  * when the transaction is committed.
  *
@@ -1649,7 +1910,7 @@
 /**
  * Same as svn_repos_fs_begin_txn_for_commit2(), but with @a revprop_table
  * set to a hash containing @a author and @a log_msg as the
- * @c SVN_PROP_REVISION_AUTHOR and @c SVN_PROP_REVISION_LOG properties,
+ * #SVN_PROP_REVISION_AUTHOR and #SVN_PROP_REVISION_LOG properties,
  * respectively.  @a author and @a log_msg may both be @c NULL.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
@@ -1682,7 +1943,7 @@
 
 /** @defgroup svn_repos_fs_locks Repository lock wrappers
  * @{
- * @since New in 1.2. */
+ */
 
 /** Like svn_fs_lock(), but invoke the @a repos's pre- and
  * post-lock hooks before and after the locking action.  Use @a pool
@@ -1697,6 +1958,8 @@
  * The pre-lock hook may cause a different token to be used for the
  * lock, instead of @a token; see the pre-lock-hook documentation for
  * more.
+ *
+ * @since New in 1.2.
  */
 svn_error_t *
 svn_repos_fs_lock(svn_lock_t **lock,
@@ -1720,6 +1983,8 @@
  * hook, return the original error wrapped with
  * SVN_ERR_REPOS_POST_UNLOCK_HOOK_FAILED.  If the caller sees this
  * error, it knows that the unlock succeeded anyway.
+ *
+ * @since New in 1.2.
  */
 svn_error_t *
 svn_repos_fs_unlock(svn_repos_t *repos,
@@ -1731,13 +1996,37 @@
 
 
 /** Look up all the locks in and under @a path in @a repos, setting @a
- * *locks to a hash which maps <tt>const char *</tt> paths to the @c
- * svn_lock_t locks associated with those paths.  Use @a
+ * *locks to a hash which maps <tt>const char *</tt> paths to the
+ * #svn_lock_t locks associated with those paths.  Use @a
  * authz_read_func and @a authz_read_baton to "screen" all returned
  * locks.  That is: do not return any locks on any paths that are
  * unreadable in HEAD, just silently omit them.
+ *
+ * @a depth limits the returned locks to those associated with paths
+ * within the specified depth of @a path, and must be one of the
+ * following values:  #svn_depth_empty, #svn_depth_files,
+ * #svn_depth_immediates, or #svn_depth_infinity.
+ *
+ * @since New in 1.7.
  */
 svn_error_t *
+svn_repos_fs_get_locks2(apr_hash_t **locks,
+                        svn_repos_t *repos,
+                        const char *path,
+                        svn_depth_t depth,
+                        svn_repos_authz_func_t authz_read_func,
+                        void *authz_read_baton,
+                        apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_fs_get_locks2(), but with @a depth always
+ * passed as svn_depth_infinity.
+ *
+ * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
 svn_repos_fs_get_locks(apr_hash_t **locks,
                        svn_repos_t *repos,
                        const char *path,
@@ -1748,28 +2037,55 @@
 /** @} */
 
 /**
- * Like svn_fs_change_rev_prop(), but validate the name and value of the
+ * Like svn_fs_change_rev_prop2(), but validate the name and value of the
  * property and invoke the @a repos's pre- and post-revprop-change hooks
  * around the change as specified by @a use_pre_revprop_change_hook and
  * @a use_post_revprop_change_hook (respectively).
  *
  * @a rev is the revision whose property to change, @a name is the
  * name of the property, and @a new_value is the new value of the
- * property.   @a author is the authenticated username of the person
+ * property.   If @a old_value_p is not @c NULL, then @a *old_value_p
+ * is the expected current (preexisting) value of the property (or @c NULL
+ * for "unset").  @a author is the authenticated username of the person
  * changing the property value, or NULL if not available.
  *
  * If @a authz_read_func is non-NULL, then use it (with @a
  * authz_read_baton) to validate the changed-paths associated with @a
  * rev.  If the revision contains any unreadable changed paths, then
- * return SVN_ERR_AUTHZ_UNREADABLE.
+ * return #SVN_ERR_AUTHZ_UNREADABLE.
  *
  * Validate @a name and @a new_value like the same way
  * svn_repos_fs_change_node_prop() does.
  *
  * Use @a pool for temporary allocations.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_fs_change_rev_prop4(svn_repos_t *repos,
+                              svn_revnum_t rev,
+                              const char *author,
+                              const char *name,
+                              const svn_string_t *const *old_value_p,
+                              const svn_string_t *new_value,
+                              svn_boolean_t
+                              use_pre_revprop_change_hook,
+                              svn_boolean_t
+                              use_post_revprop_change_hook,
+                              svn_repos_authz_func_t
+                              authz_read_func,
+                              void *authz_read_baton,
+                              apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_fs_change_rev_prop4(), but with @a old_value_p always
+ * set to @c NULL.  (In other words, it is similar to
+ * svn_fs_change_rev_prop().)
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  * @since New in 1.5.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_fs_change_rev_prop3(svn_repos_t *repos,
                               svn_revnum_t rev,
@@ -1850,8 +2166,8 @@
 /**
  * Set @a *table_p to the entire property list of revision @a rev in
  * filesystem opened in @a repos, as a hash table allocated in @a
- * pool.  The table maps <tt>char *</tt> property names to @c
- * svn_string_t * values; the names and values are allocated in @a
+ * pool.  The table maps <tt>char *</tt> property names to
+ * #svn_string_t * values; the names and values are allocated in @a
  * pool.
  *
  * If @a authz_read_func is non-NULL, then use it (with @a
@@ -1885,13 +2201,13 @@
 /** Validating wrapper for svn_fs_change_node_prop() (which see for
  * argument descriptions).
  *
- * If @a name's kind is not @c svn_prop_regular_kind, return @c
- * SVN_ERR_REPOS_BAD_ARGS.  If @a name is an "svn:" property, validate its
+ * If @a name's kind is not #svn_prop_regular_kind, return
+ * #SVN_ERR_REPOS_BAD_ARGS.  If @a name is an "svn:" property, validate its
  * @a value and return SVN_ERR_BAD_PROPERTY_VALUE if it is invalid for the
  * property.
  *
  * @note Currently, the only properties validated are the "svn:" properties
- * @c SVN_PROP_REVISION_LOG and @c SVN_PROP_REVISION_DATE. This may change
+ * #SVN_PROP_REVISION_LOG and #SVN_PROP_REVISION_DATE. This may change
  * in future releases.
  */
 svn_error_t *
@@ -1919,7 +2235,7 @@
  */
 svn_error_t *
 svn_repos_fs_change_txn_props(svn_fs_txn_t *txn,
-                              apr_array_header_t *props,
+                              const apr_array_header_t *props,
                               apr_pool_t *pool);
 
 /** @} */
@@ -1927,20 +2243,20 @@
 /* ---------------------------------------------------------------*/
 
 /**
- * @defgroup svn_repos_inspection Data structures and editor things for
+ * @defgroup svn_repos_inspection Data structures and editor things for \
  * repository inspection.
  * @{
  *
- * As it turns out, the svn_repos_dir_delta2() interface can be
- * extremely useful for examining the repository, or more exactly,
- * changes to the repository.  svn_repos_dir_delta2() allows for
- * differences between two trees to be described using an editor.
- *
- * By using the editor obtained from svn_repos_node_editor() with
- * svn_repos_dir_delta2(), the description of how to transform one tree
- * into another can be used to build an in-memory linked-list tree,
- * which each node representing a repository node that was changed as a
- * result of having svn_repos_dir_delta2() drive that editor.
+ * As it turns out, the svn_repos_replay2(), svn_repos_dir_delta2() and
+ * svn_repos_begin_report2() interfaces can be extremely useful for
+ * examining the repository, or more exactly, changes to the repository.
+ * These drivers allows for differences between two trees to be
+ * described using an editor.
+ *
+ * By using the editor obtained from svn_repos_node_editor() with one of
+ * the drivers mentioned above, the description of how to transform one
+ * tree into another can be used to build an in-memory linked-list tree,
+ * which each node representing a repository node that was changed.
  */
 
 /** A node in the repository. */
@@ -1980,9 +2296,13 @@
 
 
 /** Set @a *editor and @a *edit_baton to an editor that, when driven by
- * svn_repos_dir_delta2(), builds an <tt>svn_repos_node_t *</tt> tree
- * representing the delta from @a base_root to @a root in @a repos's
- * filesystem.
+ * a driver such as svn_repos_replay2(), builds an <tt>svn_repos_node_t *</tt>
+ * tree representing the delta from @a base_root to @a root in @a
+ * repos's filesystem.
+ *
+ * The editor can also be driven by svn_repos_dir_delta2() or
+ * svn_repos_begin_report2(), but unless you have special needs,
+ * svn_repos_replay2() is preferred.
  *
  * Invoke svn_repos_node_from_baton() on @a edit_baton to obtain the root
  * node afterwards.
@@ -2002,10 +2322,9 @@
                       apr_pool_t *node_pool,
                       apr_pool_t *pool);
 
-/** Return the root node of the linked-list tree generated by driving
- * the editor created by svn_repos_node_editor() with
- * svn_repos_dir_delta2(), which is stored in @a edit_baton.  This is
- * only really useful if used *after* the editor drive is completed.
+/** Return the root node of the linked-list tree generated by driving the
+ * editor (associated with @a edit_baton) created by svn_repos_node_editor().
+ * This is only really useful if used *after* the editor drive is completed.
  */
 svn_repos_node_t *
 svn_repos_node_from_baton(void *edit_baton);
@@ -2050,11 +2369,15 @@
 #define SVN_REPOS_DUMPFILE_NODE_ACTION               "Node-action"
 #define SVN_REPOS_DUMPFILE_NODE_COPYFROM_PATH        "Node-copyfrom-path"
 #define SVN_REPOS_DUMPFILE_NODE_COPYFROM_REV         "Node-copyfrom-rev"
+/** @since New in 1.6. */
 #define SVN_REPOS_DUMPFILE_TEXT_COPY_SOURCE_MD5      "Text-copy-source-md5"
+/** @since New in 1.6. */
 #define SVN_REPOS_DUMPFILE_TEXT_COPY_SOURCE_SHA1     "Text-copy-source-sha1"
 #define SVN_REPOS_DUMPFILE_TEXT_COPY_SOURCE_CHECKSUM \
                                         SVN_REPOS_DUMPFILE_TEXT_COPY_SOURCE_MD5
+/** @since New in 1.6. */
 #define SVN_REPOS_DUMPFILE_TEXT_CONTENT_MD5          "Text-content-md5"
+/** @since New in 1.6. */
 #define SVN_REPOS_DUMPFILE_TEXT_CONTENT_SHA1         "Text-content-sha1"
 #define SVN_REPOS_DUMPFILE_TEXT_CONTENT_CHECKSUM     \
                                         SVN_REPOS_DUMPFILE_TEXT_CONTENT_MD5
@@ -2066,48 +2389,52 @@
 #define SVN_REPOS_DUMPFILE_PROP_DELTA                "Prop-delta"
 /** @since New in 1.1. */
 #define SVN_REPOS_DUMPFILE_TEXT_DELTA                "Text-delta"
-/** @since New in 1.5. */
+/** @since New in 1.6. */
 #define SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_MD5       "Text-delta-base-md5"
 /** @since New in 1.6. */
 #define SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_SHA1      "Text-delta-base-sha1"
-/** @since New in 1.6. */
+/** @since New in 1.5. */
 #define SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_CHECKSUM  \
                                         SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_MD5
 
-/** The different "actions" attached to nodes in the dumpfile. */
-enum svn_node_action
-{
-  svn_node_action_change,
-  svn_node_action_add,
-  svn_node_action_delete,
-  svn_node_action_replace
-};
-
-/** The different policies for processing the UUID in the dumpfile. */
-enum svn_repos_load_uuid
-{
-  svn_repos_load_uuid_default,
-  svn_repos_load_uuid_ignore,
-  svn_repos_load_uuid_force
-};
-
-
 /**
  * Verify the contents of the file system in @a repos.
  *
  * If @a feedback_stream is not @c NULL, write feedback to it (lines of
  * the form "* Verified revision %ld\n").
  *
- * If @a start_rev is @c SVN_INVALID_REVNUM, then start verifying at
- * revision 0.  If @a end_rev is @c SVN_INVALID_REVNUM, then verify
+ * If @a start_rev is #SVN_INVALID_REVNUM, then start verifying at
+ * revision 0.  If @a end_rev is #SVN_INVALID_REVNUM, then verify
  * through the @c HEAD revision.
  *
+ * For every verified revision call @a notify_func with @a rev set to
+ * the verified revision and @a warning_text @c NULL. For warnings call @a
+ * notify_func with @a warning_text set.
+ *
  * If @a cancel_func is not @c NULL, call it periodically with @a
  * cancel_baton as argument to see if the caller wishes to cancel the
  * verification.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_verify_fs2(svn_repos_t *repos,
+                     svn_revnum_t start_rev,
+                     svn_revnum_t end_rev,
+                     svn_repos_notify_func_t notify_func,
+                     void *notify_baton,
+                     svn_cancel_func_t cancel,
+                     void *cancel_baton,
+                     apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_repos_verify_fs2(), but with a feedback_stream instead of
+ * handling feedback via the notify_func handler
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_verify_fs(svn_repos_t *repos,
                     svn_stream_t *feedback_stream,
@@ -2117,7 +2444,6 @@
                     void *cancel_baton,
                     apr_pool_t *pool);
 
-
 /**
  * Dump the contents of the filesystem within already-open @a repos into
  * writable @a dumpstream.  Begin at revision @a start_rev, and dump every
@@ -2126,8 +2452,8 @@
  * @c NULL, this is effectively a primitive verify.  It is not complete,
  * however; see svn_fs_verify instead.
  *
- * If @a start_rev is @c SVN_INVALID_REVNUM, then start dumping at revision
- * 0.  If @a end_rev is @c SVN_INVALID_REVNUM, then dump through the @c HEAD
+ * If @a start_rev is #SVN_INVALID_REVNUM, then start dumping at revision
+ * 0.  If @a end_rev is #SVN_INVALID_REVNUM, then dump through the @c HEAD
  * revision.
  *
  * If @a incremental is @c TRUE, the first revision dumped will be a diff
@@ -2141,12 +2467,37 @@
  * be done with full plain text.  A dump with @a use_deltas set cannot
  * be loaded by Subversion 1.0.x.
  *
+ * If @a notify_func is not @c NULL, then for every dumped revision call
+ * @a notify_func with @a rev set to the dumped revision and @a warning_text
+ * @c NULL. For warnings call @a notify_func with @a warning_text.
+ *
  * If @a cancel_func is not @c NULL, it is called periodically with
  * @a cancel_baton as argument to see if the client wishes to cancel
  * the dump.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_dump_fs3(svn_repos_t *repos,
+                   svn_stream_t *dumpstream,
+                   svn_revnum_t start_rev,
+                   svn_revnum_t end_rev,
+                   svn_boolean_t incremental,
+                   svn_boolean_t use_deltas,
+                   svn_repos_notify_func_t notify_func,
+                   void *notify_baton,
+                   svn_cancel_func_t cancel_func,
+                   void *cancel_baton,
+                   apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_repos_dump_fs3(), but with a feedback_stream instead of
+ * handling feedback via the notify_func handler
+ *
  * @since New in 1.1.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_dump_fs2(svn_repos_t *repos,
                    svn_stream_t *dumpstream,
@@ -2159,7 +2510,6 @@
                    void *cancel_baton,
                    apr_pool_t *pool);
 
-
 /**
  * Similar to svn_repos_dump_fs2(), but with the @a use_deltas
  * parameter always set to @c FALSE.
@@ -2181,21 +2531,17 @@
 
 /**
  * Read and parse dumpfile-formatted @a dumpstream, reconstructing
- * filesystem revisions in already-open @a repos, handling uuids
- * in accordance with @a uuid_action.
- *
- * Read and parse dumpfile-formatted @a dumpstream, reconstructing
- * filesystem revisions in already-open @a repos.  Use @a pool for all
- * allocation.  If non- at c NULL, send feedback to @a feedback_stream.
+ * filesystem revisions in already-open @a repos, handling uuids in
+ * accordance with @a uuid_action.  Use @a pool for all allocation.
  *
  * If the dumpstream contains copy history that is unavailable in the
  * repository, an error will be thrown.
  *
  * The repository's UUID will be updated iff
  *   the dumpstream contains a UUID and
- *   @a uuid_action is not equal to @c svn_repos_load_uuid_ignore and
+ *   @a uuid_action is not equal to #svn_repos_load_uuid_ignore and
  *   either the repository contains no revisions or
- *          @a uuid_action is equal to @c svn_repos_load_uuid_force.
+ *          @a uuid_action is equal to #svn_repos_load_uuid_force.
  *
  * If the dumpstream contains no UUID, then @a uuid_action is
  * ignored and the repository UUID is not touched.
@@ -2210,12 +2556,42 @@
  * If @a use_post_commit_hook is set, call the repository's
  * post-commit hook after committing each loaded revision.
  *
+ * If @a validate_props is set, then validate Subversion revision and
+ * node properties (those in the svn: namespace) against established
+ * rules for those things.
+ *
+ * If non-NULL, use @a notify_func and @a notify_baton to send notification
+ * of events to the caller.
+ *
  * If @a cancel_func is not @c NULL, it is called periodically with
  * @a cancel_baton as argument to see if the client wishes to cancel
  * the load.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_load_fs3(svn_repos_t *repos,
+                   svn_stream_t *dumpstream,
+                   enum svn_repos_load_uuid uuid_action,
+                   const char *parent_dir,
+                   svn_boolean_t use_pre_commit_hook,
+                   svn_boolean_t use_post_commit_hook,
+                   svn_boolean_t validate_props,
+                   svn_repos_notify_func_t notify_func,
+                   void *notify_baton,
+                   svn_cancel_func_t cancel_func,
+                   void *cancel_baton,
+                   apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_load_fs3(), but with @a feedback_stream in
+ * place of the #svn_repos_notify_func_t and baton and with
+ * @a validate_props always FALSE.
+ *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_load_fs2(svn_repos_t *repos,
                    svn_stream_t *dumpstream,
@@ -2232,7 +2608,7 @@
  * Similar to svn_repos_load_fs2(), but with @a use_pre_commit_hook and
  * @a use_post_commit_hook always @c FALSE.
  *
- * @deprecated Provided for backward compatibility with the 1.0 API.
+ * @deprecated Provided for backward compatibility with the 1.1 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -2385,15 +2761,39 @@
  * 'copyfrom' history to exist in the repository when it encounters
  * nodes that are added-with-history.
  *
+ * If @a validate_props is set, then validate Subversion revision and
+ * node properties (those in the svn: namespace) against established
+ * rules for those things.
+ *
  * If @a parent_dir is not NULL, then the parser will reparent all the
  * loaded nodes, from root to @a parent_dir.  The directory @a parent_dir
  * must be an existing directory in the repository.
  *
  * Print all parsing feedback to @a outstream (if non- at c NULL).
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **parser,
+                               void **parse_baton,
+                               svn_repos_t *repos,
+                               svn_boolean_t use_history,
+                               svn_boolean_t validate_props,
+                               enum svn_repos_load_uuid uuid_action,
+                               const char *parent_dir,
+                               svn_repos_notify_func_t notify_func,
+                               void *notify_baton,
+                               apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_get_fs_build_parser3(), but with @a outstream
+ * in place if a #svn_repos_notify_func_t and baton and with
+ * @a validate_props always FALSE.
  *
  * @since New in 1.1.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_repos_get_fs_build_parser2(const svn_repos_parse_fns2_t **parser,
                                void **parse_baton,
@@ -2404,53 +2804,52 @@
                                const char *parent_dir,
                                apr_pool_t *pool);
 
-
 /**
  * A vtable that is driven by svn_repos_parse_dumpstream().
- * Similar to @c svn_repos_parse_fns2_t except that it lacks
+ * Similar to #svn_repos_parse_fns2_t except that it lacks
  * the delete_node_property and apply_textdelta callbacks.
  *
  * @deprecated Provided for backward compatibility with the 1.0 API.
  */
 typedef struct svn_repos_parse_fns_t
 {
-  /** Same as the corresponding field in @c svn_repos_parse_fns2_t. */
+  /** Same as #svn_repos_parse_fns2_t.new_revision_record. */
   svn_error_t *(*new_revision_record)(void **revision_baton,
                                       apr_hash_t *headers,
                                       void *parse_baton,
                                       apr_pool_t *pool);
-  /** Same as the corresponding field in @c svn_repos_parse_fns2_t. */
+  /** Same as #svn_repos_parse_fns2_t.uuid_record. */
   svn_error_t *(*uuid_record)(const char *uuid,
                               void *parse_baton,
                               apr_pool_t *pool);
-  /** Same as the corresponding field in @c svn_repos_parse_fns2_t. */
+  /** Same as #svn_repos_parse_fns2_t.new_node_record. */
   svn_error_t *(*new_node_record)(void **node_baton,
                                   apr_hash_t *headers,
                                   void *revision_baton,
                                   apr_pool_t *pool);
-  /** Same as the corresponding field in @c svn_repos_parse_fns2_t. */
+  /** Same as #svn_repos_parse_fns2_t.set_revision_property. */
   svn_error_t *(*set_revision_property)(void *revision_baton,
                                         const char *name,
                                         const svn_string_t *value);
-  /** Same as the corresponding field in @c svn_repos_parse_fns2_t. */
+  /** Same as #svn_repos_parse_fns2_t.set_node_property. */
   svn_error_t *(*set_node_property)(void *node_baton,
                                     const char *name,
                                     const svn_string_t *value);
-  /** Same as the corresponding field in @c svn_repos_parse_fns2_t. */
+  /** Same as #svn_repos_parse_fns2_t.remove_node_props. */
   svn_error_t *(*remove_node_props)(void *node_baton);
-  /** Same as the corresponding field in @c svn_repos_parse_fns2_t. */
+  /** Same as #svn_repos_parse_fns2_t.set_fulltext. */
   svn_error_t *(*set_fulltext)(svn_stream_t **stream,
                                void *node_baton);
-  /** Same as the corresponding field in @c svn_repos_parse_fns2_t. */
+  /** Same as #svn_repos_parse_fns2_t.close_node. */
   svn_error_t *(*close_node)(void *node_baton);
-  /** Same as the corresponding field in @c svn_repos_parse_fns2_t. */
+  /** Same as #svn_repos_parse_fns2_t.close_revision. */
   svn_error_t *(*close_revision)(void *revision_baton);
 } svn_repos_parser_fns_t;
 
 
 /**
  * Similar to svn_repos_parse_dumpstream2(), but uses the more limited
- * @c svn_repos_parser_fns_t vtable type.
+ * #svn_repos_parser_fns_t vtable type.
  *
  * @deprecated Provided for backward compatibility with the 1.0 API.
  */
@@ -2517,6 +2916,9 @@
  * to TRUE if at least one path is accessible with the @a
  * required_access.
  *
+ * For compatibility with 1.6, and earlier, @a repos_name can be NULL
+ * in which case it is equivalent to a @a repos_name of "".
+ *
  * @since New in 1.3.
  */
 svn_error_t *
@@ -2584,7 +2986,7 @@
  *
  * @since New in 1.5.
  */
-typedef enum
+typedef enum svn_repos_revision_access_level_t
 {
   svn_repos_revision_access_none,
   svn_repos_revision_access_partial,
@@ -2599,7 +3001,7 @@
  * function and its associated @a authz_read_baton.
  *
  * @a authz_read_func may be @c NULL, in which case @a access will be
- * set to @c svn_repos_revision_access_full.
+ * set to #svn_repos_revision_access_full.
  *
  * @since New in 1.5.
  */
@@ -2635,7 +3037,7 @@
  */
 svn_error_t *
 svn_repos_remember_client_capabilities(svn_repos_t *repos,
-                                       apr_array_header_t *capabilities);
+                                       const apr_array_header_t *capabilities);
 
 
 

Modified: trunk/GME/Include/subversion/svn_sorts.h
==============================================================================
--- trunk/GME/Include/subversion/svn_sorts.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_sorts.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -71,10 +76,10 @@
  * @c apr_array_header_t.  For example, to convert hash @a hsh to a sorted
  * array, do this:
  *
- * @verbatim
-     apr_array_header_t *hdr;
-     hdr = svn_sort__hash (hsh, @c svn_sort_compare_items_as_paths, pool);
-   @endverbatim
+ * @code
+     apr_array_header_t *array;
+     array = svn_sort__hash(hsh, svn_sort_compare_items_as_paths, pool);
+   @endcode
  */
 int
 svn_sort_compare_items_as_paths(const svn_sort__item_t *a,
@@ -165,7 +170,7 @@
    COMPARE_FUNC is defined as for the C stdlib function bsearch(). */
 int
 svn_sort__bsearch_lower_bound(const void *key,
-                              apr_array_header_t *array,
+                              const apr_array_header_t *array,
                               int (*compare_func)(const void *, const void *));
 
 /* Insert a shallow copy of *NEW_ELEMENT into the array ARRAY at the index
@@ -177,6 +182,16 @@
                        int insert_index);
 
 
+/* Remove ELEMENTS_TO_DELETE elements starting  at DELETE_INDEX from the
+   array ARR. If DELETE_INDEX is not a valid element of ARR,
+   ELEMENTS_TO_DELETE is not greater than zero, or
+   DELETE_INDEX + ELEMENTS_TO_DELETE is greater than ARR->NELTS, then do
+   nothing. */
+void
+svn_sort__array_delete(apr_array_header_t *arr,
+                       int delete_index,
+                       int elements_to_delete);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: trunk/GME/Include/subversion/svn_string.h
==============================================================================
--- trunk/GME/Include/subversion/svn_string.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_string.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2006 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -115,8 +120,7 @@
 } svn_stringbuf_t;
 
 
-/** svn_string_t functions.
- *
+/**
  * @defgroup svn_string_svn_string_t svn_string_t functions
  * @{
  */
@@ -175,8 +179,7 @@
 /** @} */
 
 
-/** svn_stringbuf_t functions.
- *
+/**
  * @defgroup svn_string_svn_stringbuf_t svn_stringbuf_t functions
  * @{
  */
@@ -184,16 +187,18 @@
 /** Create a new bytestring containing a C string (NULL-terminated). */
 svn_stringbuf_t *
 svn_stringbuf_create(const char *cstring, apr_pool_t *pool);
+
 /** Create a new bytestring containing a generic string of bytes
  * (NON-NULL-terminated)
  */
 svn_stringbuf_t *
 svn_stringbuf_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool);
+
 /** Create a new empty bytestring with at least @a minimum_size bytes of
  * space available in the memory block.
  *
- * The allocated string buffer will be one byte larger then @a size to account
- * for a final '\0'.
+ * The allocated string buffer will be one byte larger than @a minimum_size
+ * to account for a final '\\0'.
  *
  * @since New in 1.6.
  */
@@ -246,6 +251,19 @@
 void
 svn_stringbuf_fillchar(svn_stringbuf_t *str, unsigned char c);
 
+/** Append a single character @a byte onto @a targetstr.
+ * This is an optimized version of svn_stringbuf_appendbytes()
+ * that is much faster to call and execute. Gains vary with the ABI.
+ * The advantages extend beyond the actual call because the reduced
+ * register pressure allows for more optimization within the caller.
+ *
+ * reallocs if necessary. @a targetstr is affected, nothing else is.
+ * @since New in 1.7.
+ */
+void
+svn_stringbuf_appendbyte(svn_stringbuf_t *targetstr,
+                         char byte);
+
 /** Append an array of bytes onto @a targetstr.
  *
  * reallocs if necessary. @a targetstr is affected, nothing else is.
@@ -304,15 +322,14 @@
 /** @} */
 
 
-/** C strings.
- *
- * @defgroup svn_string_cstrings c string functions
+/**
+ * @defgroup svn_string_cstrings C string functions
  * @{
  */
 
 /** Divide @a input into substrings along @a sep_chars boundaries, return an
- * array of copies of those substrings, allocating both the array and
- * the copies in @a pool.
+ * array of copies of those substrings (plain const char*), allocating both
+ * the array and the copies in @a pool.
  *
  * None of the elements added to the array contain any of the
  * characters in @a sep_chars, and none of the new elements are empty
@@ -344,7 +361,14 @@
  * of zero or more glob patterns.
  */
 svn_boolean_t
-svn_cstring_match_glob_list(const char *str, apr_array_header_t *list);
+svn_cstring_match_glob_list(const char *str, const apr_array_header_t *list);
+
+/** Return @c TRUE iff @a str exactly matches any of the elements of @a list.
+ *
+ * @since new in 1.7
+ */
+svn_boolean_t
+svn_cstring_match_list(const char *str, const apr_array_header_t *list);
 
 /**
  * Return the number of line breaks in @a msg, allowing any kind of newline
@@ -381,6 +405,71 @@
 int
 svn_cstring_casecmp(const char *str1, const char *str2);
 
+/**
+ * Parse the C string @a str into a 64 bit number, and return it in @a *n.
+ * Assume that the number is represented in base @a base.
+ * Raise an error if conversion fails (e.g. due to overflow), or if the
+ * converted number is smaller than @a minval or larger than @a maxval.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_cstring_strtoi64(apr_int64_t *n, const char *str,
+                     apr_int64_t minval, apr_int64_t maxval,
+                     int base);
+
+/**
+ * Parse the C string @a str into a 64 bit number, and return it in @a *n.
+ * Assume that the number is represented in base 10.
+ * Raise an error if conversion fails (e.g. due to overflow).
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_cstring_atoi64(apr_int64_t *n, const char *str);
+
+/**
+ * Parse the C string @a str into a 32 bit number, and return it in @a *n.
+ * Assume that the number is represented in base 10.
+ * Raise an error if conversion fails (e.g. due to overflow).
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_cstring_atoi(int *n, const char *str);
+
+/**
+ * Parse the C string @a str into an unsigned 64 bit number, and return
+ * it in @a *n. Assume that the number is represented in base @a base.
+ * Raise an error if conversion fails (e.g. due to overflow), or if the
+ * converted number is smaller than @a minval or larger than @a maxval.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_cstring_strtoui64(apr_uint64_t *n, const char *str,
+                      apr_uint64_t minval, apr_uint64_t maxval,
+                      int base);
+
+/**
+ * Parse the C string @a str into an unsigned 64 bit number, and return
+ * it in @a *n. Assume that the number is represented in base 10.
+ * Raise an error if conversion fails (e.g. due to overflow).
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_cstring_atoui64(apr_uint64_t *n, const char *str);
+
+/**
+ * Parse the C string @a str into an unsigned 32 bit number, and return
+ * it in @a *n. Assume that the number is represented in base 10.
+ * Raise an error if conversion fails (e.g. due to overflow).
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_cstring_atoui(unsigned int *n, const char *str);
 
 /** @} */
 

Modified: trunk/GME/Include/subversion/svn_subst.h
==============================================================================
--- trunk/GME/Include/subversion/svn_subst.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_subst.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -193,33 +198,23 @@
 
 
 /**
- * Copy and translate the data in stream @a src into stream @a dst.  It is
- * assumed that @a src is a readable stream and @a dst is a writable stream.
- *
- * If @a eol_str is non- at c NULL, replace whatever bytestring @a src uses to
- * denote line endings with @a eol_str in the output.  If @a src has an
- * inconsistent line ending style, then: if @a repair is @c FALSE, return
- * @c SVN_ERR_IO_INCONSISTENT_EOL, else if @a repair is @c TRUE, convert any
- * line ending in @a src to @a eol_str in @a dst.  Recognized line endings are:
- * "\n", "\r", and "\r\n".
- *
- * Expand and contract keywords using the contents of @a keywords as the
- * new values.  If @a expand is @c TRUE, expand contracted keywords and
- * re-expand expanded keywords.  If @a expand is @c FALSE, contract expanded
- * keywords and ignore contracted ones.  Keywords not found in the hash are
- * ignored (not contracted or expanded).  If the @a keywords hash
- * itself is @c NULL, keyword substitution will be altogether ignored.
+ * Copy and translate the data in @a src_stream into @a dst_stream.  It is
+ * assumed that @a src_stream is a readable stream and @a dst_stream is a
+ * writable stream.
+ *
+ * If @a eol_str is non- at c NULL, replace whatever bytestring @a src_stream
+ * uses to denote line endings with @a eol_str in the output.  If
+ * @a src_stream has an inconsistent line ending style, then: if @a repair
+ * is @c FALSE, return @c SVN_ERR_IO_INCONSISTENT_EOL, else if @a repair is
+ * @c TRUE, convert any line ending in @a src_stream to @a eol_str in
+ * @a dst_stream.  Recognized line endings are: "\n", "\r", and "\r\n".
  *
- * Detect only keywords that are no longer than @c SVN_KEYWORD_MAX_LEN
- * bytes, including the delimiters and the keyword itself.
+ * See svn_subst_stream_translated() for details of the keyword substitution
+ * which is controlled by the @a expand and @a keywords parameters.
  *
  * Note that a translation request is *required*:  one of @a eol_str or
  * @a keywords must be non- at c NULL.
  *
- * Recommendation: if @a expand is FALSE, then you don't care about the
- * keyword values, so use empty strings as non-NULL signifiers when you
- * build the keywords hash.
- *
  * Notes:
  *
  * See svn_wc__get_keywords() and svn_wc__get_eol_style() for a
@@ -287,7 +282,33 @@
  * contract keywords.  One stream supports both read and write
  * operations.  Reads and writes may be mixed.
  *
- * The stream returned is allocated in @a pool.
+ * If @a eol_str is non- at c NULL, replace whatever bytestring the input uses
+ * to denote line endings with @a eol_str in the output.  If the input has
+ * an inconsistent line ending style, then: if @a repair is @c FALSE, then a
+ * subsequent read, write or other operation on the stream will return
+ * @c SVN_ERR_IO_INCONSISTENT_EOL when the inconsistency is detected, else
+ * if @a repair is @c TRUE, convert any line ending to @a eol_str.
+ * Recognized line endings are: "\n", "\r", and "\r\n".
+ *
+ * Expand and contract keywords using the contents of @a keywords as the
+ * new values.  If @a expand is @c TRUE, expand contracted keywords and
+ * re-expand expanded keywords.  If @a expand is @c FALSE, contract expanded
+ * keywords and ignore contracted ones.  Keywords not found in the hash are
+ * ignored (not contracted or expanded).  If the @a keywords hash
+ * itself is @c NULL, keyword substitution will be altogether ignored.
+ *
+ * Detect only keywords that are no longer than @c SVN_KEYWORD_MAX_LEN
+ * bytes, including the delimiters and the keyword itself.
+ *
+ * Recommendation: if @a expand is FALSE, then you don't care about the
+ * keyword values, so use empty strings as non-NULL signifiers when you
+ * build the keywords hash.
+ *
+ * The stream returned is allocated in @a result_pool.
+ *
+ * If the inner stream implements resetting via svn_stream_reset(),
+ * or marking and seeking via svn_stream_mark() and svn_stream_seek(),
+ * the translated stream will too.
  *
  * @since New in 1.4.
  */
@@ -297,11 +318,11 @@
                             svn_boolean_t repair,
                             apr_hash_t *keywords,
                             svn_boolean_t expand,
-                            apr_pool_t *pool);
+                            apr_pool_t *result_pool);
 
 
-/** Return a stream which performs eol translation and keyword
- * expansion when read from or written to.  The stream @a stream
+/** Set @a *stream to a stream which performs eol translation and keyword
+ * expansion when read from or written to.  The stream @a source
  * is used to read and write all data.  Make sure you call
  * svn_stream_close() on @a stream to make sure all data are flushed
  * and cleaned up.
@@ -327,11 +348,16 @@
                                            apr_pool_t *pool);
 
 
-/** Returns a readable stream in @a *stream containing the "normal form"
+/** Set @a *stream to a readable stream containing the "normal form"
  * of the special file located at @a path. The stream will be allocated
  * in @a result_pool, and any temporary allocations will be made in
  * @a scratch_pool.
  *
+ * If the file at @a path is in fact a regular file, just read its content,
+ * which should be in the "normal form" for a special file.  This enables
+ * special files to be written and read on platforms that do not treat them
+ * as special.
+ *
  * @since New in 1.6.
  */
 svn_error_t *
@@ -341,12 +367,20 @@
                            apr_pool_t *scratch_pool);
 
 
-/** Returns a writeable stream in @a *stream that accepts content in
+/** Set @a *stream to a writable stream that accepts content in
  * the "normal form" for a special file, to be located at @a path, and
  * will create that file when the stream is closed. The stream will be
  * allocated in @a result_pool, and any temporary allocations will be
  * made in @a scratch_pool.
  *
+ * If the platform does not support the semantics of the special file, write
+ * a regular file containing the "normal form" text.  This enables special
+ * files to be written and read on platforms that do not treat them as
+ * special.
+ *
+ * Note: the target file is created in a temporary location, then renamed
+ *   into position, so the creation can be considered "atomic".
+ *
  * @since New in 1.6.
  */
 svn_error_t *
@@ -356,8 +390,8 @@
                              apr_pool_t *scratch_pool);
 
 
-/** Returns a stream which translates the special file at @a path to
- * the internal representation for special files when read from.  When
+/** Set @a *stream to a stream which translates the special file at @a path
+ * to the internal representation for special files when read from.  When
  * written to, it does the reverse: creating a special file when the
  * stream is closed.
  *
@@ -375,25 +409,48 @@
 
 
 /**
- * Translates the file at path @a src into a file at path @a dst.  The
- * parameters @a *eol_str, @a repair, @a *keywords and @a expand are
+ * Copy the contents of file-path @a src to file-path @a dst atomically,
+ * either creating @a dst or overwriting @a dst if it exists, possibly
+ * performing line ending and keyword translations.
+ *
+ * The parameters @a *eol_str, @a repair, @a *keywords and @a expand are
  * defined the same as in svn_subst_translate_stream3().
  *
  * In addition, it will create a special file from normal form or
  * translate one to normal form if @a special is @c TRUE.
  *
- * Copy the contents of file-path @a src to file-path @a dst atomically,
- * either creating @a dst (or overwriting @a dst if it exists), possibly
- * performing line ending and keyword translations.
- *
  * If anything goes wrong during the copy, attempt to delete @a dst (if
  * it exists).
  *
  * If @a eol_str and @a keywords are @c NULL, behavior is just a byte-for-byte
  * copy.
  *
+ * @a cancel_func and @a cancel_baton will be called (if not NULL)
+ * periodically to check for cancellation.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_subst_copy_and_translate4(const char *src,
+                              const char *dst,
+                              const char *eol_str,
+                              svn_boolean_t repair,
+                              apr_hash_t *keywords,
+                              svn_boolean_t expand,
+                              svn_boolean_t special,
+                              svn_cancel_func_t cancel_func,
+                              void *cancel_baton,
+                              apr_pool_t *pool);
+
+
+/**
+ * Similar to svn_subst_copy_and_translate4() but without a cancellation
+ * function and baton.
+ *
  * @since New in 1.3.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_subst_copy_and_translate3(const char *src,
                               const char *dst,
@@ -404,6 +461,7 @@
                               svn_boolean_t special,
                               apr_pool_t *pool);
 
+
 /**
  * Similar to svn_subst_copy_and_translate3() except that @a keywords is a
  * @c svn_subst_keywords_t struct instead of a keywords hash.
@@ -440,17 +498,19 @@
 
 
 /**
- * Convenience routine: a variant of svn_subst_translate_stream3() which
- * operates on cstrings.
+ * Set @a *dst to a copy of the string @a src, possibly performing line
+ * ending and keyword translations.
  *
- * @since New in 1.3.
- *
- * Return a new string in @a *dst, allocated in @a pool, by copying the
- * contents of string @a src, possibly performing line ending and keyword
- * translations.
+ * This is a variant of svn_subst_translate_stream3() that operates on
+ * cstrings.  @see svn_subst_stream_translated() for details of the
+ * translation and of @a eol_str, @a repair, @a keywords and @a expand.
  *
  * If @a eol_str and @a keywords are @c NULL, behavior is just a byte-for-byte
  * copy.
+ *
+ * Allocate @a *dst in @a pool.
+ *
+ * @since New in 1.3.
  */
 svn_error_t *
 svn_subst_translate_cstring2(const char *src,
@@ -478,7 +538,7 @@
                             apr_pool_t *pool);
 
 /**
- * Translates a file @a src in working copy form to a file @a dst in
+ * Translate the file @a src in working copy form to a file @a dst in
  * normal form.
  *
  * The values specified for @a eol_style, @a *eol_str, @a keywords and
@@ -542,27 +602,62 @@
 
 /* EOL conversion and character encodings */
 
-/** Translate the data in @a value (assumed to be in encoded in charset
- * @a encoding) to UTF8 and LF line-endings.  If @a encoding is @c NULL,
- * then assume that @a value is in the system-default language encoding.
- * Return the translated data in @a *new_value, allocated in @a pool.
+/** Translate the string @a value from character encoding @a encoding to
+ * UTF8, and also from its current line-ending style to LF line-endings.  If
+ * @a encoding is @c NULL, translate from the system-default encoding.
+ *
+ * If @a translated_to_utf8 is not @c NULL, then set @a *translated_to_utf8
+ * to @c TRUE if at least one character of @a value in the source character
+ * encoding was translated to UTF-8, or to @c FALSE otherwise.
+ *
+ * If @a translated_line_endings is not @c NULL, then set @a
+ * *translated_line_endings to @c TRUE if at least one line ending was
+ * changed to LF, or to @c FALSE otherwise.
+ *
+ * If @a value has an inconsistent line ending style, then: if @a repair
+ * is @c FALSE, return @c SVN_ERR_IO_INCONSISTENT_EOL, else if @a repair is
+ * @c TRUE, convert any line ending in @a value to "\n" in
+ * @a *new_value.  Recognized line endings are: "\n", "\r", and "\r\n".
+ *
+ * Set @a *new_value to the translated string, allocated in @a result_pool.
+ *
+ * @a scratch_pool is used for temporary allocations.
+ *
+ * @since New in 1.7.
  */
+svn_error_t *
+svn_subst_translate_string2(svn_string_t **new_value,
+                            svn_boolean_t *translated_to_utf8,
+                            svn_boolean_t *translated_line_endings,
+                            const svn_string_t *value,
+                            const char *encoding,
+                            svn_boolean_t repair,
+                            apr_pool_t *result_pool,
+                            apr_pool_t *scratch_pool);
+
+/** Similar to svn_subst_translate_string2(), except that the information about
+ * whether re-encoding or line ending translation were performed is discarded.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
 svn_error_t *svn_subst_translate_string(svn_string_t **new_value,
                                         const svn_string_t *value,
                                         const char *encoding,
                                         apr_pool_t *pool);
 
-/** Translate the data in @a value from UTF8 and LF line-endings into
- * native locale and native line-endings, or to the output locale if
- * @a for_output is TRUE.  Return the translated data in @a
- * *new_value, allocated in @a pool.
+/** Translate the string @a value from UTF8 and LF line-endings into native
+ * character encoding and native line-endings.  If @a for_output is TRUE,
+ * translate to the character encoding of the output locale, else to that of
+ * the default locale.
+ *
+ * Set @a *new_value to the translated string, allocated in @a pool.
  */
 svn_error_t *svn_subst_detranslate_string(svn_string_t **new_value,
                                           const svn_string_t *value,
                                           svn_boolean_t for_output,
                                           apr_pool_t *pool);
 
-
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: trunk/GME/Include/subversion/svn_time.h
==============================================================================
--- trunk/GME/Include/subversion/svn_time.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_time.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
  *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *

Modified: trunk/GME/Include/subversion/svn_types.h
==============================================================================
--- trunk/GME/Include/subversion/svn_types.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_types.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -44,19 +49,37 @@
  * @since New in 1.6.
  */
 #ifndef SVN_DEPRECATED
-#if !defined(SWIGPERL) && !defined(SWIGPYTHON) && !defined(SWIGRUBY)
-#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__==3 && __GNUC_MINOR__>=1))
-#define SVN_DEPRECATED __attribute__((deprecated))
-#elif defined(_MSC_VER) && _MSC_VER >= 1300
-#define SVN_DEPRECATED __declspec(deprecated)
-#else
-#define SVN_DEPRECATED
-#endif
-#else
-#define SVN_DEPRECATED
-#endif
+# if !defined(SWIGPERL) && !defined(SWIGPYTHON) && !defined(SWIGRUBY)
+#  if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__==3 && __GNUC_MINOR__>=1))
+#   define SVN_DEPRECATED __attribute__((deprecated))
+#  elif defined(_MSC_VER) && _MSC_VER >= 1300
+#   define SVN_DEPRECATED __declspec(deprecated)
+#  else
+#   define SVN_DEPRECATED
+#  endif
+# else
+#  define SVN_DEPRECATED
+# endif
 #endif
 
+
+/** Indicate whether the current platform supports unaligned data access.
+ *
+ * On the majority of machines running SVN (x86 / x64), unaligned access
+ * is much cheaper than repeated aligned access. Define this macro to 1
+ * on those machines.
+ * Unaligned access on other machines (e.g. IA64) will trigger memory
+ * access faults or simply misbehave.
+ *
+ * @since New in 1.7.
+ */
+#ifndef SVN_UNALIGNED_ACCESS_IS_OK
+# if defined(_M_IX86) || defined(_M_X64) || defined(i386) || defined(__x86_64)
+#  define SVN_UNALIGNED_ACCESS_IS_OK 1
+# else
+#  define SVN_UNALIGNED_ACCESS_IS_OK 0
+# endif
+#endif
 
 
 /** Subversion error object.
@@ -66,27 +89,51 @@
  */
 typedef struct svn_error_t
 {
-  /** APR error value, possibly SVN_ custom err */
+  /** APR error value; possibly an SVN_ custom error code (see
+   * `svn_error_codes.h' for a full listing).
+   */
   apr_status_t apr_err;
 
-  /** details from producer of error */
+  /** Details from the producer of error.
+   *
+   * Note that if this error was generated by Subversion's API, you'll
+   * probably want to use svn_err_best_message() to get a single
+   * descriptive string for this error chain (see the @a child member)
+   * or svn_handle_error2() to print the error chain in full.  This is
+   * because Subversion's API functions sometimes add many links to
+   * the error chain that lack details (used only to produce virtual
+   * stack traces).  (Use svn_error_purge_tracing() to remove those
+   * trace-only links from the error chain.)
+   */
   const char *message;
 
-  /** ptr to the error we "wrap" */
+  /** Pointer to the error we "wrap" (may be @c NULL).  Via this
+   * member, individual error object can be strung together into an
+   * "error chain".
+   */
   struct svn_error_t *child;
 
-  /** The pool holding this error and any child errors it wraps */
+  /** The pool in which this error object is allocated.  (If
+   * Subversion's APIs are used to manage error chains, then this pool
+   * will contain the whole error chain of which this object is a
+   * member.) */
   apr_pool_t *pool;
 
-  /** Source file where the error originated.  Only used iff @c SVN_DEBUG. */
+  /** Source file where the error originated (iff @c SVN_DEBUG;
+   * undefined otherwise).
+   */
   const char *file;
 
-  /** Source line where the error originated.  Only used iff @c SVN_DEBUG. */
+  /** Source line where the error originated (iff @c SVN_DEBUG;
+   * undefined otherwise).
+   */
   long line;
 
 } svn_error_t;
 
-
+/* See svn_version.h.
+   Defined here to avoid including svn_version.h from all public headers. */
+typedef struct svn_version_t svn_version_t;
 
 /** @defgroup APR_ARRAY_compat_macros APR Array Compatibility Helper Macros
  * These macros are provided by APR itself from version 1.3.
@@ -106,8 +153,43 @@
 
 /** @} */
 
+/** @defgroup apr_hash_utilities APR Hash Table Helpers
+ * These functions enable the caller to dereference an APR hash table index
+ * without type casts or temporary variables.
+ *
+ * ### These are private, and may go away when APR implements them natively.
+ * @{
+ */
+
+/** Return the key of the hash table entry indexed by @a hi. */
+const void *
+svn__apr_hash_index_key(const apr_hash_index_t *hi);
+
+/** Return the key length of the hash table entry indexed by @a hi. */
+apr_ssize_t
+svn__apr_hash_index_klen(const apr_hash_index_t *hi);
+
+/** Return the value of the hash table entry indexed by @a hi. */
+void *
+svn__apr_hash_index_val(const apr_hash_index_t *hi);
+
+/** On Windows, APR_STATUS_IS_ENOTDIR includes several kinds of
+ * invalid-pathname error but not ERROR_INVALID_NAME, so we include it.
+ * We also include ERROR_DIRECTORY as that was not included in apr versions
+ * before 1.4.0 and this fix is not backported */
+/* ### These fixes should go into APR. */
+#ifndef WIN32
+#define SVN__APR_STATUS_IS_ENOTDIR(s)  APR_STATUS_IS_ENOTDIR(s)
+#else
+#define SVN__APR_STATUS_IS_ENOTDIR(s)  (APR_STATUS_IS_ENOTDIR(s) \
+                      || ((s) == APR_OS_START_SYSERR + ERROR_DIRECTORY) \
+                      || ((s) == APR_OS_START_SYSERR + ERROR_INVALID_NAME))
+#endif
+
+/** @} */
+
 /** The various types of nodes in the Subversion filesystem. */
-typedef enum
+typedef enum svn_node_kind_t
 {
   /** absent */
   svn_node_none,
@@ -134,13 +216,46 @@
 
 /** Return the appropriate node_kind for @a word.  @a word is as
  * returned from svn_node_kind_to_word().  If @a word does not
- * represent a recognized kind or is @c NULL, return @c svn_node_unknown.
+ * represent a recognized kind or is @c NULL, return #svn_node_unknown.
  *
  * @since New in 1.6.
  */
 svn_node_kind_t
 svn_node_kind_from_word(const char *word);
 
+/** Generic three-state property to represent an unknown value for values
+ * that are just like booleans.  The values have been set deliberately to
+ * make tristates disjoint from #svn_boolean_t.
+ *
+ * @note It is unsafe to use apr_pcalloc() to allocate these, since '0' is
+ * not a valid value.
+ *
+ * @since New in 1.7. */
+typedef enum svn_tristate_t
+{
+  svn_tristate_false = 2,
+  svn_tristate_true,
+  svn_tristate_unknown
+} svn_tristate_t;
+
+/** Return a constant string "true", "false" or NULL representing the value of
+ * @a tristate.
+ *
+ * @since New in 1.7.
+ */
+const char *
+svn_tristate__to_word(svn_tristate_t tristate);
+
+/** Return the appropriate tristate for @a word. If @a word is "true", returns
+ * #svn_tristate_true; if @a word is "false", returns #svn_tristate_false,
+ * for all other values (including NULL) returns #svn_tristate_unknown.
+ *
+ * @since New in 1.7.
+ */
+svn_tristate_t
+svn_tristate__from_word(const char * word);
+
+
 /** About Special Files in Subversion
  *
  * Subversion denotes files that cannot be portably created or
@@ -189,7 +304,7 @@
 
 /** Not really invalid...just unimportant -- one day, this can be its
  * own unique value, for now, just make it the same as
- * @c SVN_INVALID_REVNUM.
+ * #SVN_INVALID_REVNUM.
  */
 #define SVN_IGNORED_REVNUM ((svn_revnum_t) -1)
 
@@ -201,7 +316,7 @@
  * store its value in @a rev.  If @a endptr is non-NULL, then the
  * address of the first non-numeric character in @a str is stored in
  * it.  If there are no digits in @a str, then @a endptr is set (if
- * non-NULL), and the error @c SVN_ERR_REVNUM_PARSE_FAILURE error is
+ * non-NULL), and the error #SVN_ERR_REVNUM_PARSE_FAILURE error is
  * returned.  Negative numbers parsed from @a str are considered
  * invalid, and result in the same error.
  *
@@ -269,45 +384,45 @@
  *
  * @since New in 1.5.
  */
-typedef enum
+typedef enum svn_depth_t
 {
   /* The order of these depths is important: the higher the number,
      the deeper it descends.  This allows us to compare two depths
      numerically to decide which should govern. */
 
-  /* Depth undetermined or ignored.  In some contexts, this means the
-     client should choose an appropriate default depth.  The server
-     will generally treat it as @c svn_depth_infinity. */
+  /** Depth undetermined or ignored.  In some contexts, this means the
+      client should choose an appropriate default depth.  The server
+      will generally treat it as #svn_depth_infinity. */
   svn_depth_unknown    = -2,
 
-  /* Exclude (i.e., don't descend into) directory D. */
-  /* NOTE: In Subversion 1.5, svn_depth_exclude is *not* supported
-     anywhere in the client-side (libsvn_wc/libsvn_client/etc) code;
-     it is only supported as an argument to set_path functions in the
-     ra and repos reporters.  (This will enable future versions of
-     Subversion to run updates, etc, against 1.5 servers with proper
-     svn_depth_exclude behavior, once we get a chance to implement
-     client-side support for svn_depth_exclude.)
+  /** Exclude (i.e., don't descend into) directory D.
+      @note In Subversion 1.5, svn_depth_exclude is *not* supported
+      anywhere in the client-side (libsvn_wc/libsvn_client/etc) code;
+      it is only supported as an argument to set_path functions in the
+      ra and repos reporters.  (This will enable future versions of
+      Subversion to run updates, etc, against 1.5 servers with proper
+      svn_depth_exclude behavior, once we get a chance to implement
+      client-side support for svn_depth_exclude.)
   */
   svn_depth_exclude    = -1,
 
-  /* Just the named directory D, no entries.  Updates will not pull in
-     any files or subdirectories not already present. */
+  /** Just the named directory D, no entries.  Updates will not pull in
+      any files or subdirectories not already present. */
   svn_depth_empty      =  0,
 
-  /* D + its file children, but not subdirs.  Updates will pull in any
-     files not already present, but not subdirectories. */
+  /** D + its file children, but not subdirs.  Updates will pull in any
+      files not already present, but not subdirectories. */
   svn_depth_files      =  1,
 
-  /* D + immediate children (D and its entries).  Updates will pull in
-     any files or subdirectories not already present; those
-     subdirectories' this_dir entries will have depth-empty. */
+  /** D + immediate children (D and its entries).  Updates will pull in
+      any files or subdirectories not already present; those
+      subdirectories' this_dir entries will have depth-empty. */
   svn_depth_immediates =  2,
 
-  /* D + all descendants (full recursion from D).  Updates will pull
-     in any files or subdirectories not already present; those
-     subdirectories' this_dir entries will have depth-infinity.
-     Equivalent to the pre-1.5 default update behavior. */
+  /** D + all descendants (full recursion from D).  Updates will pull
+      in any files or subdirectories not already present; those
+      subdirectories' this_dir entries will have depth-infinity.
+      Equivalent to the pre-1.5 default update behavior. */
   svn_depth_infinity   =  3
 
 } svn_depth_t;
@@ -325,7 +440,7 @@
 
 /** Return the appropriate depth for @a depth_str.  @a word is as
  * returned from svn_depth_to_word().  If @a depth_str does not
- * represent a recognized depth, return @c svn_depth_unknown.
+ * represent a recognized depth, return #svn_depth_unknown.
  *
  * @since New in 1.5.
  */
@@ -333,8 +448,8 @@
 svn_depth_from_word(const char *word);
 
 
-/* Return @c svn_depth_infinity if boolean @a recurse is TRUE, else
- * return @c svn_depth_files.
+/* Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+ * return #svn_depth_files.
  *
  * @note New code should never need to use this, it is called only
  * from pre-depth APIs, for compatibility.
@@ -345,8 +460,8 @@
   ((recurse) ? svn_depth_infinity : svn_depth_files)
 
 
-/* Return @c svn_depth_infinity if boolean @a recurse is TRUE, else
- * return @c svn_depth_immediates.
+/* Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+ * return #svn_depth_immediates.
  *
  * @note New code should never need to use this, it is called only
  * from pre-depth APIs, for compatibility.
@@ -357,8 +472,8 @@
   ((recurse) ? svn_depth_infinity : svn_depth_immediates)
 
 
-/* Return @c svn_depth_infinity if boolean @a recurse is TRUE, else
- * return @c svn_depth_empty.
+/* Return #svn_depth_infinity if boolean @a recurse is TRUE, else
+ * return #svn_depth_empty.
  *
  * @note New code should never need to use this, it is called only
  * from pre-depth APIs, for compatibility.
@@ -374,7 +489,7 @@
  * Although much code has been converted to use depth, some code still
  * takes a recurse boolean.  In most cases, it makes sense to treat
  * unknown or infinite depth as recursive, and any other depth as
- * non-recursive (which in turn usually translates to @c svn_depth_files).
+ * non-recursive (which in turn usually translates to #svn_depth_files).
  */
 #define SVN_DEPTH_IS_RECURSIVE(depth)                              \
   (((depth) == svn_depth_infinity || (depth) == svn_depth_unknown) \
@@ -382,7 +497,7 @@
 
 
 /**
- * It is sometimes convenient to indicate which parts of an @c svn_dirent_t
+ * It is sometimes convenient to indicate which parts of an #svn_dirent_t
  * object you are actually interested in, so that calculating and sending
  * the data corresponding to the other fields can be avoided.  These values
  * can be used for that purpose.
@@ -547,17 +662,21 @@
   /** error message from post-commit hook, or NULL. */
   const char *post_commit_err;
 
+  /** repository root, may be @c NULL if unknown.
+      @since New in 1.7. */
+  const char *repos_root;
+
 } svn_commit_info_t;
 
 
 /**
- * Allocate an object of type @c svn_commit_info_t in @a pool and
+ * Allocate an object of type #svn_commit_info_t in @a pool and
  * return it.
  *
- * The @c revision field of the new struct is set to @c
- * SVN_INVALID_REVNUM.  All other fields are initialized to @c NULL.
+ * The @c revision field of the new struct is set to #SVN_INVALID_REVNUM.
+ * All other fields are initialized to @c NULL.
  *
- * @note Any object of the type @c svn_commit_info_t should
+ * @note Any object of the type #svn_commit_info_t should
  * be created using this function.
  * This is to provide for extending the svn_commit_info_t in
  * the future.
@@ -581,7 +700,7 @@
 /**
  * A structure to represent a path that changed for a log entry.
  *
- * @note To allow for extending the @c svn_log_changed_path2_t structure in
+ * @note To allow for extending the #svn_log_changed_path2_t structure in
  * future releases, always use svn_log_changed_path2_create() to allocate
  * the structure.
  *
@@ -601,16 +720,24 @@
   /** The type of the node, may be svn_node_unknown. */
   svn_node_kind_t node_kind;
 
+  /** Is the text modified, may be svn_tristate_unknown.
+   * @since New in 1.7. */
+  svn_tristate_t text_modified;
+
+  /** Are properties modified, may be svn_tristate_unknown.
+   * @since New in 1.7. */
+  svn_tristate_t props_modified;
+
   /* NOTE: Add new fields at the end to preserve binary compatibility.
      Also, if you add fields here, you have to update
      svn_log_changed_path2_dup(). */
 } svn_log_changed_path2_t;
 
 /**
- * Returns an @c svn_log_changed_path2_t, allocated in @a pool with all fields
+ * Returns an #svn_log_changed_path2_t, allocated in @a pool with all fields
  * initialized to NULL, None or empty values.
  *
- * @note To allow for extending the @c svn_log_changed_path2_t structure in
+ * @note To allow for extending the #svn_log_changed_path2_t structure in
  * future releases, this function should always be used to allocate the
  * structure.
  *
@@ -630,7 +757,7 @@
 
 /**
  * A structure to represent a path that changed for a log entry.  Same as
- * @c svn_log_changed_path2_t, but without the node kind.
+ * #svn_log_changed_path2_t, but without the node kind.
  *
  * @deprecated Provided for backward compatibility with the 1.5 API.
  */
@@ -662,7 +789,7 @@
 /**
  * A structure to represent all the information about a particular log entry.
  *
- * @note To allow for extending the @c svn_log_entry_t structure in future
+ * @note To allow for extending the #svn_log_entry_t structure in future
  * releases, always use svn_log_entry_create() to allocate the structure.
  *
  * @since New in 1.5.
@@ -670,10 +797,10 @@
 typedef struct svn_log_entry_t
 {
   /** A hash containing as keys every path committed in @a revision; the
-   * values are (@c svn_log_changed_path_t *) stuctures.
+   * values are (#svn_log_changed_path_t *) structures.
    *
    * The subversion core libraries will always set this field to the same
-   * value as changed_paths2 for compatibity reasons.
+   * value as changed_paths2 for compatibility reasons.
    *
    * @deprecated Provided for backward compatibility with the 1.5 API.
    */
@@ -700,34 +827,52 @@
    * HAS_CHILDREN flag is always FALSE.
    *
    * For more information see:
-   * http://subversion.tigris.org/merge-tracking/design.html#commutative-reporting
+   * https://svn.apache.org/repos/asf/subversion/trunk/notes/merge-tracking/design.html#commutative-reporting
    */
   svn_boolean_t has_children;
 
   /** A hash containing as keys every path committed in @a revision; the
-   * values are (@c svn_log_changed_path2_t *) stuctures.
+   * values are (#svn_log_changed_path2_t *) structures.
    *
    * If this value is not @c NULL, it MUST have the same value as
    * changed_paths or svn_log_entry_dup() will not create an identical copy.
    *
    * The subversion core libraries will always set this field to the same
-   * value as changed_paths for compatibity with users assuming an older
+   * value as changed_paths for compatibility with users assuming an older
    * version.
    *
+   * @note See http://svn.haxx.se/dev/archive-2010-08/0362.shtml for
+   * further explanation.
+   *
    * @since New in 1.6.
    */
   apr_hash_t *changed_paths2;
 
+  /**
+   * Whether @a revision should be interpreted as non-inheritable in the
+   * same sense of #svn_merge_range_t.
+   *
+   * @since New in 1.7.
+   */
+  svn_boolean_t non_inheritable;
+
+  /**
+   * Whether @a revision is a merged revision resulting from a reverse merge.
+   *
+   * @since New in 1.7.
+   */
+  svn_boolean_t subtractive_merge;
+
   /* NOTE: Add new fields at the end to preserve binary compatibility.
      Also, if you add fields here, you have to update
      svn_log_entry_dup(). */
 } svn_log_entry_t;
 
 /**
- * Returns an @c svn_log_entry_t, allocated in @a pool with all fields
+ * Returns an #svn_log_entry_t, allocated in @a pool with all fields
  * initialized to NULL values.
  *
- * @note To allow for extending the @c svn_log_entry_t structure in future
+ * @note To allow for extending the #svn_log_entry_t structure in future
  * releases, this function should always be used to allocate the structure.
  *
  * @since New in 1.5.
@@ -744,15 +889,15 @@
  * @since New in 1.6.
  */
 svn_log_entry_t *
-svn_log_entry_dup(svn_log_entry_t *log_entry, apr_pool_t *pool);
+svn_log_entry_dup(const svn_log_entry_t *log_entry, apr_pool_t *pool);
 
 /** The callback invoked by log message loopers, such as
- * @c svn_ra_plugin_t.get_log() and svn_repos_get_logs().
+ * #svn_ra_plugin_t.get_log() and svn_repos_get_logs().
  *
  * This function is invoked once on each log message, in the order
  * determined by the caller (see above-mentioned functions).
  *
- * @a baton is what you think it is, and @a log_entry contains relevent
+ * @a baton is what you think it is, and @a log_entry contains relevant
  * information for the log message.  Any of @a log_entry->author,
  * @a log_entry->date, or @a log_entry->message may be @c NULL.
  *
@@ -762,7 +907,7 @@
  *
  * If @a log_entry->changed_paths is non- at c NULL, then it contains as keys
  * every path committed in @a log_entry->revision; the values are
- * (@c svn_log_changed_path_t *) structures.
+ * (#svn_log_changed_path_t *) structures.
  *
  * If @a log_entry->has_children is @c TRUE, the message will be followed
  * immediately by any number of merged revisions (child messages), which are
@@ -779,25 +924,25 @@
  * @since New in 1.5.
  */
 
-typedef svn_error_t *(*svn_log_entry_receiver_t)
-  (void *baton,
-   svn_log_entry_t *log_entry,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_log_entry_receiver_t)(
+  void *baton,
+  svn_log_entry_t *log_entry,
+  apr_pool_t *pool);
 
 /**
- * Similar to @c svn_log_entry_receiver_t, except this uses separate
+ * Similar to #svn_log_entry_receiver_t, except this uses separate
  * parameters for each part of the log entry.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
-typedef svn_error_t *(*svn_log_message_receiver_t)
-  (void *baton,
-   apr_hash_t *changed_paths,
-   svn_revnum_t revision,
-   const char *author,
-   const char *date,  /* use svn_time_from_cstring() if need apr_time_t */
-   const char *message,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_log_message_receiver_t)(
+  void *baton,
+  apr_hash_t *changed_paths,
+  svn_revnum_t revision,
+  const char *author,
+  const char *date,  /* use svn_time_from_cstring() if need apr_time_t */
+  const char *message,
+  apr_pool_t *pool);
 
 
 /** Callback function type for commits.
@@ -808,21 +953,21 @@
  *
  * @since New in 1.4.
  */
-typedef svn_error_t *(*svn_commit_callback2_t)
-  (const svn_commit_info_t *commit_info,
-   void *baton,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_commit_callback2_t)(
+  const svn_commit_info_t *commit_info,
+  void *baton,
+  apr_pool_t *pool);
 
-/** Same as @c svn_commit_callback2_t, but uses individual
- * data elements instead of the @c svn_commit_info_t structure
+/** Same as #svn_commit_callback2_t, but uses individual
+ * data elements instead of the #svn_commit_info_t structure
  *
  * @deprecated Provided for backward compatibility with the 1.3 API.
  */
-typedef svn_error_t *(*svn_commit_callback_t)
-  (svn_revnum_t new_revision,
-   const char *date,
-   const char *author,
-   void *baton);
+typedef svn_error_t *(*svn_commit_callback_t)(
+  svn_revnum_t new_revision,
+  const char *date,
+  const char *author,
+  void *baton);
 
 
 /** A buffer size that may be used when processing a stream of data.
@@ -863,7 +1008,7 @@
 /** Validate @a mime_type.
  *
  * If @a mime_type does not contain a "/", or ends with non-alphanumeric
- * data, return @c SVN_ERR_BAD_MIME_TYPE, else return success.
+ * data, return #SVN_ERR_BAD_MIME_TYPE, else return success.
  *
  * Use @a pool only to find error allocation.
  *
@@ -889,8 +1034,8 @@
 
 /** A user defined callback that subversion will call with a user defined
  * baton to see if the current operation should be continued.  If the operation
- * should continue, the function should return @c SVN_NO_ERROR, if not, it
- * should return @c SVN_ERR_CANCELLED.
+ * should continue, the function should return #SVN_NO_ERROR, if not, it
+ * should return #SVN_ERR_CANCELLED.
  */
 typedef svn_error_t *(*svn_cancel_func_t)(void *cancel_baton);
 
@@ -928,10 +1073,10 @@
 } svn_lock_t;
 
 /**
- * Returns an @c svn_lock_t, allocated in @a pool with all fields initialized
+ * Returns an #svn_lock_t, allocated in @a pool with all fields initialized
  * to NULL values.
  *
- * @note To allow for extending the @c svn_lock_t structure in the future
+ * @note To allow for extending the #svn_lock_t structure in the future
  * releases, this function should always be used to allocate the structure.
  *
  * @since New in 1.2.
@@ -984,7 +1129,7 @@
  * @since New in 1.5.
  */
 svn_merge_range_t *
-svn_merge_range_dup(svn_merge_range_t *range, apr_pool_t *pool);
+svn_merge_range_dup(const svn_merge_range_t *range, apr_pool_t *pool);
 
 /**
  * Returns true if the changeset committed in revision @a rev is one
@@ -993,7 +1138,7 @@
  * @since New in 1.5.
  */
 svn_boolean_t
-svn_merge_range_contains_rev(svn_merge_range_t *range, svn_revnum_t rev);
+svn_merge_range_contains_rev(const svn_merge_range_t *range, svn_revnum_t rev);
 
 
 
@@ -1022,15 +1167,15 @@
 
 
 /**
- * A callback invoked by generators of @c svn_location_segment_t
+ * A callback invoked by generators of #svn_location_segment_t
  * objects, used to report information about a versioned object's
  * history in terms of its location in the repository filesystem over
  * time.
  */
-typedef svn_error_t *(*svn_location_segment_receiver_t)
-  (svn_location_segment_t *segment,
-   void *baton,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_location_segment_receiver_t)(
+  svn_location_segment_t *segment,
+  void *baton,
+  apr_pool_t *pool);
 
 
 /**
@@ -1039,10 +1184,23 @@
  * @since New in 1.5.
  */
 svn_location_segment_t *
-svn_location_segment_dup(svn_location_segment_t *segment,
+svn_location_segment_dup(const svn_location_segment_t *segment,
                          apr_pool_t *pool);
+
 /** @} */
 
+/** A line number, such as in a file or a stream.
+ *
+ * @since New in 1.7.
+ */
+typedef unsigned long svn_linenum_t;
+
+/* The maximum value of an svn_linenum_t.
+ *
+ * @since New in 1.7.
+ */
+#define SVN_LINENUM_MAX_VALUE ULONG_MAX
+
 
 #ifdef __cplusplus
 }
@@ -1063,4 +1221,14 @@
 #include "svn_error.h"
 
 
+/*
+ * Subversion developers may want to use some additional debugging facilities
+ * while working on the code. We'll pull that in here, so individual source
+ * files don't have to include this header manually.
+ */
+#ifdef SVN_DEBUG
+#include "private/svn_debug.h"
+#endif
+
+
 #endif /* SVN_TYPES_H */

Modified: trunk/GME/Include/subversion/svn_user.h
==============================================================================
--- trunk/GME/Include/subversion/svn_user.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_user.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004 CollabNet.  All rights reserved.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
  *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *

Modified: trunk/GME/Include/subversion/svn_utf.h
==============================================================================
--- trunk/GME/Include/subversion/svn_utf.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_utf.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,22 +1,28 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
  * @file svn_utf.h
  * @brief UTF-8 conversion routines
+ *
  * Whenever a conversion routine cannot convert to or from UTF-8, the
  * error returned has code @c APR_EINVAL.
  */

Modified: trunk/GME/Include/subversion/svn_version.h
==============================================================================
--- trunk/GME/Include/subversion/svn_version.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_version.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2001-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -57,7 +62,7 @@
  * Modify when new functionality is added or new interfaces are
  * defined, but all changes are backward compatible.
  */
-#define SVN_VER_MINOR      6
+#define SVN_VER_MINOR      7
 
 /**
  * Patch number.
@@ -66,7 +71,7 @@
  *
  * @since New in 1.1.
  */
-#define SVN_VER_PATCH      13
+#define SVN_VER_PATCH      9
 
 
 /** @deprecated Provided for backward compatibility with the 1.0 API. */
@@ -89,7 +94,7 @@
  *
  * Always change this at the same time as SVN_VER_NUMTAG.
  */
-#define SVN_VER_TAG        " (r1002816)"
+#define SVN_VER_TAG        " (r1462340)"
 
 
 /** Number tag: a string describing the version.
@@ -115,7 +120,7 @@
  * When rolling a tarball, we automatically replace it with what we
  * guess to be the correct revision number.
  */
-#define SVN_VER_REVISION   1002816
+#define SVN_VER_REVISION   1462340
 
 
 /* Version strings composed from the above definitions. */
@@ -129,7 +134,7 @@
 #define SVN_VER_NUMBER     SVN_VER_NUM SVN_VER_NUMTAG
 
 /** Complete version string */
-#define SVN_VERSION        SVN_VER_NUM SVN_VER_TAG
+#define SVN_VERSION        SVN_VER_NUMBER SVN_VER_TAG
 
 
 
@@ -142,18 +147,18 @@
  *
  * @since New in 1.1.
  */
-typedef struct svn_version_t
+struct svn_version_t
 {
   int major;                    /**< Major version number */
   int minor;                    /**< Minor version number */
   int patch;                    /**< Patch number */
 
   /**
-   * The version tag (#SVN_VER_NUMTAG).\ Must always point to a
+   * The version tag (#SVN_VER_NUMTAG). Must always point to a
    * statically allocated string.
    */
   const char *tag;
-} svn_version_t;
+};
 
 /**
  * Define a static svn_version_t object.

Modified: trunk/GME/Include/subversion/svn_wc.h
==============================================================================
--- trunk/GME/Include/subversion/svn_wc.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_wc.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -29,13 +34,37 @@
  *            - Clients.
  *
  * Notes:
- *            The 'path' parameters to most of these functions can be
+ *            The 'path' parameters to most of the older functions can be
  *            absolute or relative (relative to current working
  *            directory).  If there are any cases where they are
  *            relative to the path associated with the
- *            'svn_wc_adm_access_t *adm_access' baton passed along
- *            with the path, those cases should be explicitly
- *            documented, and if they are not, please fix it.
+ *            'svn_wc_adm_access_t *adm_access' baton passed along with the
+ *            path, those cases should be explicitly documented, and if they
+ *            are not, please fix it. All new functions introduced since
+ *            Subversion 1.7 require absolute paths, unless explicitly
+ *            documented otherwise.
+ *
+ *            Starting with Subversion 1.7, several arguments are re-ordered
+ *            to be more consistent through the api. The common ordering used
+ *            is:
+ *
+ *            Firsts:
+ *              - Output arguments
+ *            Then:
+ *              - Working copy context
+ *              - Local abspath
+ *            Followed by:
+ *              - Function specific arguments
+ *              - Specific callbacks with their batons
+ *            Finally:
+ *              - Generic callbacks (with baton) from directly functional to
+ *                just observing:
+ *                  - svn_wc_conflict_resolver_func2_t
+ *                  - svn_wc_external_update_t
+ *                  - svn_cancel_func_t
+ *                  - svn_wc_notify_func2_t
+ *              - Result pool
+ *              - Scratch pool.
  */
 
 #ifndef SVN_WC_H
@@ -55,7 +84,6 @@
 #include "svn_delta.h"     /* for svn_stream_t */
 #include "svn_opt.h"
 #include "svn_ra.h"        /* for svn_ra_reporter_t type */
-#include "svn_version.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -70,15 +98,16 @@
 const svn_version_t *
 svn_wc_version(void);
 
+
 /**
  * @defgroup svn_wc  Working copy management
  * @{
  */
 
-/** Flags for use with svn_wc_translated_file2
+
+/** Flags for use with svn_wc_translated_file2() and svn_wc_translated_stream().
  *
  * @defgroup translate_flags Translation flags
- *
  * @{
  */
 
@@ -90,14 +119,14 @@
    * specifies to take the latter form as input and transform it
    * to the former.
    *
-   * Either this flag or @c SVN_WC_TRANSLATE_TO_NF should be specified,
+   * Either this flag or #SVN_WC_TRANSLATE_TO_NF should be specified,
    * but not both.
    */
 #define SVN_WC_TRANSLATE_FROM_NF                 0x00000000
 
   /** Translate to Normal Form.
    *
-   * Either this flag or @c SVN_WC_TRANSLATE_FROM_NF should be specified,
+   * Either this flag or #SVN_WC_TRANSLATE_FROM_NF should be specified,
    * but not both.
    */
 #define SVN_WC_TRANSLATE_TO_NF                   0x00000001
@@ -128,16 +157,82 @@
 /** @} */
 
 
-/* Locking/Opening/Closing */
+/**
+ * @defgroup svn_wc_context  Working copy context
+ * @{
+ */
 
-/** Baton for access to a working copy administrative area.
+/** The context for all working copy interactions.
+ *
+ * This is the client-facing datastructure API consumers are required
+ * to create and use when interacting with a working copy.  Multiple
+ * contexts can be created for the same working copy simultaneously, within
+ * the same process or different processes.  Context mutexing will be handled
+ * internally by the working copy library.
+ *
+ * @note: #svn_wc_context_t should be passed by non-const pointer in all
+ * APIs, even for read-only operations, as it contains mutable data (caching,
+ * etc.).
+ *
+ * @since New in 1.7.
+ */
+typedef struct svn_wc_context_t svn_wc_context_t;
+
+/** Create a context for the working copy, and return it in @a *wc_ctx.  This
+ * context is not associated with a particular working copy, but as operations
+ * are performed, will load the appropriate working copy information.
+ *
+ * @a config should hold the various configuration options that may apply to
+ * this context.  It should live at least as long as @a result_pool.  It may
+ * be @c NULL.
+ *
+ * The context will be allocated in @a result_pool, and will use @a
+ * result_pool for any internal allocations requiring the same longevity as
+ * the context.  The context will be automatically destroyed, and its
+ * resources released, when @a result_pool is cleared, or it may be manually
+ * destroyed by invoking svn_wc_context_destroy().
+ *
+ * Use @a scratch_pool for temporary allocations.  It may be cleared
+ * immediately upon returning from this function.
  *
- * One day all such access will require a baton, we're not there yet.
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_context_create(svn_wc_context_t **wc_ctx,
+                      const svn_config_t *config,
+                      apr_pool_t *result_pool,
+                      apr_pool_t *scratch_pool);
+
+
+/** Destroy the working copy context described by @a wc_ctx, releasing any
+ * acquired resources.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_context_destroy(svn_wc_context_t *wc_ctx);
+
+
+/** @} */
+
+
+/**
+ * Locking/Opening/Closing using adm access batons.
+ *
+ * @defgroup svn_wc_adm_access Adm access batons (deprecated)
+ * @{
+ */
+
+/** Baton for access to a working copy administrative area.
  *
  * Access batons can be grouped into sets, by passing an existing open
  * baton when opening a new baton.  Given one baton in a set, other batons
  * may be retrieved.  This allows an entire hierarchy to be locked, and
  * then the set of batons can be passed around by passing a single baton.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ *    New code should use a #svn_wc_context_t object to access the working
+ *    copy.
  */
 typedef struct svn_wc_adm_access_t svn_wc_adm_access_t;
 
@@ -147,8 +242,8 @@
  * copy administrative area associated with the directory @a path.  If
  * @a write_lock is TRUE the baton will include a write lock, otherwise the
  * baton can only be used for read access.  If @a path refers to a directory
- * that is already write locked then the error @c SVN_ERR_WC_LOCKED will be
- * returned.  The error @c SVN_ERR_WC_NOT_DIRECTORY will be returned if
+ * that is already write locked then the error #SVN_ERR_WC_LOCKED will be
+ * returned.  The error #SVN_ERR_WC_NOT_DIRECTORY will be returned if
  * @a path is not a versioned directory.
  *
  * If @a associated is an open access baton then @a adm_access will be added
@@ -165,11 +260,11 @@
  * requested directories then an error will be returned and @a adm_access will
  * be invalid, with the exception that subdirectories of @a path that are
  * missing from the physical filesystem will not be locked and will not cause
- * an error.  The error @c SVN_ERR_WC_LOCKED will be returned if a
+ * an error.  The error #SVN_ERR_WC_LOCKED will be returned if a
  * subdirectory of @a path is already write locked.
  *
  * If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
- * if the client has cancelled the operation.
+ * if the client has canceled the operation.
  *
  * @a pool will be used to allocate memory for the baton and any subsequently
  * cached items.  If @a adm_access has not been closed when the pool is
@@ -182,7 +277,11 @@
  * the root of the hierarchy.
  *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ *    Callers should use a #svn_wc_context_t object to access the working
+ *    copy.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_adm_open3(svn_wc_adm_access_t **adm_access,
                  svn_wc_adm_access_t *associated,
@@ -231,11 +330,15 @@
  * @a path replaced by the parent directory of @a path.  If @a path is
  * an unversioned directory, the behaviour is also like that of
  * svn_wc_adm_open3() on the parent, except that if the open fails,
- * then the returned SVN_ERR_WC_NOT_DIRECTORY error refers to @a path,
+ * then the returned #SVN_ERR_WC_NOT_DIRECTORY error refers to @a path,
  * not to @a path's parent.
  *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ *    Callers should use a #svn_wc_context_t object to access the working
+ *    copy.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_adm_probe_open3(svn_wc_adm_access_t **adm_access,
                        svn_wc_adm_access_t *associated,
@@ -287,17 +390,21 @@
  *
  * @a levels_to_lock determines the levels_to_lock used when opening
  * @a path if @a path is a versioned directory, @a levels_to_lock is
- * ignored otherwise.  If @a write_lock is  @c TRUE the access batons
+ * ignored otherwise.  If @a write_lock is @c TRUE the access batons
  * will hold write locks.
  *
  * If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
- * if the client has cancelled the operation.
+ * if the client has canceled the operation.
  *
  * This function is essentially a combination of svn_wc_adm_open3() and
  * svn_wc_get_actual_target(), with the emphasis on reducing physical IO.
  *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ *    Callers should use a #svn_wc_context_t object to access the working
+ *    copy.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_adm_open_anchor(svn_wc_adm_access_t **anchor_access,
                        svn_wc_adm_access_t **target_access,
@@ -314,10 +421,13 @@
  * set containing the @a associated access baton.
  *
  * If the requested access baton is marked as missing in, or is simply
- * absent from, @a associated, return SVN_ERR_WC_NOT_LOCKED.
+ * absent from, @a associated, return #SVN_ERR_WC_NOT_LOCKED.
  *
  * @a pool is used only for local processing, it is not used for the batons.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_adm_retrieve(svn_wc_adm_access_t **adm_access,
                     svn_wc_adm_access_t *associated,
@@ -330,7 +440,10 @@
  * directory, or does not exist, then the behaviour is like that of
  * svn_wc_adm_retrieve() with @a path replaced by the parent directory of
  * @a path.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_adm_probe_retrieve(svn_wc_adm_access_t **adm_access,
                           svn_wc_adm_access_t *associated,
@@ -346,7 +459,7 @@
  * this time passing @a write_lock and @a levels_to_lock.  If there is
  * still no access because @a path is not a versioned directory, then
  * just set @a *adm_access to NULL and return success.  But if it is
- * because @a path is locked, then return the error @c SVN_ERR_WC_LOCKED,
+ * because @a path is locked, then return the error #SVN_ERR_WC_LOCKED,
  * and the effect on @a *adm_access is undefined.  (Or if the attempt
  * fails for any other reason, return the corresponding error, and the
  * effect on @a *adm_access is also undefined.)
@@ -355,12 +468,14 @@
  * @a associated.
  *
  * If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
- * if the client has cancelled the operation.
+ * if the client has canceled the operation.
  *
  * Use @a pool only for local processing, not to allocate @a *adm_access.
  *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_adm_probe_try3(svn_wc_adm_access_t **adm_access,
                       svn_wc_adm_access_t *associated,
@@ -412,32 +527,79 @@
  * Any temporary allocations are performed using @a scratch_pool.
  *
  * @since New in 1.6
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_adm_close2(svn_wc_adm_access_t *adm_access,
                   apr_pool_t *scratch_pool);
 
-/* @deprecated Provided for backward compabibility with the 1.5 API. */
+/**
+ * Similar to svn_wc_adm_close2(), but with the internal pool of @a adm_access
+ * used for temporary allocations.
+ *
+ * @deprecated Provided for backward compatibility with the 1.5 API.
+ */
 SVN_DEPRECATED
 svn_error_t *
 svn_wc_adm_close(svn_wc_adm_access_t *adm_access);
 
-/** Return the path used to open the access baton @a adm_access */
+/** Return the path used to open the access baton @a adm_access.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
 const char *
 svn_wc_adm_access_path(const svn_wc_adm_access_t *adm_access);
 
-/** Return the pool used by access baton @a adm_access */
+/** Return the pool used by access baton @a adm_access.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
 apr_pool_t *
 svn_wc_adm_access_pool(const svn_wc_adm_access_t *adm_access);
 
 /** Return @c TRUE is the access baton @a adm_access has a write lock,
  * @c FALSE otherwise. Compared to svn_wc_locked() this is a cheap, fast
  * function that doesn't access the filesystem.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * New code should use svn_wc_locked2() instead.
  */
+SVN_DEPRECATED
 svn_boolean_t
 svn_wc_adm_locked(const svn_wc_adm_access_t *adm_access);
 
-/** Set @a *locked to non-zero if @a path is locked, else set it to zero. */
+/** @} */
+
+
+/** Gets up to two booleans indicating whether a path is locked for
+ * writing.
+ *
+ * @a locked_here is set to TRUE when a write lock on @a local_abspath
+ * exists in @a wc_ctx. @a locked is set to TRUE when there is a
+ * write_lock on @a local_abspath
+ *
+ * @a locked_here and/or @a locked can be NULL when you are not
+ * interested in a specific value
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_locked2(svn_boolean_t *locked_here,
+               svn_boolean_t *locked,
+               svn_wc_context_t *wc_ctx,
+               const char *local_abspath,
+               apr_pool_t *scratch_pool);
+
+/** Set @a *locked to non-zero if @a path is locked, else set it to zero.
+ *
+ * New code should use svn_wc_locked2() instead.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_locked(svn_boolean_t *locked,
               const char *path,
@@ -445,6 +607,24 @@
 
 
 /**
+ * @defgroup svn_wc_adm_dir_name Name of Subversion's admin dir
+ * @{
+ */
+
+/** The default name of the administrative subdirectory.
+ *
+ * Ideally, this would be completely private to wc internals (in fact,
+ * it used to be that adm_subdir() in adm_files.c was the only function
+ * who knew the adm subdir's name).  However, import wants to protect
+ * against importing administrative subdirs, so now the name is a
+ * matter of public record.
+ *
+ * @deprecated Provided for backward compatibility with the 1.2 API.
+ */
+#define SVN_WC_ADM_DIR_NAME   ".svn"
+
+
+/**
  * Return @c TRUE if @a name is the name of the WC administrative
  * directory.  Use @a pool for any temporary allocations.  Only works
  * with base directory names, not paths or URIs.
@@ -489,8 +669,29 @@
 svn_wc_set_adm_dir(const char *name,
                    apr_pool_t *pool);
 
+/** @} */
+
+
+/**
+ * @defgroup svn_wc_externals Externals
+ * @{
+ */
+
+/** Callback for external definitions updates
+ *
+ * @a local_abspath is the path on which the external definition was found.
+ * @a old_val and @a new_val are the before and after values of the
+ * SVN_PROP_EXTERNALS property.  @a depth is the ambient depth of the
+ * working copy directory at @a local_abspath.
+ *
+ * @since New in 1.7. */
+typedef svn_error_t *(*svn_wc_external_update_t)(void *baton,
+                                                 const char *local_abspath,
+                                                 const svn_string_t *old_val,
+                                                 const svn_string_t *new_val,
+                                                 svn_depth_t depth,
+                                                 apr_pool_t *scratch_pool);
 
-
 /** Traversal information is information gathered by a working copy
  * crawl or update.  For example, the before and after values of the
  * svn:externals property are important after an update, and since
@@ -498,15 +699,24 @@
  * during the initial crawl, and a traversal of changed paths during
  * the checkout/update/switch), it makes sense to gather the
  * property's values then instead of making a second pass.
+ *
+ * New code should use the svn_wc_external_update_t callback instead.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 typedef struct svn_wc_traversal_info_t svn_wc_traversal_info_t;
 
 
-/** Return a new, empty traversal info object, allocated in @a pool. */
+/** Return a new, empty traversal info object, allocated in @a pool.
+ *
+ * New code should use the svn_wc_external_update_t callback instead.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
 svn_wc_traversal_info_t *
 svn_wc_init_traversal_info(apr_pool_t *pool);
 
-
 /** Set @a *externals_old and @a *externals_new to hash tables representing
  * changes to values of the svn:externals property on directories
  * traversed by @a traversal_info.
@@ -525,7 +735,12 @@
  * of the property did not change show the same value in each hash.
  *
  * The hashes, keys, and values have the same lifetime as @a traversal_info.
+ *
+ * New code should use the svn_wc_external_update_t callback instead.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 void
 svn_wc_edited_externals(apr_hash_t **externals_old,
                         apr_hash_t **externals_new,
@@ -550,8 +765,12 @@
  *
  * The hashes and keys have the same lifetime as @a traversal_info.
  *
+ * New code should use the svn_wc_external_update_t callback instead.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 void
 svn_wc_traversed_depths(apr_hash_t **depths,
                         svn_wc_traversal_info_t *traversal_info);
@@ -596,7 +815,7 @@
  * Set @a *item to an external item object, allocated in @a pool.
  *
  * In order to avoid backwards compatibility problems, this function
- * is used to initialize and allocate the @c svn_wc_external_item2_t
+ * is used to initialize and allocate the #svn_wc_external_item2_t
  * structure rather than doing so explicitly, as the size of this
  * structure may change in the future.
  *
@@ -628,13 +847,13 @@
  */
 typedef struct svn_wc_external_item_t
 {
-  /** Same as @c svn_wc_external_item2_t.target_dir */
+  /** Same as #svn_wc_external_item2_t.target_dir */
   const char *target_dir;
 
-  /** Same as @c svn_wc_external_item2_t.url */
+  /** Same as #svn_wc_external_item2_t.url */
   const char *url;
 
-  /** Same as @c svn_wc_external_item2_t.revision */
+  /** Same as #svn_wc_external_item2_t.revision */
   svn_opt_revision_t revision;
 
 } svn_wc_external_item_t;
@@ -654,17 +873,24 @@
 
 /**
  * If @a externals_p is non-NULL, set @a *externals_p to an array of
- * @c svn_wc_external_item2_t * objects based on @a desc.  The @a url
- * member of the objects will be canonicalized if @a canonicalize_url
- * is @c TRUE.
+ * #svn_wc_external_item2_t * objects based on @a desc.
  *
  * If the format of @a desc is invalid, don't touch @a *externals_p and
- * return @c SVN_ERR_CLIENT_INVALID_EXTERNALS_DESCRIPTION.  Thus, if
+ * return #SVN_ERR_CLIENT_INVALID_EXTERNALS_DESCRIPTION.  Thus, if
  * you just want to check the validity of an externals description,
  * and don't care about the parsed result, pass NULL for @a externals_p.
  *
  * The format of @a desc is the same as for values of the directory
- * property @c SVN_PROP_EXTERNALS, which see.
+ * property #SVN_PROP_EXTERNALS.  Look there for more details.
+ *
+ * If @a canonicalize_url is @c TRUE, canonicalize the @a url member
+ * of those objects.  If the @a url member refers to an absolute URL,
+ * it will be canonicalized as URL consistent with the way URLs are
+ * canonicalized throughout the Subversion API.  If, however, the
+ * @a url member makes use of the recognized (and proprietary)
+ * relative URL syntax, "canonicalization" is a less easily-defined
+ * concept which may even result in munging the relative URL syntax
+ * beyond recognition.  You've been warned.
  *
  * Allocate the table, keys, and values in @a pool.
  *
@@ -681,9 +907,9 @@
 
 /**
  * Similar to svn_wc_parse_externals_description3() with @a
- * canonicalize_url set to @c TRUE, but returns an array of @c
- * svn_wc_external_item_t * objects instead of @c
- * svn_wc_external_item2_t * objects
+ * canonicalize_url set to @c TRUE, but returns an array of
+ * #svn_wc_external_item_t * objects instead of
+ * #svn_wc_external_item2_t * objects
  *
  * @since New in 1.1.
  *
@@ -711,9 +937,8 @@
                                    const char *desc,
                                    apr_pool_t *pool);
 
-
+/** @} */
 
-/* Notification/callback handling. */
 
 /**
  * @defgroup svn_wc_notifications Notification callback handling
@@ -728,11 +953,11 @@
  * takes the path of the file that was affected, and a caller-
  * supplied baton.
  *
- * Note that the callback is a 'void' return -- this is a simple
+ * @note The callback is a 'void' return -- this is a simple
  * reporting mechanism, rather than an opportunity for the caller to
  * alter the operation of the WC library.
  *
- * Note also that some of the actions are used across several
+ * @note Some of the actions are used across several
  * different Subversion commands.  For example, the update actions are
  * also used for checkouts, switches, and merges.
  */
@@ -825,15 +1050,16 @@
   svn_wc_notify_changelist_clear,
 
   /** Warn user that a path has moved from one changelist to another.
-      @since New in 1.5. */
+      @since New in 1.5.
+      @deprecated As of 1.7, separate clear and set notifications are sent. */
   svn_wc_notify_changelist_moved,
 
-  /** A merge operation (to path) has begun.  See @c merge_range in
-      @c svn_wc_notify_t. @since New in 1.5. */
+  /** A merge operation (to path) has begun.  See #svn_wc_notify_t.merge_range.
+      @since New in 1.5. */
   svn_wc_notify_merge_begin,
 
   /** A merge operation (to path) from a foreign repository has begun.
-      See @c merge_range in @c svn_wc_notify_t. @since New in 1.5. */
+      See #svn_wc_notify_t.merge_range.  @since New in 1.5. */
   svn_wc_notify_foreign_merge_begin,
 
   /** Replace notification. @since New in 1.5. */
@@ -867,7 +1093,121 @@
 
   /** The path is a subdirectory referenced in an externals definition
    * which is unable to be operated on.  @since New in 1.6. */
-  svn_wc_notify_failed_external
+  svn_wc_notify_failed_external,
+
+  /** Starting an update operation.  @since New in 1.7. */
+  svn_wc_notify_update_started,
+
+  /** An update tried to add a file or directory at a path where
+   * a separate working copy was found.  @since New in 1.7. */
+  svn_wc_notify_update_skip_obstruction,
+
+  /** An explicit update tried to update a file or directory that
+   * doesn't live in the repository and can't be brought in.
+   * @since New in 1.7. */
+  svn_wc_notify_update_skip_working_only,
+
+  /** An update tried to update a file or directory to which access could
+   * not be obtained. @since New in 1.7. */
+  svn_wc_notify_update_skip_access_denied,
+
+  /** An update operation removed an external working copy.
+   * @since New in 1.7. */
+  svn_wc_notify_update_external_removed,
+
+  /** A node below an existing node was added during update.
+   * @since New in 1.7. */
+  svn_wc_notify_update_shadowed_add,
+
+  /** A node below an exising node was updated during update.
+   * @since New in 1.7. */
+  svn_wc_notify_update_shadowed_update,
+
+  /** A node below an existing node was deleted during update.
+   * @since New in 1.7. */
+  svn_wc_notify_update_shadowed_delete,
+
+  /** The mergeinfo on path was updated.  @since New in 1.7. */
+  svn_wc_notify_merge_record_info,
+
+  /** An working copy directory was upgraded to the latest format
+   * @since New in 1.7. */
+  svn_wc_notify_upgraded_path,
+
+  /** Mergeinfo describing a merge was recorded.
+   * @since New in 1.7. */
+  svn_wc_notify_merge_record_info_begin,
+
+  /** Mergeinfo was removed due to elision.
+   * @since New in 1.7. */
+  svn_wc_notify_merge_elide_info,
+
+  /** A file in the working copy was patched.
+   * @since New in 1.7. */
+  svn_wc_notify_patch,
+
+  /** A hunk from a patch was applied.
+   * @since New in 1.7. */
+  svn_wc_notify_patch_applied_hunk,
+
+  /** A hunk from a patch was rejected.
+   * @since New in 1.7. */
+  svn_wc_notify_patch_rejected_hunk,
+
+  /** A hunk from a patch was found to already be applied.
+   * @since New in 1.7. */
+  svn_wc_notify_patch_hunk_already_applied,
+
+  /** Committing a non-overwriting copy (path is the target of the
+   * copy, not the source).
+   * @since New in 1.7. */
+  svn_wc_notify_commit_copied,
+
+  /** Committing an overwriting (replace) copy (path is the target of
+   * the copy, not the source).
+   * @since New in 1.7. */
+  svn_wc_notify_commit_copied_replaced,
+
+  /** The server has instructed the client to follow a URL
+   * redirection.
+   * @since New in 1.7. */
+  svn_wc_notify_url_redirect,
+
+  /** The operation was attempted on a path which doesn't exist.
+   * @since New in 1.7. */
+  svn_wc_notify_path_nonexistent,
+
+  /** Removing a path by excluding it.
+   * @since New in 1.7. */
+  svn_wc_notify_exclude,
+
+  /** Operation failed because the node remains in conflict
+   * @since New in 1.7. */
+  svn_wc_notify_failed_conflict,
+
+  /** Operation failed because an added node is missing
+   * @since New in 1.7. */
+  svn_wc_notify_failed_missing,
+
+  /** Operation failed because a node is out of date
+   * @since New in 1.7. */
+  svn_wc_notify_failed_out_of_date,
+
+  /** Operation failed because an added parent is not selected
+   * @since New in 1.7. */
+  svn_wc_notify_failed_no_parent,
+
+  /** Operation failed because a node is locked by another user and/or
+   * working copy.  @since New in 1.7. */
+  svn_wc_notify_failed_locked,
+
+  /** Operation failed because the operation was forbidden by the server.
+   * @since New in 1.7. */
+  svn_wc_notify_failed_forbidden_by_server,
+
+  /** The operation skipped the path because it was conflicted.
+   * @since New in 1.7. */
+  svn_wc_notify_skip_conflicted
 
 } svn_wc_notify_action_t;
 
@@ -896,7 +1236,10 @@
   svn_wc_notify_state_merged,
 
   /** Modified state got conflicting mods. */
-  svn_wc_notify_state_conflicted
+  svn_wc_notify_state_conflicted,
+
+  /** The source to copy the file from is missing. */
+  svn_wc_notify_state_source_missing
 
 } svn_wc_notify_state_t;
 
@@ -923,14 +1266,14 @@
 } svn_wc_notify_lock_state_t;
 
 /**
- * Structure used in the @c svn_wc_notify_func2_t function.
+ * Structure used in the #svn_wc_notify_func2_t function.
  *
  * @c kind, @c content_state, @c prop_state and @c lock_state are from
  * after @c action, not before.
  *
- * @note If @c action is @c svn_wc_notify_update, then @c path has
+ * @note If @c action is #svn_wc_notify_update (### what?), then @c path has
  * already been installed, so it is legitimate for an implementation of
- * @c svn_wc_notify_func2_t to examine @c path in the working copy.
+ * #svn_wc_notify_func2_t to examine @c path in the working copy.
  *
  * @note The purpose of the @c kind, @c mime_type, @c content_state, and
  * @c prop_state fields is to provide "for free" information that an
@@ -951,12 +1294,12 @@
 typedef struct svn_wc_notify_t {
 
   /** Path, either absolute or relative to the current working directory
-   * (i.e., not relative to an anchor). at c path is "." or another valid path
-   * value for compatibilty reasons when the real target is an url that
+   * (i.e., not relative to an anchor).  @c path is "." or another valid path
+   * value for compatibility reasons when the real target is an url that
    * is available in @c url. */
   const char *path;
 
-  /** Action that describes what happened to @c path. */
+  /** Action that describes what happened to #svn_wc_notify_t.path. */
   svn_wc_notify_action_t action;
 
   /** Node kind of @c path. */
@@ -967,13 +1310,13 @@
   const char *mime_type;
 
   /** Points to the lock structure received from the repository when
-   * @c action is @c svn_wc_notify_locked.  For other actions, it is
+   * @c action is #svn_wc_notify_locked.  For other actions, it is
    * @c NULL. */
   const svn_lock_t *lock;
 
   /** Points to an error describing the reason for the failure when @c
-   * action is one of the following: @c svn_wc_notify_failed_lock, @c
-   * svn_wc_notify_failed_unlock, @c svn_wc_notify_failed_external.
+   * action is one of the following: #svn_wc_notify_failed_lock,
+   * #svn_wc_notify_failed_unlock, #svn_wc_notify_failed_external.
    * Is @c NULL otherwise. */
   svn_error_t *err;
 
@@ -986,17 +1329,20 @@
   /** Reflects the addition or removal of a lock token in the working copy. */
   svn_wc_notify_lock_state_t lock_state;
 
-  /** When @c action is @c svn_wc_notify_update_completed, target revision
-   * of the update, or @c SVN_INVALID_REVNUM if not available; when @c
-   * action is @c svn_wc_notify_blame_revision, processed revision.
-   * In all other cases, it is @c SVN_INVALID_REVNUM. */
+  /** When @c action is #svn_wc_notify_update_completed, target revision
+   * of the update, or #SVN_INVALID_REVNUM if not available; when @c
+   * action is #svn_wc_notify_blame_revision, processed revision; Since
+   * Subversion 1.7 when action is #svn_wc_notify_update_update or
+   * #svn_wc_notify_update_add, the target revision.
+   * In all other cases, it is #SVN_INVALID_REVNUM.
+   */
   svn_revnum_t revision;
 
-  /** When @c action is @c svn_wc_notify_changelist_add or name.  In all other
-   * cases, it is @c NULL.  @since New in 1.5 */
+  /** If @c action pertains to a changelist, this is the changelist name.
+   * In all other cases, it is @c NULL.  @since New in 1.5 */
   const char *changelist_name;
 
-  /** When @c action is @c svn_wc_notify_merge_begin, and both the
+  /** When @c action is #svn_wc_notify_merge_begin, and both the
    * left and right sides of the merge are from the same URL.  In all
    * other cases, it is @c NULL.  @since New in 1.5 */
   svn_merge_range_t *merge_range;
@@ -1015,17 +1361,43 @@
    * @since New in 1.6 */
   const char *prop_name;
 
-  /** If @c action is @c svn_wc_notify_blame_revision, contains a list of
-   * revision properties for the specified revision */
+  /** If @c action is #svn_wc_notify_blame_revision, contains a list of
+   * revision properties for the specified revision
+   * @since New in 1.6 */
   apr_hash_t *rev_props;
 
+  /** If @c action is #svn_wc_notify_update_update or
+   * #svn_wc_notify_update_add, contains the revision before the update.
+   * In all other cases, it is #SVN_INVALID_REVNUM.
+   * @since New in 1.7 */
+  svn_revnum_t old_revision;
+
+  /** These fields are used by svn patch to identify the
+   * hunk the notification is for. They are line-based
+   * offsets and lengths parsed from the unidiff hunk header.
+   * @since New in 1.7. */
+  /* @{ */
+  svn_linenum_t hunk_original_start;
+  svn_linenum_t hunk_original_length;
+  svn_linenum_t hunk_modified_start;
+  svn_linenum_t hunk_modified_length;
+  /* @} */
+
+  /** The line at which a hunk was matched (and applied).
+   * @since New in 1.7. */
+  svn_linenum_t hunk_matched_line;
+
+  /** The fuzz factor the hunk was applied with.
+   * @since New in 1.7 */
+  svn_linenum_t hunk_fuzz;
+
   /* NOTE: Add new fields at the end to preserve binary compatibility.
      Also, if you add fields here, you have to update svn_wc_create_notify
      and svn_wc_dup_notify. */
 } svn_wc_notify_t;
 
 /**
- * Allocate an @c svn_wc_notify_t structure in @a pool, initialize and return
+ * Allocate an #svn_wc_notify_t structure in @a pool, initialize and return
  * it.
  *
  * Set the @c path field of the created struct to @a path, and @c action to
@@ -1041,11 +1413,11 @@
                      apr_pool_t *pool);
 
 /**
- * Allocate an @c svn_wc_notify_t structure in @a pool, initialize and return
+ * Allocate an #svn_wc_notify_t structure in @a pool, initialize and return
  * it.
  *
- * Set the @c url field of the created struct to @a url, @c action to, @c path
- * to "." and @a action.  Set all other fields to their @c _unknown, @c NULL or
+ * Set the @c url field of the created struct to @a url, @c path to "." and @c
+ * action to @a action.  Set all other fields to their @c _unknown, @c NULL or
  * invalid value, respectively. Make only a shallow copy of the pointer
  * @a url.
  *
@@ -1068,14 +1440,14 @@
 /**
  * Notify the world that @a notify->action has happened to @a notify->path.
  *
- * Recommendation: callers of @c svn_wc_notify_func2_t should avoid
+ * Recommendation: callers of #svn_wc_notify_func2_t should avoid
  * invoking it multiple times on the same path within a given
  * operation, and implementations should not bother checking for such
  * duplicate calls.  For example, in an update, the caller should not
  * invoke the notify func on receiving a prop change and then again
  * on receiving a text change.  Instead, wait until all changes have
  * been received, and then invoke the notify func once (from within
- * an @c svn_delta_editor_t's close_file(), for example), passing
+ * an #svn_delta_editor_t's close_file(), for example), passing
  * the appropriate @a notify->content_state and @a notify->prop_state flags.
  *
  * @since New in 1.2.
@@ -1085,7 +1457,7 @@
                                       apr_pool_t *pool);
 
 /**
- * Similar to @c svn_wc_notify_func2_t, but takes the information as arguments
+ * Similar to #svn_wc_notify_func2_t, but takes the information as arguments
  * instead of struct fields.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
@@ -1103,29 +1475,9 @@
 
 
 /**
- * A simple callback type to wrap svn_ra_get_file();  see that
- * docstring for more information.
- *
- * This technique allows libsvn_client to 'wrap' svn_ra_get_file() and
- * pass it down into libsvn_wc functions, thus allowing the WC layer
- * to legally call the RA function via (blind) callback.
- *
- * @since New in 1.5
- */
-typedef svn_error_t *(*svn_wc_get_file_t)(void *baton,
-                                          const char *path,
-                                          svn_revnum_t revision,
-                                          svn_stream_t *stream,
-                                          svn_revnum_t *fetched_rev,
-                                          apr_hash_t **props,
-                                          apr_pool_t *pool);
-
-
-/**
  * Interactive conflict handling
  *
  * @defgroup svn_wc_conflict Conflict callback functionality
- *
  * @{
  *
  * This API gives a Subversion client application the opportunity to
@@ -1133,7 +1485,7 @@
  * interactively during updates and merges.
  *
  * If a conflict is discovered, libsvn_wc invokes the callback with an
- * @c svn_wc_conflict_description_t.  This structure describes the
+ * #svn_wc_conflict_description_t.  This structure describes the
  * path in conflict, whether it's a text or property conflict, and may
  * also present up to three files that can be used to resolve the
  * conflict (perhaps by launching an editor or 3rd-party merging
@@ -1145,7 +1497,7 @@
  * series of multi-line text.)
  *
  * When the callback is finished interacting with the user, it
- * responds by returning a @c svn_wc_conflict_result_t.  This
+ * responds by returning a #svn_wc_conflict_result_t.  This
  * structure indicates whether the user wants to postpone the conflict
  * for later (allowing libsvn_wc to mark the path "conflicted" as
  * usual), or whether the user wants libsvn_wc to use one of the four
@@ -1153,7 +1505,7 @@
  *
  * Note that the callback is at liberty (and encouraged) to merge the
  * three files itself.  If it does so, it signals this to libsvn_wc by
- * returning a choice of @c svn_wc_conflict_choose_merged.  To return
+ * returning a choice of #svn_wc_conflict_choose_merged.  To return
  * the 'final' merged file to libsvn_wc, the callback has the option of
  * either:
  *
@@ -1162,7 +1514,7 @@
  *        or, if libsvn_wc never supplied a merged_file in the
  *        description structure (i.e. passed NULL for that field),
  *
- *    - return the merged file in the @c svn_wc_conflict_result_t.
+ *    - return the merged file in the #svn_wc_conflict_result_t.
  *
  */
 
@@ -1172,10 +1524,11 @@
  */
 typedef enum svn_wc_conflict_action_t
 {
-  svn_wc_conflict_action_edit,    /* attempting to change text or props */
-  svn_wc_conflict_action_add,     /* attempting to add object */
-  svn_wc_conflict_action_delete   /* attempting to delete object */
-
+  svn_wc_conflict_action_edit,    /**< attempting to change text or props */
+  svn_wc_conflict_action_add,     /**< attempting to add object */
+  svn_wc_conflict_action_delete,  /**< attempting to delete object */
+  svn_wc_conflict_action_replace  /**< attempting to replace object,
+                                       @since New in 1.7 */
 } svn_wc_conflict_action_t;
 
 
@@ -1196,13 +1549,15 @@
   /** Object is unversioned */
   svn_wc_conflict_reason_unversioned,
   /** Object is already added or schedule-add. @since New in 1.6. */
-  svn_wc_conflict_reason_added
+  svn_wc_conflict_reason_added,
+  /** Object is already replaced. @since New in 1.7. */
+  svn_wc_conflict_reason_replaced
 
 } svn_wc_conflict_reason_t;
 
 
-/** The type of conflict being described by an @c
- * svn_wc_conflict_description_t (see below).
+/** The type of conflict being described by an
+ * #svn_wc_conflict_description2_t (see below).
  *
  * @since New in 1.5.
  */
@@ -1275,7 +1630,7 @@
 } svn_wc_conflict_version_t;
 
 /**
- * Allocate an @c svn_wc_conflict_version_t structure in @a pool,
+ * Allocate an #svn_wc_conflict_version_t structure in @a pool,
  * initialize to contain a conflict origin, and return it.
  *
  * Set the @c repos_url field of the created struct to @a repos_url, the
@@ -1287,7 +1642,7 @@
  */
 svn_wc_conflict_version_t *
 svn_wc_conflict_version_create(const char *repos_url,
-                               const char* path_in_repos,
+                               const char *path_in_repos,
                                svn_revnum_t peg_rev,
                                svn_node_kind_t node_kind,
                                apr_pool_t *pool);
@@ -1301,22 +1656,115 @@
 svn_wc_conflict_version_dup(const svn_wc_conflict_version_t *version,
                             apr_pool_t *pool);
 
-
 /** A struct that describes a conflict that has occurred in the
- * working copy.  Passed to @c svn_wc_conflict_resolver_func_t.
+ * working copy.
  *
  * The conflict described by this structure is one of:
- *   - a conflict on the content of the file node @a path
- *   - a conflict on the property @a property_name of @a path
+ *   - a conflict on the content of the file node @a local_abspath
+ *   - a conflict on the property @a property_name of @a local_abspath
+ *   - a tree conflict, of which @a local_abspath is the victim
+ * Be aware that the victim of a tree conflict can be a non-existent node.
+ * The three kinds of conflict are distinguished by @a kind.
  *
  * @note Fields may be added to the end of this structure in future
  * versions.  Therefore, to preserve binary compatibility, users
  * should not directly allocate structures of this type but should use
- * svn_wc_create_conflict_description_text() or
- * svn_wc_create_conflict_description_prop() or
- * svn_wc_create_conflict_description_tree() instead.
+ * svn_wc_create_conflict_description_text2() or
+ * svn_wc_create_conflict_description_prop2() or
+ * svn_wc_create_conflict_description_tree2() instead.
+ *
+ * @since New in 1.7.
+ */
+typedef struct svn_wc_conflict_description2_t
+{
+  /** The path that is in conflict (for a tree conflict, it is the victim) */
+  const char *local_abspath;
+
+  /** The node type of the path being operated on (for a tree conflict,
+   *  ### which version?) */
+  svn_node_kind_t node_kind;
+
+  /** What sort of conflict are we describing? */
+  svn_wc_conflict_kind_t kind;
+
+  /** The name of the property whose conflict is being described.
+   *  (Only if @a kind is 'property'; else undefined.) */
+  const char *property_name;
+
+  /** Whether svn thinks ('my' version of) @c path is a 'binary' file.
+   *  (Only if @c kind is 'text', else undefined.) */
+  svn_boolean_t is_binary;
+
+  /** The svn:mime-type property of ('my' version of) @c path, if available,
+   *  else NULL.
+   *  (Only if @c kind is 'text', else undefined.) */
+  const char *mime_type;
+
+  /** The action being attempted on the conflicted node or property.
+   *  (When @c kind is 'text', this action must be 'edit'.) */
+  svn_wc_conflict_action_t action;
+
+  /** The state of the target node or property, relative to its merge-left
+   *  source, that is the reason for the conflict.
+   *  (When @c kind is 'text', this reason must be 'edited'.) */
+  svn_wc_conflict_reason_t reason;
+
+  /** If this is text-conflict and involves the merging of two files
+   * descended from a common ancestor, here are the paths of up to
+   * four fulltext files that can be used to interactively resolve the
+   * conflict.
+   *
+   * @a base_abspath, @a their_abspath and @a my_abspath are absolute
+   * paths.
+   *
+   * ### Is @a merged_file relative to some directory, or absolute?
+   *
+   * All four files will be in repository-normal form -- LF
+   * line endings and contracted keywords.  (If any of these files are
+   * not available, they default to NULL.)
+   *
+   * On the other hand, if this is a property-conflict, then these
+   * paths represent temporary files that contain the three different
+   * property-values in conflict.  The fourth path (@c merged_file)
+   * may or may not be NULL;  if set, it represents libsvn_wc's
+   * attempt to merge the property values together.  (Remember that
+   * property values are technically binary values, and thus can't
+   * always be merged.)
+   */
+  const char *base_abspath;  /* common ancestor of the two files being merged */
+
+  /** their version of the file */
+  /* ### BH: For properties this field contains the reference to
+             the property rejection (.prej) file */
+  const char *their_abspath;
+
+  /** my locally-edited version of the file */
+  const char *my_abspath;
+
+  /** merged version; may contain conflict markers */
+  const char *merged_file;
+
+  /** The operation that exposed the conflict.
+   * Used only for tree conflicts.
+   */
+  svn_wc_operation_t operation;
+
+  /** Info on the "merge-left source" or "older" version of incoming change. */
+  const svn_wc_conflict_version_t *src_left_version;
+
+  /** Info on the "merge-right source" or "their" version of incoming change. */
+  const svn_wc_conflict_version_t *src_right_version;
+
+  /* Remember to adjust svn_wc__conflict_description_dup()
+   * if you add new fields to this struct. */
+} svn_wc_conflict_description2_t;
+
+
+/** Similar to #svn_wc_conflict_description2_t, but with relative paths and
+ * adm_access batons.  Passed to #svn_wc_conflict_resolver_func_t.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 typedef struct svn_wc_conflict_description_t
 {
@@ -1406,41 +1854,64 @@
 } svn_wc_conflict_description_t;
 
 /**
- * Allocate an @c svn_wc_conflict_description_t structure in @a pool,
+ * Allocate an #svn_wc_conflict_description_t structure in @a result_pool,
  * initialize to represent a text conflict, and return it.
  *
- * Set the @c path field of the created struct to @a path, the @c access
- * field to @a adm_access, the @c kind field to @c
- * svn_wc_conflict_kind_text, the @c node_kind to @c svn_node_file, the @c
- * action to @c svn_wc_conflict_action_edit, and the @c reason to @c
- * svn_wc_conflict_reason_edited. Make only shallow copies of the pointer
- * arguments.
+ * Set the @c local_abspath field of the created struct to @a local_abspath
+ * (which must be an absolute path), the @c kind field to
+ * #svn_wc_conflict_kind_text, the @c node_kind to #svn_node_file,
+ * the @c action to #svn_wc_conflict_action_edit, and the @c reason to
+ * #svn_wc_conflict_reason_edited.
  *
- * @note: It is the caller's responsibility to set the other required fields
+ * @note It is the caller's responsibility to set the other required fields
  * (such as the four file names and @c mime_type and @c is_binary).
  *
+ * @since New in 1.7.
+ */
+svn_wc_conflict_description2_t *
+svn_wc_conflict_description_create_text2(const char *local_abspath,
+                                         apr_pool_t *result_pool);
+
+
+/** Similar to svn_wc_conflict_description_create_text2(), but returns
+ * a #svn_wc_conflict_description_t *.
+ *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_wc_conflict_description_t *
 svn_wc_conflict_description_create_text(const char *path,
                                         svn_wc_adm_access_t *adm_access,
                                         apr_pool_t *pool);
 
 /**
- * Allocate an @c svn_wc_conflict_description_t structure in @a pool,
+ * Allocate an #svn_wc_conflict_description_t structure in @a result_pool,
  * initialize to represent a property conflict, and return it.
  *
- * Set the @c path field of the created struct to @a path, the @c access
- * field to @a adm_access, the @c kind field to @c
- * svn_wc_conflict_kind_prop, the @c node_kind to @a node_kind, and the @c
- * property_name to @a property_name. Make only shallow copies of the pointer
- * arguments.
+ * Set the @c local_abspath field of the created struct to @a local_abspath
+ * (which must be an absolute path), the @c kind field
+ * to #svn_wc_conflict_kind_prop, the @c node_kind to @a node_kind, and
+ * the @c property_name to @a property_name.
  *
  * @note: It is the caller's responsibility to set the other required fields
  * (such as the four file names and @c action and @c reason).
  *
+ * @since New in 1.7.
+ */
+svn_wc_conflict_description2_t *
+svn_wc_conflict_description_create_prop2(const char *local_abspath,
+                                         svn_node_kind_t node_kind,
+                                         const char *property_name,
+                                         apr_pool_t *result_pool);
+
+/** Similar to svn_wc_conflict_descriptor_create_prop(), but returns
+ * a #svn_wc_conflict_description_t *.
+ *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_wc_conflict_description_t *
 svn_wc_conflict_description_create_prop(const char *path,
                                         svn_wc_adm_access_t *adm_access,
@@ -1449,32 +1920,58 @@
                                         apr_pool_t *pool);
 
 /**
- * Allocate an @c svn_wc_conflict_description_t structure in @a pool,
+ * Allocate an #svn_wc_conflict_description_t structure in @a pool,
  * initialize to represent a tree conflict, and return it.
  *
- * Set the @c path field of the created struct to @a path, the @c access
- * field to @a adm_access, the @c kind field to @c
- * svn_wc_conflict_kind_tree, the @c node_kind to @a node_kind, the @c
+ * Set the @c local_abspath field of the created struct to @a local_abspath
+ * (which must be an absolute path), the @c kind field to
+ * #svn_wc_conflict_kind_tree, the @c node_kind to @a node_kind, the @c
  * operation to @a operation, the @c src_left_version field to
  * @a src_left_version, and the @c src_right_version field to
  * @a src_right_version.
- * Make only shallow copies of the pointer arguments.
  *
  * @note: It is the caller's responsibility to set the other required fields
  * (such as the four file names and @c action and @c reason).
  *
+ * @since New in 1.7.
+ */
+svn_wc_conflict_description2_t *
+svn_wc_conflict_description_create_tree2(
+  const char *local_abspath,
+  svn_node_kind_t node_kind,
+  svn_wc_operation_t operation,
+  const svn_wc_conflict_version_t *src_left_version,
+  const svn_wc_conflict_version_t *src_right_version,
+  apr_pool_t *result_pool);
+
+
+/** Similar to svn_wc_conflict_description_create_tree(), but returns
+ * a #svn_wc_conflict_description_t *.
+ *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_wc_conflict_description_t *
-svn_wc_conflict_description_create_tree(const char *path,
-                                        svn_wc_adm_access_t *adm_access,
-                                        svn_node_kind_t node_kind,
-                                        svn_wc_operation_t operation,
-                                        svn_wc_conflict_version_t
-                                          *src_left_version,
-                                        svn_wc_conflict_version_t
-                                          *src_right_version,
-                                        apr_pool_t *pool);
+svn_wc_conflict_description_create_tree(
+  const char *path,
+  svn_wc_adm_access_t *adm_access,
+  svn_node_kind_t node_kind,
+  svn_wc_operation_t operation,
+  /* non-const */ svn_wc_conflict_version_t *src_left_version,
+  /* non-const */ svn_wc_conflict_version_t *src_right_version,
+  apr_pool_t *pool);
+
+
+/** Return a duplicate of @a conflict, allocated in @a result_pool.
+ * A deep copy of all members will be made.
+ *
+ * @since New in 1.7.
+ */
+svn_wc_conflict_description2_t *
+svn_wc__conflict_description2_dup(
+  const svn_wc_conflict_description2_t *conflict,
+  apr_pool_t *result_pool);
 
 
 /** The way in which the conflict callback chooses a course of action.
@@ -1483,30 +1980,30 @@
  */
 typedef enum svn_wc_conflict_choice_t
 {
-  /* Don't resolve the conflict now.  Let libsvn_wc mark the path
+  /** Don't resolve the conflict now.  Let libsvn_wc mark the path
      'conflicted', so user can run 'svn resolved' later. */
   svn_wc_conflict_choose_postpone,
 
-  /* If their were files to choose from, select one as a way of
+  /** If there were files to choose from, select one as a way of
      resolving the conflict here and now.  libsvn_wc will then do the
      work of "installing" the chosen file.
   */
-  svn_wc_conflict_choose_base,            /* original version */
-  svn_wc_conflict_choose_theirs_full,     /* incoming version */
-  svn_wc_conflict_choose_mine_full,       /* own version */
-  svn_wc_conflict_choose_theirs_conflict, /* incoming (for conflicted hunks) */
-  svn_wc_conflict_choose_mine_conflict,   /* own (for conflicted hunks) */
-  svn_wc_conflict_choose_merged           /* merged version */
+  svn_wc_conflict_choose_base,            /**< original version */
+  svn_wc_conflict_choose_theirs_full,     /**< incoming version */
+  svn_wc_conflict_choose_mine_full,       /**< own version */
+  svn_wc_conflict_choose_theirs_conflict, /**< incoming (for conflicted hunks) */
+  svn_wc_conflict_choose_mine_conflict,   /**< own (for conflicted hunks) */
+  svn_wc_conflict_choose_merged           /**< merged version */
 
 } svn_wc_conflict_choice_t;
 
 
-/** The final result returned by @c svn_wc_conflict_resolver_func_t.
+/** The final result returned by #svn_wc_conflict_resolver_func_t.
  *
  * @note Fields may be added to the end of this structure in future
  * versions.  Therefore, to preserve binary compatibility, users
  * should not directly allocate structures of this type.  Instead,
- * construct this structure using @c svn_wc_create_conflict_result()
+ * construct this structure using svn_wc_create_conflict_result()
  * below.
  *
  * @since New in 1.5.
@@ -1520,7 +2017,7 @@
   /** If not NULL, this is a path to a file which contains the client's
       (or more likely, the user's) merging of the three values in
       conflict.  libsvn_wc accepts this file if (and only if) @c choice
-      is set to @c svn_wc_conflict_choose_merged.*/
+      is set to #svn_wc_conflict_choose_merged.*/
   const char *merged_file;
 
   /** If true, save a backup copy of merged_file (or the original
@@ -1532,7 +2029,7 @@
 
 
 /**
- * Allocate an @c svn_wc_conflict_result_t structure in @a pool,
+ * Allocate an #svn_wc_conflict_result_t structure in @a pool,
  * initialize and return it.
  *
  * Set the @c choice field of the structure to @a choice, and @c
@@ -1548,56 +2045,68 @@
                               apr_pool_t *pool);
 
 
-/** A callback used in svn_client_merge3(), svn_client_update3(), and
- * svn_client_switch2() for resolving conflicts during the application
- * of a tree delta to a working copy.
+/** A callback used in merge, update and switch for resolving conflicts
+ * during the application of a tree delta to a working copy.
  *
  * @a description describes the exact nature of the conflict, and
  * provides information to help resolve it.  @a baton is a closure
  * object; it should be provided by the implementation, and passed by
- * the caller.  All allocations should be performed in @a pool.  When
- * finished, the callback signals its resolution by returning a
- * structure in @a *result.  (See @c svn_wc_conflict_result_t.)
+ * the caller.  When finished, the callback signals its resolution by
+ * returning a structure in @a *result, which should be allocated in
+ * @a result_pool.  (See #svn_wc_conflict_result_t.)  @a scratch_pool
+ * should be used for any temporary allocations.
  *
- * The values @c svn_wc_conflict_choose_mine_conflict and @c
- * svn_wc_conflict_choose_theirs_conflict are not legal for conflicts
+ * The values #svn_wc_conflict_choose_mine_conflict and
+ * #svn_wc_conflict_choose_theirs_conflict are not legal for conflicts
  * in binary files or properties.
  *
  * Implementations of this callback are free to present the conflict
  * using any user interface.  This may include simple contextual
  * conflicts in a file's text or properties, or more complex
- * 'tree'-based conflcts related to obstructed additions, deletions,
+ * 'tree'-based conflicts related to obstructed additions, deletions,
  * and edits.  The callback implementation is free to decide which
  * sorts of conflicts to handle; it's also free to decide which types
  * of conflicts are automatically resolvable and which require user
  * interaction.
  *
+ * @since New in 1.7.
+ */
+typedef svn_error_t *(*svn_wc_conflict_resolver_func2_t)(
+  svn_wc_conflict_result_t **result,
+  const svn_wc_conflict_description2_t *description,
+  void *baton,
+  apr_pool_t *result_pool,
+  apr_pool_t *scratch_pool);
+
+
+/** Similar to #svn_wc_conflict_resolver_func2_t, but using
+ * #svn_wc_conflict_description_t instead of
+ * #svn_wc_conflict_description2_t
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
-typedef svn_error_t *(*svn_wc_conflict_resolver_func_t)
-    (svn_wc_conflict_result_t **result,
-     const svn_wc_conflict_description_t *description,
-     void *baton,
-     apr_pool_t *pool);
+typedef svn_error_t *(*svn_wc_conflict_resolver_func_t)(
+  svn_wc_conflict_result_t **result,
+  const svn_wc_conflict_description_t *description,
+  void *baton,
+  apr_pool_t *pool);
 
 /** @} */
 
 
 
 /**
- * A callback vtable invoked by our diff-editors, as they receive
- * diffs from the server.  'svn diff' and 'svn merge' both implement
- * their own versions of this table.
+ * A callback vtable invoked by our diff-editors, as they receive diffs
+ * from the server. 'svn diff' and 'svn merge' implement their own versions
+ * of this vtable.
  *
  * Common parameters:
  *
- * @a adm_access will be an access baton for the directory containing
- * @a path, or @c NULL if the diff editor is not using access batons.
- *
  * If @a state is non-NULL, set @a *state to the state of the item
  * after the operation has been performed.  (In practice, this is only
  * useful with merge, not diff; diff callbacks will probably set
- * @a *state to @c svn_wc_notify_state_unknown, since they do not change
+ * @a *state to #svn_wc_notify_state_unknown, since they do not change
  * the state and therefore do not bother to know the state after the
  * operation.)  By default, @a state refers to the item's content
  * state.  Functions concerned with property state have separate
@@ -1608,11 +2117,23 @@
  * state, this is only useful with merge, not diff; diff callbacks
  * should set this to false.)
  *
- * @since New in 1.6.
+ * @since New in 1.7.
  */
-typedef struct svn_wc_diff_callbacks3_t
+typedef struct svn_wc_diff_callbacks4_t
 {
   /**
+   * This function is called before @a file_changed to allow callbacks to
+   * skip the most expensive processing of retrieving the file data.
+   *
+   */
+  svn_error_t *(*file_opened)(svn_boolean_t *tree_conflicted,
+                              svn_boolean_t *skip,
+                              const char *path,
+                              svn_revnum_t rev,
+                              void *diff_baton,
+                              apr_pool_t *scratch_pool);
+
+  /**
    * A file @a path has changed.  If @a tmpfile2 is non-NULL, the
    * contents have changed and those changes can be seen by comparing
    * @a tmpfile1 and @a tmpfile2, which represent @a rev1 and @a rev2 of
@@ -1623,14 +2144,13 @@
    * be NULL.  The implementor can use this information to decide if
    * (or how) to generate differences.
    *
-   * @a propchanges is an array of (@c svn_prop_t) structures. If it contains
+   * @a propchanges is an array of (#svn_prop_t) structures. If it contains
    * any elements, the original list of properties is provided in
-   * @a originalprops, which is a hash of @c svn_string_t values, keyed on the
+   * @a originalprops, which is a hash of #svn_string_t values, keyed on the
    * property name.
    *
    */
-  svn_error_t *(*file_changed)(svn_wc_adm_access_t *adm_access,
-                               svn_wc_notify_state_t *contentstate,
+  svn_error_t *(*file_changed)(svn_wc_notify_state_t *contentstate,
                                svn_wc_notify_state_t *propstate,
                                svn_boolean_t *tree_conflicted,
                                const char *path,
@@ -1642,7 +2162,8 @@
                                const char *mimetype2,
                                const apr_array_header_t *propchanges,
                                apr_hash_t *originalprops,
-                               void *diff_baton);
+                               void *diff_baton,
+                               apr_pool_t *scratch_pool);
 
   /**
    * A file @a path was added.  The contents can be seen by comparing
@@ -1655,13 +2176,15 @@
    * be NULL.  The implementor can use this information to decide if
    * (or how) to generate differences.
    *
-   * @a propchanges is an array of (@c svn_prop_t) structures.  If it contains
+   * @a propchanges is an array of (#svn_prop_t) structures.  If it contains
    * any elements, the original list of properties is provided in
-   * @a originalprops, which is a hash of @c svn_string_t values, keyed on the
+   * @a originalprops, which is a hash of #svn_string_t values, keyed on the
    * property name.
+   * If @a copyfrom_path is non- at c NULL, this add has history (i.e., is a
+   * copy), and the origin of the copy may be recorded as
+   * @a copyfrom_path under @a copyfrom_revision.
    */
-  svn_error_t *(*file_added)(svn_wc_adm_access_t *adm_access,
-                             svn_wc_notify_state_t *contentstate,
+  svn_error_t *(*file_added)(svn_wc_notify_state_t *contentstate,
                              svn_wc_notify_state_t *propstate,
                              svn_boolean_t *tree_conflicted,
                              const char *path,
@@ -1671,9 +2194,12 @@
                              svn_revnum_t rev2,
                              const char *mimetype1,
                              const char *mimetype2,
+                             const char *copyfrom_path,
+                             svn_revnum_t copyfrom_revision,
                              const apr_array_header_t *propchanges,
                              apr_hash_t *originalprops,
-                             void *diff_baton);
+                             void *diff_baton,
+                             apr_pool_t *scratch_pool);
 
   /**
    * A file @a path was deleted.  The [loss of] contents can be seen by
@@ -1686,8 +2212,7 @@
    * be NULL.  The implementor can use this information to decide if
    * (or how) to generate differences.
    */
-  svn_error_t *(*file_deleted)(svn_wc_adm_access_t *adm_access,
-                               svn_wc_notify_state_t *state,
+  svn_error_t *(*file_deleted)(svn_wc_notify_state_t *state,
                                svn_boolean_t *tree_conflicted,
                                const char *path,
                                const char *tmpfile1,
@@ -1695,38 +2220,164 @@
                                const char *mimetype1,
                                const char *mimetype2,
                                apr_hash_t *originalprops,
-                               void *diff_baton);
+                               void *diff_baton,
+                               apr_pool_t *scratch_pool);
 
   /**
-   * A directory @a path was added.  @a rev is the revision that the
-   * directory came from.
+   * A directory @a path was deleted.
    */
-  svn_error_t *(*dir_added)(svn_wc_adm_access_t *adm_access,
-                            svn_wc_notify_state_t *state,
-                            svn_boolean_t *tree_conflicted,
+  svn_error_t *(*dir_deleted)(svn_wc_notify_state_t *state,
+                              svn_boolean_t *tree_conflicted,
+                              const char *path,
+                              void *diff_baton,
+                              apr_pool_t *scratch_pool);
+  /**
+   * A directory @a path has been opened.  @a rev is the revision that the
+   * directory came from.
+   *
+   * This function is called for any existing directory @a path before any
+   * of the callbacks are called for a child of @a path.
+   *
+   * If the callback returns @c TRUE in @a *skip_children, children
+   * of this directory will be skipped.
+   */
+  svn_error_t *(*dir_opened)(svn_boolean_t *tree_conflicted,
+                             svn_boolean_t *skip,
+                             svn_boolean_t *skip_children,
+                             const char *path,
+                             svn_revnum_t rev,
+                             void *diff_baton,
+                             apr_pool_t *scratch_pool);
+
+  /**
+   * A directory @a path was added.  @a rev is the revision that the
+   * directory came from.
+   *
+   * This function is called for any new directory @a path before any
+   * of the callbacks are called for a child of @a path.
+   *
+   * If @a copyfrom_path is non- at c NULL, this add has history (i.e., is a
+   * copy), and the origin of the copy may be recorded as
+   * @a copyfrom_path under @a copyfrom_revision.
+   */
+  svn_error_t *(*dir_added)(svn_wc_notify_state_t *state,
+                            svn_boolean_t *tree_conflicted,
+                            svn_boolean_t *skip,
+                            svn_boolean_t *skip_children,
                             const char *path,
                             svn_revnum_t rev,
-                            void *diff_baton);
+                            const char *copyfrom_path,
+                            svn_revnum_t copyfrom_revision,
+                            void *diff_baton,
+                            apr_pool_t *scratch_pool);
 
   /**
-   * A directory @a path was deleted.
+   * A list of property changes (@a propchanges) was applied to the
+   * directory @a path.
+   *
+   * The array is a list of (#svn_prop_t) structures.
+   *
+   * @a dir_was_added is set to #TRUE if the directory was added, and
+   * to #FALSE if the directory pre-existed.
+   */
+  svn_error_t *(*dir_props_changed)(svn_wc_notify_state_t *propstate,
+                                    svn_boolean_t *tree_conflicted,
+                                    const char *path,
+                                    svn_boolean_t dir_was_added,
+                                    const apr_array_header_t *propchanges,
+                                    apr_hash_t *original_props,
+                                    void *diff_baton,
+                                    apr_pool_t *scratch_pool);
+
+  /**
+   * A directory @a path which has been opened with @a dir_opened or @a
+   * dir_added has been closed.
+   *
+   * @a dir_was_added is set to #TRUE if the directory was added, and
+   * to #FALSE if the directory pre-existed.
    */
+  svn_error_t *(*dir_closed)(svn_wc_notify_state_t *contentstate,
+                             svn_wc_notify_state_t *propstate,
+                             svn_boolean_t *tree_conflicted,
+                             const char *path,
+                             svn_boolean_t dir_was_added,
+                             void *diff_baton,
+                             apr_pool_t *scratch_pool);
+
+} svn_wc_diff_callbacks4_t;
+
+
+/**
+ * Similar to #svn_wc_diff_callbacks4_t, but without @a copyfrom_path and
+ * @a copyfrom_revision arguments to @c file_added and @c dir_added functions.
+ *
+ * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+typedef struct svn_wc_diff_callbacks3_t
+{
+  /** The same as #svn_wc_diff_callbacks4_t.file_changed. */
+  svn_error_t *(*file_changed)(svn_wc_adm_access_t *adm_access,
+                               svn_wc_notify_state_t *contentstate,
+                               svn_wc_notify_state_t *propstate,
+                               svn_boolean_t *tree_conflicted,
+                               const char *path,
+                               const char *tmpfile1,
+                               const char *tmpfile2,
+                               svn_revnum_t rev1,
+                               svn_revnum_t rev2,
+                               const char *mimetype1,
+                               const char *mimetype2,
+                               const apr_array_header_t *propchanges,
+                               apr_hash_t *originalprops,
+                               void *diff_baton);
+
+  /** Similar to #svn_wc_diff_callbacks4_t.file_added but without
+   * @a copyfrom_path and @a copyfrom_revision arguments. */
+  svn_error_t *(*file_added)(svn_wc_adm_access_t *adm_access,
+                             svn_wc_notify_state_t *contentstate,
+                             svn_wc_notify_state_t *propstate,
+                             svn_boolean_t *tree_conflicted,
+                             const char *path,
+                             const char *tmpfile1,
+                             const char *tmpfile2,
+                             svn_revnum_t rev1,
+                             svn_revnum_t rev2,
+                             const char *mimetype1,
+                             const char *mimetype2,
+                             const apr_array_header_t *propchanges,
+                             apr_hash_t *originalprops,
+                             void *diff_baton);
+
+  /** The same as #svn_wc_diff_callbacks4_t.file_deleted. */
+  svn_error_t *(*file_deleted)(svn_wc_adm_access_t *adm_access,
+                               svn_wc_notify_state_t *state,
+                               svn_boolean_t *tree_conflicted,
+                               const char *path,
+                               const char *tmpfile1,
+                               const char *tmpfile2,
+                               const char *mimetype1,
+                               const char *mimetype2,
+                               apr_hash_t *originalprops,
+                               void *diff_baton);
+
+  /** Similar to #svn_wc_diff_callbacks4_t.dir_added but without
+   * @a copyfrom_path and @a copyfrom_revision arguments. */
+  svn_error_t *(*dir_added)(svn_wc_adm_access_t *adm_access,
+                            svn_wc_notify_state_t *state,
+                            svn_boolean_t *tree_conflicted,
+                            const char *path,
+                            svn_revnum_t rev,
+                            void *diff_baton);
+
+  /** The same as #svn_wc_diff_callbacks4_t.dir_deleted. */
   svn_error_t *(*dir_deleted)(svn_wc_adm_access_t *adm_access,
                               svn_wc_notify_state_t *state,
                               svn_boolean_t *tree_conflicted,
                               const char *path,
                               void *diff_baton);
 
-  /**
-   * A list of property changes (@a propchanges) was applied to the
-   * directory @a path.
-   *
-   * The array is a list of (@c svn_prop_t) structures.
-   *
-   * The original list of properties is provided in @a original_props,
-   * which is a hash of @c svn_string_t values, keyed on the property
-   * name.
-   */
+  /** The same as #svn_wc_diff_callbacks4_t.dir_props_changed. */
   svn_error_t *(*dir_props_changed)(svn_wc_adm_access_t *adm_access,
                                     svn_wc_notify_state_t *propstate,
                                     svn_boolean_t *tree_conflicted,
@@ -1735,22 +2386,14 @@
                                     apr_hash_t *original_props,
                                     void *diff_baton);
 
-  /**
-   * A directory @a path has been opened.  @a rev is the revision that the
-   * directory came from.
-   *
-   * This function is called for @a path before any of the callbacks are
-   * called for a child of @a path.
-   */
+  /** The same as #svn_wc_diff_callbacks4_t.dir_opened. */
   svn_error_t *(*dir_opened)(svn_wc_adm_access_t *adm_access,
                              svn_boolean_t *tree_conflicted,
                              const char *path,
                              svn_revnum_t rev,
                              void *diff_baton);
 
-  /**
-   * A directory @a path has been closed.
-   */
+  /** The same as #svn_wc_diff_callbacks4_t.dir_closed. */
   svn_error_t *(*dir_closed)(svn_wc_adm_access_t *adm_access,
                              svn_wc_notify_state_t *contentstate,
                              svn_wc_notify_state_t *propstate,
@@ -1761,14 +2404,15 @@
 } svn_wc_diff_callbacks3_t;
 
 /**
- * Similar to @c svn_wc_diff_callbacks3_t, but without the dir_opened()
- * function, and without the 'tree_conflicted' argument to the functions.
+ * Similar to #svn_wc_diff_callbacks3_t, but without the @c dir_opened
+ * and @c dir_closed functions, and without the @a tree_conflicted argument
+ * to the functions.
  *
  * @deprecated Provided for backward compatibility with the 1.2 API.
  */
 typedef struct svn_wc_diff_callbacks2_t
 {
-  /** The same as @c file_changed in @c svn_wc_diff_callbacks3_t. */
+  /** The same as @c file_changed in #svn_wc_diff_callbacks3_t. */
   svn_error_t *(*file_changed)(svn_wc_adm_access_t *adm_access,
                                svn_wc_notify_state_t *contentstate,
                                svn_wc_notify_state_t *propstate,
@@ -1783,7 +2427,7 @@
                                apr_hash_t *originalprops,
                                void *diff_baton);
 
-  /** The same as @c file_added in @c svn_wc_diff_callbacks3_t. */
+  /** The same as @c file_added in #svn_wc_diff_callbacks3_t. */
   svn_error_t *(*file_added)(svn_wc_adm_access_t *adm_access,
                              svn_wc_notify_state_t *contentstate,
                              svn_wc_notify_state_t *propstate,
@@ -1798,7 +2442,7 @@
                              apr_hash_t *originalprops,
                              void *diff_baton);
 
-  /** The same as @c file_deleted in @c svn_wc_diff_callbacks3_t. */
+  /** The same as @c file_deleted in #svn_wc_diff_callbacks3_t. */
   svn_error_t *(*file_deleted)(svn_wc_adm_access_t *adm_access,
                                svn_wc_notify_state_t *state,
                                const char *path,
@@ -1809,20 +2453,20 @@
                                apr_hash_t *originalprops,
                                void *diff_baton);
 
-  /** The same as @c dir_added in @c svn_wc_diff_callbacks3_t. */
+  /** The same as @c dir_added in #svn_wc_diff_callbacks3_t. */
   svn_error_t *(*dir_added)(svn_wc_adm_access_t *adm_access,
                             svn_wc_notify_state_t *state,
                             const char *path,
                             svn_revnum_t rev,
                             void *diff_baton);
 
-  /** The same as @c dir_deleted in @c svn_wc_diff_callbacks3_t. */
+  /** The same as @c dir_deleted in #svn_wc_diff_callbacks3_t. */
   svn_error_t *(*dir_deleted)(svn_wc_adm_access_t *adm_access,
                               svn_wc_notify_state_t *state,
                               const char *path,
                               void *diff_baton);
 
-  /** The same as @c dir_props_changed in @c svn_wc_diff_callbacks3_t. */
+  /** The same as @c dir_props_changed in #svn_wc_diff_callbacks3_t. */
   svn_error_t *(*dir_props_changed)(svn_wc_adm_access_t *adm_access,
                                     svn_wc_notify_state_t *state,
                                     const char *path,
@@ -1833,14 +2477,14 @@
 } svn_wc_diff_callbacks2_t;
 
 /**
- * Similar to @c svn_wc_diff_callbacks2_t, but with file additions/content
+ * Similar to #svn_wc_diff_callbacks2_t, but with file additions/content
  * changes and property changes split into different functions.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
 typedef struct svn_wc_diff_callbacks_t
 {
-  /** Similar to @c file_changed in @c svn_wc_diff_callbacks2_t, but without
+  /** Similar to @c file_changed in #svn_wc_diff_callbacks2_t, but without
    * property change information.  @a tmpfile2 is never NULL. @a state applies
    * to the file contents. */
   svn_error_t *(*file_changed)(svn_wc_adm_access_t *adm_access,
@@ -1854,7 +2498,7 @@
                                const char *mimetype2,
                                void *diff_baton);
 
-  /** Similar to @c file_added in @c svn_wc_diff_callbacks2_t, but without
+  /** Similar to @c file_added in #svn_wc_diff_callbacks2_t, but without
    * property change information.  @a *state applies to the file contents. */
   svn_error_t *(*file_added)(svn_wc_adm_access_t *adm_access,
                              svn_wc_notify_state_t *state,
@@ -1867,7 +2511,7 @@
                              const char *mimetype2,
                              void *diff_baton);
 
-  /** Similar to @c file_deleted in @c svn_wc_diff_callbacks2_t, but without
+  /** Similar to @c file_deleted in #svn_wc_diff_callbacks2_t, but without
    * the properties. */
   svn_error_t *(*file_deleted)(svn_wc_adm_access_t *adm_access,
                                svn_wc_notify_state_t *state,
@@ -1878,20 +2522,20 @@
                                const char *mimetype2,
                                void *diff_baton);
 
-  /** The same as @c dir_added in @c svn_wc_diff_callbacks2_t. */
+  /** The same as @c dir_added in #svn_wc_diff_callbacks2_t. */
   svn_error_t *(*dir_added)(svn_wc_adm_access_t *adm_access,
                             svn_wc_notify_state_t *state,
                             const char *path,
                             svn_revnum_t rev,
                             void *diff_baton);
 
-  /** The same as @c dir_deleted in @c svn_wc_diff_callbacks2_t. */
+  /** The same as @c dir_deleted in #svn_wc_diff_callbacks2_t. */
   svn_error_t *(*dir_deleted)(svn_wc_adm_access_t *adm_access,
                               svn_wc_notify_state_t *state,
                               const char *path,
                               void *diff_baton);
 
-  /** Similar to @c dir_props_changed in @c svn_wc_diff_callbacks2_t, but this
+  /** Similar to @c dir_props_changed in #svn_wc_diff_callbacks2_t, but this
    * function is called for files as well as directories. */
   svn_error_t *(*props_changed)(svn_wc_adm_access_t *adm_access,
                                 svn_wc_notify_state_t *state,
@@ -1905,10 +2549,27 @@
 
 /* Asking questions about a working copy. */
 
-/** Set @a *wc_format to @a path's working copy format version number if
- * @a path is a valid working copy directory, else set it to 0.
- * Return error @c APR_ENOENT if @a path does not exist at all.
+/** Set @a *wc_format to @a local_abspath's working copy format version
+ * number if @a local_abspath is a valid working copy directory, else set it
+ * to 0.
+ *
+ * Return error @c APR_ENOENT if @a local_abspath does not exist at all.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_check_wc2(int *wc_format,
+                 svn_wc_context_t *wc_ctx,
+                 const char *local_abspath,
+                 apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_check_wc2(), but with a relative path and no supplied
+ * working copy context.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_check_wc(const char *path,
                 int *wc_format,
@@ -1918,7 +2579,12 @@
 /** Set @a *has_binary_prop to @c TRUE iff @a path has been marked
  * with a property indicating that it is non-text (in other words, binary).
  * @a adm_access is an access baton set that contains @a path.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API. As a
+ * replacement for this functionality, @see svn_mime_type_is_binary and
+ * #SVN_PROP_MIME_TYPE.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_has_binary_prop(svn_boolean_t *has_binary_prop,
                        const char *path,
@@ -1928,10 +2594,9 @@
 
 /* Detecting modification. */
 
-/** Set @a *modified_p to non-zero if @a filename's text is modified
+/** Set @a *modified_p to non-zero if @a local_abspath's text is modified
  * with regard to the base revision, else set @a *modified_p to zero.
- * @a filename is a path to the file, not just a basename. @a adm_access
- * must be an access baton for @a filename.
+ * @a local_abspath is the absolute path to the file.
  *
  * If @a force_comparison is @c TRUE, this function will not allow
  * early return mechanisms that avoid actual content comparison.
@@ -1940,14 +2605,25 @@
  * that if the text base is much longer than the working file, every
  * byte of the text base will still be examined.)
  *
- * If @a filename does not exist, consider it unmodified.  If it exists
+ * If @a local_abspath does not exist, consider it unmodified.  If it exists
  * but is not under revision control (not even scheduled for
- * addition), return the error @c SVN_ERR_ENTRY_NOT_FOUND.
+ * addition), return the error #SVN_ERR_ENTRY_NOT_FOUND.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_text_modified_p2(svn_boolean_t *modified_p,
+                        svn_wc_context_t *wc_ctx,
+                        const char *local_abspath,
+                        svn_boolean_t force_comparison,
+                        apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_text_modified_p2(), but with a relative path and
+ * adm_access baton?
  *
- * If @a filename is unmodified but has a timestamp variation then this
- * function may "repair" @a filename's text-time by setting it to
- * @a filename's last modification time.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_text_modified_p(svn_boolean_t *modified_p,
                        const char *filename,
@@ -1955,11 +2631,24 @@
                        svn_wc_adm_access_t *adm_access,
                        apr_pool_t *pool);
 
-
 /** Set @a *modified_p to non-zero if @a path's properties are modified
  * with regard to the base revision, else set @a modified_p to zero.
  * @a adm_access must be an access baton for @a path.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_props_modified_p2(svn_boolean_t *modified_p,
+                         svn_wc_context_t *wc_ctx,
+                         const char *local_abspath,
+                         apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_props_modified_p2(), but with a relative path and
+ * adm_access baton.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_props_modified_p(svn_boolean_t *modified_p,
                         const char *path,
@@ -1967,25 +2656,13 @@
                         apr_pool_t *pool);
 
 
-
-
-/** Administrative subdir.
- *
- * Ideally, this would be completely private to wc internals (in fact,
- * it used to be that adm_subdir() in adm_files.c was the only function
- * who knew the adm subdir's name).  However, import wants to protect
- * against importing administrative subdirs, so now the name is a
- * matter of public record.
- *
- * @deprecated Provided for backward compatibility with the 1.2 API.
+/**
+* @defgroup svn_wc_entries Entries and status (deprecated)
+ * @{
  */
-#define SVN_WC_ADM_DIR_NAME   ".svn"
-
 
-
-/* Entries and status. */
-
-/** The schedule states an entry can be in. */
+/** The schedule states an entry can be in.
+ * @deprecated Provided for backward compatibility with the 1.6 API. */
 typedef enum svn_wc_schedule_t
 {
   /** Nothing special here */
@@ -2008,23 +2685,20 @@
  * when it isn't set to the actual size value of the unchanged
  * working file.
  *
- * @defgroup svn_wc_entry_working_size_constants Working size constants
- *
- * @{
- */
-
-/** The value of the working size is unknown (hasn't been
+ *  The value of the working size is unknown (hasn't been
  *  calculated and stored in the past for whatever reason).
  *
  * @since New in 1.5
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 #define SVN_WC_ENTRY_WORKING_SIZE_UNKNOWN (-1)
 
-/** @} */
-
 /** A working copy entry -- that is, revision control information about
  * one versioned entity.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+/* SVN_DEPRECATED */
 typedef struct svn_wc_entry_t
 {
   /* IMPORTANT: If you extend this structure, add new fields to the end. */
@@ -2055,8 +2729,8 @@
   svn_wc_schedule_t schedule;
 
   /** in a copied state (possibly because the entry is a child of a
-   *  path that is @c svn_wc_schedule_add or @c svn_wc_schedule_replace,
-   *  when the entry itself is @c svn_wc_schedule_normal).
+   *  path that is #svn_wc_schedule_add or #svn_wc_schedule_replace,
+   *  when the entry itself is #svn_wc_schedule_normal).
    *  COPIED is true for nodes under a directory that was copied, but
    *  COPYFROM_URL is null there. They are both set for the root
    *  destination of the copy.
@@ -2187,7 +2861,7 @@
   const char *changelist;
 
   /** Size of the file after being translated into local
-   * representation, or @c SVN_WC_ENTRY_WORKING_SIZE_UNKNOWN if
+   * representation, or #SVN_WC_ENTRY_WORKING_SIZE_UNKNOWN if
    * unknown.
    *
    * @since New in 1.5.
@@ -2236,7 +2910,7 @@
    * @since New in 1.6. */
   svn_opt_revision_t file_external_peg_rev;
 
-  /** The entry is a intra-repository file external and this is the
+  /** The entry is an intra-repository file external and this is the
    * operative revision number specified in the externals definition.
    * This field is only valid when the file_external_path field is
    * non-NULL.  The only permissible values are
@@ -2261,14 +2935,15 @@
 } svn_wc_entry_t;
 
 
-/** How an entries file's owner dir is named in the entries file. */
+/** How an entries file's owner dir is named in the entries file.
+ * @deprecated Provided for backward compatibility with the 1.6 API. */
 #define SVN_WC_ENTRY_THIS_DIR  ""
 
 
 /** Set @a *entry to an entry for @a path, allocated in the access baton pool.
  * If @a show_hidden is TRUE, return the entry even if it's in 'excluded',
  * 'deleted' or 'absent' state. Excluded entries are those with their depth
- * set to @c svn_depth_exclude. If @a path is not under revision control, or
+ * set to #svn_depth_exclude. If @a path is not under revision control, or
  * if entry is hidden, not scheduled for re-addition, and @a show_hidden is @c
  * FALSE, then set @a *entry to @c NULL.
  *
@@ -2289,7 +2964,10 @@
  * be present, but not under revision control.
  *
  * Use @a pool only for local processing.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_entry(const svn_wc_entry_t **entry,
              const char *path,
@@ -2308,7 +2986,7 @@
  * Entries that are in a 'excluded', 'deleted' or 'absent' state (and not
  * scheduled for re-addition) are not returned in the hash, unless
  * @a show_hidden is TRUE. Excluded entries are those with their depth set to
- * @c svn_depth_exclude.
+ * #svn_depth_exclude.
  *
  * @par Important:
  * The @a entries hash is the entries cache in @a adm_access
@@ -2323,12 +3001,15 @@
  *
  * @par Important:
  * Only the entry structures representing files and
- * @c SVN_WC_ENTRY_THIS_DIR contain complete information.  The entry
+ * #SVN_WC_ENTRY_THIS_DIR contain complete information.  The entry
  * structures representing subdirs have only the `kind' and `state'
  * fields filled in.  If you want info on a subdir, you must use this
- * routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR
+ * routine to open its @a path and read the #SVN_WC_ENTRY_THIS_DIR
  * structure, or call svn_wc_entry() on its @a path.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_entries_read(apr_hash_t **entries,
                     svn_wc_adm_access_t *adm_access,
@@ -2338,25 +3019,80 @@
 
 /** Return a duplicate of @a entry, allocated in @a pool.  No part of the new
  * entry will be shared with @a entry.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_wc_entry_t *
 svn_wc_entry_dup(const svn_wc_entry_t *entry,
                  apr_pool_t *pool);
 
+/** @} */
+
+
+/**
+ * This struct contains information about a working copy node.
+ *
+ * @note Fields may be added to the end of this structure in future
+ * versions.  Therefore, users shouldn't allocate structures of this
+ * type, to preserve binary compatibility.
+ *
+ * @since New in 1.7.
+ */
+typedef struct svn_wc_info_t
+{
+  /* ### Do we still need schedule? */
+  svn_wc_schedule_t schedule;
+  const char *copyfrom_url;
+  svn_revnum_t copyfrom_rev;
+  const svn_checksum_t *checksum;
+  const char *changelist;
+  svn_depth_t depth;
+
+  /**
+   * The size of the file after being translated into its local
+   * representation, or #SVN_INVALID_FILESIZE if unknown.
+   * Not applicable for directories.
+   */
+  svn_filesize_t recorded_size;
+
+  /**
+   * The time at which the file had the recorded size recorded_size and was
+   * considered unmodified. */
+  apr_time_t recorded_time;
+
+  /** Array of const svn_wc_conflict_description2_t * which contains info
+   * on any conflict of which this node is a victim. Otherwise NULL.  */
+  const apr_array_header_t *conflicts;
+
+  /** The local absolute path of the working copy root.  */
+  const char *wcroot_abspath;
+
+} svn_wc_info_t;
+
+/**
+ * Return a duplicate of @a info, allocated in @a pool. No part of the new
+ * structure will be shared with @a info.
+ *
+ * @since New in 1.7.
+ */
+svn_wc_info_t *
+svn_wc_info_dup(const svn_wc_info_t *info,
+                apr_pool_t *pool);
+
 
-/** Given a @a path in a dir under version control, decide if it is in a
- * state of conflict; return the answers in @a *text_conflicted_p, @a
+/** Given @a local_abspath in a dir under version control, decide if it is
+ * in a state of conflict; return the answers in @a *text_conflicted_p, @a
  * *prop_conflicted_p, and @a *tree_conflicted_p.  If one or two of the
  * answers are uninteresting, simply pass @c NULL pointers for those.
  *
- * If @a path is unversioned or does not exist, @a *text_conflicted_p and
- * @a *prop_conflicted_p will be @c FALSE if non-NULL.
+ * If @a local_abspath is unversioned or does not exist, return
+ * #SVN_ERR_WC_PATH_NOT_FOUND.
  *
- * @a adm_access is the admin access baton of the parent directory.
- *
- * If the @a path has corresponding text conflict files (with suffix .mine,
- * .theirs, etc.) that cannot be found, assume that the text conflict has
- * been resolved by the user and return @c FALSE in @a *text_conflicted_p.
+ * If the @a local_abspath has corresponding text conflict files (with suffix
+ * .mine, .theirs, etc.) that cannot be found, assume that the text conflict
+ * has been resolved by the user and return @c FALSE in @a
+ * *text_conflicted_p.
  *
  * Similarly, if a property conflicts file (.prej suffix) is said to exist,
  * but it cannot be found, assume that the property conflicts have been
@@ -2365,8 +3101,23 @@
  * @a *tree_conflicted_p can't be auto-resolved in this fashion.  An
  * explicit `resolved' is needed.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_conflicted_p3(svn_boolean_t *text_conflicted_p,
+                     svn_boolean_t *prop_conflicted_p,
+                     svn_boolean_t *tree_conflicted_p,
+                     svn_wc_context_t *wc_ctx,
+                     const char *local_abspath,
+                     apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_conflicted_p3(), but with a path/adm_access parameter
+ * pair in place of a wc_ctx/local_abspath pair.
+ *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_conflicted_p2(svn_boolean_t *text_conflicted_p,
                      svn_boolean_t *prop_conflicted_p,
@@ -2400,12 +3151,16 @@
                     const svn_wc_entry_t *entry,
                     apr_pool_t *pool);
 
+
 /** Set @a *url and @a *rev to the ancestor URL and revision for @a path,
  * allocating in @a pool.  @a adm_access must be an access baton for @a path.
  *
  * If @a url or @a rev is NULL, then ignore it (just don't return the
  * corresponding information).
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_get_ancestry(char **url,
                     svn_revnum_t *rev,
@@ -2426,8 +3181,8 @@
                               apr_pool_t *pool);
 
   /** Handle the error @a err encountered while processing @a path.
-   * Wrap or squelch @a err as desired, and return an @c svn_error_t
-   * *, or @c SVN_NO_ERROR.
+   * Wrap or squelch @a err as desired, and return an #svn_error_t
+   * *, or #SVN_NO_ERROR.
    */
   svn_error_t *(*handle_error)(const char *path,
                                svn_error_t *err,
@@ -2454,34 +3209,37 @@
  * @a path, which can be a file or dir.  Call callbacks in
  * @a walk_callbacks, passing @a walk_baton to each.  Use @a pool for
  * looping, recursion, and to allocate all entries returned.
- * @a adm_access must be an access baton for @a path.
+ * @a adm_access must be an access baton for @a path.  The pool
+ * passed to @a walk_callbacks is a temporary subpool of @a pool.
  *
- * If @a depth is @c svn_depth_empty, invoke the callbacks on @a path
- * and return without recursing further.  If @c svn_depth_files, do
+ * If @a depth is #svn_depth_empty, invoke the callbacks on @a path
+ * and return without recursing further.  If #svn_depth_files, do
  * the same and invoke the callbacks on file children (if any) of
- * @a path, then return.  If @c svn_depth_immediates, do the preceding
+ * @a path, then return.  If #svn_depth_immediates, do the preceding
  * but also invoke callbacks on immediate subdirectories, then return.
- * If @c svn_depth_infinity, recurse fully starting from @a path.
+ * If #svn_depth_infinity, recurse fully starting from @a path.
  *
  * If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
- * if the client has cancelled the operation.
+ * if the client has canceled the operation.
  *
  * Like our other entries interfaces, entries that are in a 'excluded',
  * 'deleted' or 'absent' state (and not scheduled for re-addition) are not
  * discovered, unless @a show_hidden is TRUE. Excluded entries are those with
- * their depth set to @c svn_depth_exclude.
+ * their depth set to #svn_depth_exclude.
  *
- * When a new directory is entered, @c SVN_WC_ENTRY_THIS_DIR will always
+ * When a new directory is entered, #SVN_WC_ENTRY_THIS_DIR will always
  * be returned first.
  *
  * @note Callers should be aware that each directory will be
  * returned *twice*:  first as an entry within its parent, and
  * subsequently as the '.' entry within itself.  The two calls can be
- * distinguished by looking for @c SVN_WC_ENTRY_THIS_DIR in the 'name'
+ * distinguished by looking for #SVN_WC_ENTRY_THIS_DIR in the 'name'
  * field of the entry.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_walk_entries3(const char *path,
                      svn_wc_adm_access_t *adm_access,
@@ -2496,8 +3254,9 @@
 /**
  * Similar to svn_wc_walk_entries3(), but without cancellation support
  * or error handling from @a walk_callbacks, and with @a depth always
- * set to @c svn_depth_infinity.
+ * set to #svn_depth_infinity.
  *
+ * @since New in 1.2.
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
@@ -2514,7 +3273,7 @@
 /**
  * Similar to svn_wc_walk_entries2(), but without cancellation support.
  *
- * @deprecated Provided for backward compatibility with the 1.0 API.
+ * @deprecated Provided for backward compatibility with the 1.1 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -2526,24 +3285,31 @@
                     apr_pool_t *pool);
 
 
-/** Mark missing @a path as 'deleted' in its @a parent's list of entries.
+/** Mark missing @a path as 'deleted' in its @a parent's list of
+ * entries.  @a path should be a directory that is both deleted (via
+ * svn_wc_delete4) and removed (via a system call).  This function
+ * should only be called during post-commit processing following a
+ * successful commit editor drive.
  *
- * Return @c SVN_ERR_WC_PATH_FOUND if @a path isn't actually missing.
+ * Return #SVN_ERR_WC_PATH_FOUND if @a path isn't actually missing.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_mark_missing_deleted(const char *path,
                             svn_wc_adm_access_t *parent,
                             apr_pool_t *pool);
 
 
-/** Ensure that an administrative area exists for @a path, so that @a
- * path is a working copy subdir based on @a url at @a revision, with
- * depth @a depth, and with repository UUID @a uuid and repository
- * root URL @a repos.
- *
- * @a depth must be a definite depth, it cannot be @c svn_depth_unknown.
- * @a uuid and @a repos may be @c NULL.  If non- at c NULL, @a repos must
- * be a prefix of @a url.
+/** Ensure that an administrative area exists for @a local_abspath, so
+ * that @a local_abspath is a working copy subdir based on @a url at @a
+ * revision, with depth @a depth, and with repository UUID @a repos_uuid
+ * and repository root URL @a repos_root_url.
+ *
+ * @a depth must be a definite depth, it cannot be #svn_depth_unknown.
+ * @a repos_uuid and @a repos_root_url MUST NOT be @c NULL, and
+ * @a repos_root_url must be a prefix of @a url.
  *
  * If the administrative area does not exist, then create it and
  * initialize it to an unlocked state.
@@ -2552,13 +3318,36 @@
  * must match the URL in the administrative area and the given
  * @a revision must match the BASE of the working copy dir unless
  * the admin directory is scheduled for deletion or the
- * SVN_ERR_WC_OBSTRUCTED_UPDATE error will be returned.
+ * #SVN_ERR_WC_OBSTRUCTED_UPDATE error will be returned.
+ *
+ * Do not ensure existence of @a local_abspath itself; if @a local_abspath
+ * does not exist, return error.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_ensure_adm4(svn_wc_context_t *wc_ctx,
+                   const char *local_abspath,
+                   const char *url,
+                   const char *repos_root_url,
+                   const char *repos_uuid,
+                   svn_revnum_t revision,
+                   svn_depth_t depth,
+                   apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_ensure_adm4(), but without the wc context parameter.
  *
- * Do not ensure existence of @a path itself; if @a path does not
- * exist, return error.
+ * @note the @a uuid and @a repos parameters were documented as allowing
+ * @c NULL to be passed. Beginning with 1.7, this will return an error,
+ * contrary to prior documented behavior: see 'notes/api-errata/1.7/wc005.txt'.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_ensure_adm3(const char *path,
                    const char *uuid,
@@ -2571,11 +3360,13 @@
 
 /**
  * Similar to svn_wc_ensure_adm3(), but with @a depth set to
- * @c svn_depth_infinity.
+ * #svn_depth_infinity.
  *
- * @deprecated Provided for backwards compatibility with the 1.4 API.
+ * See the note on svn_wc_ensure_adm3() regarding the @a repos and @a uuid
+ * parameters.
  *
  * @since New in 1.3.
+ * @deprecated Provided for backwards compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -2590,6 +3381,9 @@
 /**
  * Similar to svn_wc_ensure_adm2(), but with @a repos set to @c NULL.
  *
+ * @note as of 1.7, this function always returns #SVN_ERR_BAD_URL since
+ * the @a repos parameter may not be @c NULL.
+ *
  * @deprecated Provided for backwards compatibility with the 1.2 API.
  */
 SVN_DEPRECATED
@@ -2603,20 +3397,16 @@
 
 /** Set the repository root URL of @a path to @a repos, if possible.
  *
- * @a adm_access must contain @a path and be write-locked, if @a path
- * is versioned.  Return no error if path is missing or unversioned.
- * Use @a pool for temporary allocations.
- *
- * @note In some circumstances, the repository root can't be set
- * without making the working copy corrupt.  In such cases, this
- * function just returns no error, without modifying the @a path entry.
- *
- * @note This function exists to make it possible to try to set the repository
- * root in old working copies; new working copies normally get this set at
- * creation time.
+ * Before Subversion 1.7 there could be working copy directories that
+ * didn't have a stored repository root in some specific circumstances.
+ * This function allowed setting this root later.
+ *
+ * Since Subversion 1.7 this function just returns #SVN_NO_ERROR.
  *
  * @since New in 1.3.
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_maybe_set_repos_root(svn_wc_adm_access_t *adm_access,
                             const char *path,
@@ -2628,10 +3418,12 @@
  * @defgroup svn_wc_status Working copy status.
  * @{
  *
- * We have two functions for getting working copy status: one function
- * for getting the status of exactly one thing, and another for
- * getting the statuses of (potentially) multiple things.
+ * We have three functions for getting working copy status: one function
+ * for getting the status of exactly one thing, another for
+ * getting the statuses of (potentially) multiple things and a third for
+ * getting the working copy out-of-dateness with respect to the repository.
  *
+ * Why do we have two different functions for getting working copy status?
  * The concept of depth, as explained in the documentation for
  * svn_depth_t, may be useful in understanding this.  Suppose we're
  * getting the status of directory D:
@@ -2643,12 +3435,10 @@
  * become cumbersome: you'd have to roll through a hash to find one
  * lone status.
  *
- * So we have svn_wc_status() for depth-empty (just D itself), and
- * svn_wc_get_status_editor() for depth-immediates and depth-infinity,
- * since the latter two involve multiple return values.
- *
- * @note The status structures may contain a @c NULL ->entry field.
- * This indicates an item that is not versioned in the working copy.
+ * So we have svn_wc_status3() for depth-empty (just D itself), and
+ * svn_wc_walk_status() for depth-immediates and depth-infinity,
+ * since the latter two involve multiple return values. And for
+ * out-of-dateness information we have svn_wc_get_status_editor5().
  */
 
 /** The type of status for the working copy. */
@@ -2678,7 +3468,7 @@
     /** text or props have been modified */
     svn_wc_status_modified,
 
-    /** local mods received repos mods */
+    /** local mods received repos mods (### unused) */
     svn_wc_status_merged,
 
     /** local mods received conflicting repos mods */
@@ -2701,51 +3491,174 @@
 /**
  * Structure for holding the "status" of a working copy item.
  *
- * The item's entry data is in @a entry, augmented and possibly shadowed
- * by the other fields.  @a entry is @c NULL if this item is not under
- * version control.
- *
  * @note Fields may be added to the end of this structure in future
  * versions.  Therefore, to preserve binary compatibility, users
  * should not directly allocate structures of this type.
  *
- * @since New in 1.2.
+ * @since New in 1.7.
  */
-typedef struct svn_wc_status2_t
+typedef struct svn_wc_status3_t
 {
-  /** Can be @c NULL if not under version control. */
-  svn_wc_entry_t *entry;
+  /** The kind of node as recorded in the working copy */
+  svn_node_kind_t kind;
 
-  /** The status of the entries text. */
+  /** The depth of the node as recorded in the working copy
+   * (#svn_depth_unknown for files or when no depth is set) */
+  svn_depth_t depth;
+
+  /** The actual size of the working file on disk, or SVN_INVALID_FILESIZE
+   * if unknown (or if the item isn't a file at all). */
+  svn_filesize_t filesize;
+
+  /** If the path is under version control, versioned is TRUE, otherwise
+   * FALSE. */
+  svn_boolean_t versioned;
+
+  /** Set to TRUE if the item is the victim of a conflict. */
+  svn_boolean_t conflicted;
+
+  /** The status of the node itself. In order of precedence: Obstructions,
+   * structural changes, text changes. */
+  enum svn_wc_status_kind node_status;
+
+  /** The status of the entry's text. */
   enum svn_wc_status_kind text_status;
 
-  /** The status of the entries properties. */
+  /** The status of the entry's properties. */
   enum svn_wc_status_kind prop_status;
 
-  /** a directory can be 'locked' if a working copy update was interrupted. */
-  svn_boolean_t locked;
-
   /** a file or directory can be 'copied' if it's scheduled for
    * addition-with-history (or part of a subtree that is scheduled as such.).
    */
   svn_boolean_t copied;
 
+  /** Base revision. */
+  svn_revnum_t revision;
+
+  /** Last revision this was changed */
+  svn_revnum_t changed_rev;
+
+  /** Date of last commit. */
+  apr_time_t changed_date;
+
+  /** Last commit author of this item */
+  const char *changed_author;
+
+  /** The URL of the repository */
+  const char *repos_root_url;
+
+  /** The UUID of the repository */
+  const char *repos_uuid;
+
+  /** The in-repository path relative to the repository root. */
+  const char *repos_relpath;
+
   /** a file or directory can be 'switched' if the switch command has been
    * used.  If this is TRUE, then file_external will be FALSE.
    */
   svn_boolean_t switched;
 
-  /** The entry's text status in the repository. */
-  enum svn_wc_status_kind repos_text_status;
+  /** This directory has a working copy lock */
+  svn_boolean_t locked;
 
-  /** The entry's property status in the repository. */
-  enum svn_wc_status_kind repos_prop_status;
+  /** The repository file lock. (Values of path, token, owner, comment
+   * and are available if a lock is present) */
+  const svn_lock_t *lock;
 
-  /** The entry's lock in the repository, if any. */
-  svn_lock_t *repos_lock;
+  /** Which changelist this item is part of, or NULL if not part of any. */
+  const char *changelist;
 
-  /** Set to the URI (actual or expected) of the item.
-   * @since New in 1.3
+  /**
+   * @defgroup svn_wc_status_ood WC out-of-date info from the repository
+   * @{
+   *
+   * When the working copy item is out-of-date compared to the
+   * repository, the following fields represent the state of the
+   * youngest revision of the item in the repository.  If the working
+   * copy is not out of date, the fields are initialized as described
+   * below.
+   */
+
+  /** Set to the node kind of the youngest commit, or #svn_node_none
+   * if not out of date. */
+  svn_node_kind_t ood_kind;
+
+  /** The status of the node, based on the text status if the node has no
+   * restructuring changes */
+  enum svn_wc_status_kind repos_node_status;
+
+  /** The entry's text status in the repository. */
+  enum svn_wc_status_kind repos_text_status;
+
+  /** The entry's property status in the repository. */
+  enum svn_wc_status_kind repos_prop_status;
+
+  /** The entry's lock in the repository, if any. */
+  const svn_lock_t *repos_lock;
+
+  /** Set to the youngest committed revision, or #SVN_INVALID_REVNUM
+   * if not out of date. */
+  svn_revnum_t ood_changed_rev;
+
+  /** Set to the most recent commit date, or @c 0 if not out of date. */
+  apr_time_t ood_changed_date;
+
+  /** Set to the user name of the youngest commit, or @c NULL if not
+   * out of date or non-existent.  Because a non-existent @c
+   * svn:author property has the same behavior as an out-of-date
+   * working copy, examine @c ood_last_cmt_rev to determine whether
+   * the working copy is out of date. */
+  const char *ood_changed_author;
+
+  /** @} */
+
+  /* NOTE! Please update svn_wc_dup_status3() when adding new fields here. */
+} svn_wc_status3_t;
+
+/**
+ * ### All diffs are not yet known.
+ * Same as svn_wc_status3_t, but without the #svn_boolean_t 'versioned'
+ * field. Instead an item that is not versioned has the 'entry' field set to
+ * @c NULL.
+ *
+ * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+typedef struct svn_wc_status2_t
+{
+  /** Can be @c NULL if not under version control. */
+  const svn_wc_entry_t *entry;
+
+  /** The status of the entry itself, including its text if it is a file. */
+  enum svn_wc_status_kind text_status;
+
+  /** The status of the entry's properties. */
+  enum svn_wc_status_kind prop_status;
+
+  /** a directory can be 'locked' if a working copy update was interrupted. */
+  svn_boolean_t locked;
+
+  /** a file or directory can be 'copied' if it's scheduled for
+   * addition-with-history (or part of a subtree that is scheduled as such.).
+   */
+  svn_boolean_t copied;
+
+  /** a file or directory can be 'switched' if the switch command has been
+   * used.  If this is TRUE, then file_external will be FALSE.
+   */
+  svn_boolean_t switched;
+
+  /** The entry's text status in the repository. */
+  enum svn_wc_status_kind repos_text_status;
+
+  /** The entry's property status in the repository. */
+  enum svn_wc_status_kind repos_prop_status;
+
+  /** The entry's lock in the repository, if any. */
+  svn_lock_t *repos_lock;
+
+  /** Set to the URI (actual or expected) of the item.
+   * @since New in 1.3
    */
   const char *url;
 
@@ -2760,7 +3673,7 @@
    * below.
    */
 
-  /** Set to the youngest committed revision, or @c SVN_INVALID_REVNUM
+  /** Set to the youngest committed revision, or #SVN_INVALID_REVNUM
    * if not out of date.
    * @since New in 1.3
    */
@@ -2771,7 +3684,7 @@
    */
   apr_time_t ood_last_cmt_date;
 
-  /** Set to the node kind of the youngest commit, or @c svn_node_none
+  /** Set to the node kind of the youngest commit, or #svn_node_none
    * if not out of date.
    * @since New in 1.3
    */
@@ -2802,7 +3715,7 @@
 
   /** The actual status of the text compared to the pristine base of the
    * file. This value isn't masked by other working copy statuses.
-   * @c pristine_text_status is @c svn_wc_status_none if this value was
+   * @c pristine_text_status is #svn_wc_status_none if this value was
    * not calculated during the status walk.
    * @since New in 1.6
    */
@@ -2810,26 +3723,25 @@
 
   /** The actual status of the properties compared to the pristine base of
    * the node. This value isn't masked by other working copy statuses.
-   * @c pristine_prop_status is @c svn_wc_status_none if this value was
+   * @c pristine_prop_status is #svn_wc_status_none if this value was
    * not calculated during the status walk.
    * @since New in 1.6
    */
   enum svn_wc_status_kind pristine_prop_status;
 
-  /* NOTE! Please update svn_wc_dup_status2() when adding new fields here. */
 } svn_wc_status2_t;
 
 
 
 /**
- * Same as @c svn_wc_status2_t, but without the svn_lock_t 'repos_lock' field.
+ * Same as #svn_wc_status2_t, but without the #svn_lock_t 'repos_lock' field.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
 typedef struct svn_wc_status_t
 {
   /** Can be @c NULL if not under version control. */
-  svn_wc_entry_t *entry;
+  const svn_wc_entry_t *entry;
 
   /** The status of the entries text. */
   enum svn_wc_status_kind text_status;
@@ -2859,13 +3771,23 @@
 } svn_wc_status_t;
 
 
-
 /**
  * Return a deep copy of the @a orig_stat status structure, allocated
  * in @a pool.
  *
- * @since New in 1.2.
+ * @since New in 1.7.
+ */
+svn_wc_status3_t *
+svn_wc_dup_status3(const svn_wc_status3_t *orig_stat,
+                   apr_pool_t *pool);
+
+/**
+ * Same as svn_wc_dup_status3(), but for older svn_wc_status_t structures.
+ *
+ * @since New in 1.2
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_wc_status2_t *
 svn_wc_dup_status2(const svn_wc_status2_t *orig_stat,
                    apr_pool_t *pool);
@@ -2883,32 +3805,43 @@
 
 
 /**
- * Fill @a *status for @a path, allocating in @a pool.
- * @a adm_access must be an access baton for @a path.
+ * Fill @a *status for @a local_abspath, allocating in @a result_pool.
+ * Use @a scratch_pool for temporary allocations.
  *
  * Here are some things to note about the returned structure.  A quick
  * examination of the @c status->text_status after a successful return of
  * this function can reveal the following things:
  *
- *    - @c svn_wc_status_none : @a path is not versioned, and is either not
- *                              present on disk, or is ignored by svn's
- *                              default ignore regular expressions or the
- *                              svn:ignore property setting for @a path's
- *                              parent directory.
- *
- *    - @c svn_wc_status_missing : @a path is versioned, but is missing from
- *                                 the working copy.
- *
- *    - @c svn_wc_status_unversioned : @a path is not versioned, but is
- *                                     present on disk and not being
- *                                     ignored (see above).
+ *    - #svn_wc_status_none : @a local_abspath is not versioned, and is
+ *                            not present on disk
+ *
+ *    - #svn_wc_status_missing : @a local_abspath is versioned, but is
+ *                               missing from the working copy.
+ *
+ *    - #svn_wc_status_unversioned : @a local_abspath is not versioned,
+ *                                   but is present on disk and not being
+ *                                   ignored (see above).
  *
  * The other available results for the @c text_status field are more
  * straightforward in their meanings.  See the comments on the
- * @c svn_wc_status_kind structure for some hints.
+ * #svn_wc_status_kind structure for some hints.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_status3(svn_wc_status3_t **status,
+               svn_wc_context_t *wc_ctx,
+               const char *local_abspath,
+               apr_pool_t *result_pool,
+               apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_status3(), but with a adm_access baton and absolute
+ * path.
  *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_status2(svn_wc_status2_t **status,
                const char *path,
@@ -2932,14 +3865,31 @@
 
 
 /**
- * A callback for reporting a @a status about @a path.
+ * A callback for reporting a @a status about @a local_abspath.
  *
  * @a baton is a closure object; it should be provided by the
  * implementation, and passed by the caller.
  *
- * @a pool will be cleared between invocations to the callback.
+ * @a scratch_pool will be cleared between invocations to the callback.
+ *
+ * ### we might be revamping the status infrastructure, and this callback
+ * ### could totally disappear by the end of 1.7 development. however, we
+ * ### need to mark the STATUS parameter as "const" so that it is easier
+ * ### to reason about who/what can modify those structures.
+ *
+ * @since New in 1.7.
+ */
+typedef svn_error_t *(*svn_wc_status_func4_t)(void *baton,
+                                              const char *local_abspath,
+                                              const svn_wc_status3_t *status,
+                                              apr_pool_t *scratch_pool);
+
+/**
+ * Same as svn_wc_status_func4_t, but with a non-const status and a relative
+ * path.
  *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
 typedef svn_error_t *(*svn_wc_status_func3_t)(void *baton,
                                               const char *path,
@@ -2947,7 +3897,7 @@
                                               apr_pool_t *pool);
 
 /**
- * Same as svn_wc_status_func3_t(), but without a provided pool or
+ * Same as svn_wc_status_func3_t, but without a provided pool or
  * the ability to propagate errors.
  *
  * @since New in 1.2.
@@ -2958,7 +3908,7 @@
                                       svn_wc_status2_t *status);
 
 /**
- *  Same as svn_wc_status_func2_t(), but for older svn_wc_status_t structures.
+ *  Same as svn_wc_status_func2_t, but for older svn_wc_status_t structures.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
@@ -2966,15 +3916,71 @@
                                      const char *path,
                                      svn_wc_status_t *status);
 
-
 /**
- * Set @a *editor and @a *edit_baton to an editor that generates @c
- * svn_wc_status2_t structures and sends them through @a status_func /
- * @a status_baton.  @a anchor is an access baton, with a tree lock,
- * for the local path to the working copy which will be used as the
- * root of our editor.  If @a target is not empty, it represents an
- * entry in the @a anchor path which is the subject of the editor
- * drive (otherwise, the @a anchor is the subject).
+ * Walk the working copy status of @a local_abspath using @a wc_ctx, by
+ * creating #svn_wc_status3_t structures and sending these through
+ * @a status_func / @a status_baton.
+ *
+ *  * Assuming the target is a directory, then:
+ *
+ *   - If @a get_all is FALSE, then only locally-modified entries will be
+ *     returned.  If TRUE, then all entries will be returned.
+ *
+ *   - If @a ignore_text_mods is TRUE, then the walk will not check for
+ *     modified files.  Any #svn_wc_status3_t structures returned for files
+ *     will always have a text_status field set to svn_wc_status_normal.
+ *     If @a ignore_text_mods is FALSE, the walk checks for text changes
+ *     and returns #svn_wc_status3_t structures describing any changes.
+ *
+ *   - If @a depth is #svn_depth_empty, a status structure will
+ *     be returned for the target only; if #svn_depth_files, for the
+ *     target and its immediate file children; if
+ *     #svn_depth_immediates, for the target and its immediate
+ *     children; if #svn_depth_infinity, for the target and
+ *     everything underneath it, fully recursively.
+ *
+ *     If @a depth is #svn_depth_unknown, take depths from the
+ *     working copy and behave as above in each directory's case.
+ *
+ *     If the given @a depth is incompatible with the depth found in a
+ *     working copy directory, the found depth always governs.
+ *
+ * If @a no_ignore is set, statuses that would typically be ignored
+ * will instead be reported.
+ *
+ * @a ignore_patterns is an array of file patterns matching
+ * unversioned files to ignore for the purposes of status reporting,
+ * or @c NULL if the default set of ignorable file patterns should be used.
+ *
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton while walking
+ * to determine if the client has canceled the operation.
+ *
+ * This function uses @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_walk_status(svn_wc_context_t *wc_ctx,
+                   const char *local_abspath,
+                   svn_depth_t depth,
+                   svn_boolean_t get_all,
+                   svn_boolean_t no_ignore,
+                   svn_boolean_t ignore_text_mods,
+                   const apr_array_header_t *ignore_patterns,
+                   svn_wc_status_func4_t status_func,
+                   void *status_baton,
+                   svn_cancel_func_t cancel_func,
+                   void *cancel_baton,
+                   apr_pool_t *scratch_pool);
+
+/**
+ * Set @a *editor and @a *edit_baton to an editor that generates
+ * #svn_wc_status3_t structures and sends them through @a status_func /
+ * @a status_baton.  @a anchor_abspath is a working copy directory
+ * directory which will be used as the root of our editor.  If @a
+ * target_basename is not "", it represents a node in the @a anchor_abspath
+ * which is the subject of the editor drive (otherwise, the @a
+ * anchor_abspath is the subject).
  *
  * If @a set_locks_baton is non- at c NULL, it will be set to a baton that can
  * be used in a call to the svn_wc_status_set_repos_locks() function.
@@ -2993,14 +3999,14 @@
  *   - If @a get_all is FALSE, then only locally-modified entries will be
  *     returned.  If TRUE, then all entries will be returned.
  *
- *   - If @a depth is @c svn_depth_empty, a status structure will
- *     be returned for the target only; if @c svn_depth_files, for the
+ *   - If @a depth is #svn_depth_empty, a status structure will
+ *     be returned for the target only; if #svn_depth_files, for the
  *     target and its immediate file children; if
- *     @c svn_depth_immediates, for the target and its immediate
- *     children; if @c svn_depth_infinity, for the target and
+ *     #svn_depth_immediates, for the target and its immediate
+ *     children; if #svn_depth_infinity, for the target and
  *     everything underneath it, fully recursively.
  *
- *     If @a depth is @c svn_depth_unknown, take depths from the
+ *     If @a depth is #svn_depth_unknown, take depths from the
  *     working copy and behave as above in each directory's case.
  *
  *     If the given @a depth is incompatible with the depth found in a
@@ -3014,17 +4020,55 @@
  * or @c NULL if the default set of ignorable file patterns should be used.
  *
  * If @a cancel_func is non-NULL, call it with @a cancel_baton while building
- * the @a statushash to determine if the client has cancelled the operation.
+ * the @a statushash to determine if the client has canceled the operation.
+ *
+ * If @a depth_as_sticky is set handle @a depth like when depth_is_sticky is
+ * passed for updating. This will show excluded nodes show up as added in the
+ * repository.
  *
- * If @a traversal_info is non-NULL, then record pre-update traversal
- * state in it.  (Caller should obtain @a traversal_info from
- * svn_wc_init_traversal_info().)
+ * If @a server_performs_filtering is TRUE, assume that the server handles
+ * the ambient depth filtering, so this doesn't have to be handled in the
+ * editor.
+ *
+ * Allocate the editor itself in @a result_pool, and use @a scratch_pool
+ * for temporary allocations. The editor will do its temporary allocations
+ * in a subpool of @a result_pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_get_status_editor5(const svn_delta_editor_t **editor,
+                          void **edit_baton,
+                          void **set_locks_baton,
+                          svn_revnum_t *edit_revision,
+                          svn_wc_context_t *wc_ctx,
+                          const char *anchor_abspath,
+                          const char *target_basename,
+                          svn_depth_t depth,
+                          svn_boolean_t get_all,
+                          svn_boolean_t no_ignore,
+                          svn_boolean_t depth_as_sticky,
+                          svn_boolean_t server_performs_filtering,
+                          const apr_array_header_t *ignore_patterns,
+                          svn_wc_status_func4_t status_func,
+                          void *status_baton,
+                          svn_cancel_func_t cancel_func,
+                          void *cancel_baton,
+                          apr_pool_t *result_pool,
+                          apr_pool_t *scratch_pool);
+
+/**
+ * Same as svn_wc_get_status_editor5, but using #svn_wc_status_func3_t
+ * instead of #svn_wc_status_func4_t. And @a server_performs_filtering
+ * always set to #TRUE.
  *
- * Allocate the editor itself in @a pool, but the editor does temporary
- * allocations in a subpool of @a pool.
+ * This also uses a single pool parameter, stating that all temporary
+ * allocations are performed in manually constructed/destroyed subpool.
  *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_get_status_editor4(const svn_delta_editor_t **editor,
                           void **edit_baton,
@@ -3044,11 +4088,11 @@
                           apr_pool_t *pool);
 
 /**
- * Same as svn_wc_get_status_editor4(), but using @c svn_wc_status_func2_t
- * instead of @c svn_wc_status_func3_t.
+ * Same as svn_wc_get_status_editor4(), but using #svn_wc_status_func2_t
+ * instead of #svn_wc_status_func3_t.
  *
  * @since New in 1.5.
- * @deprecated Provided for backward compatibility with the 1.4 API.
+ * @deprecated Provided for backward compatibility with the 1.5 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -3061,7 +4105,7 @@
                           svn_depth_t depth,
                           svn_boolean_t get_all,
                           svn_boolean_t no_ignore,
-                          apr_array_header_t *ignore_patterns,
+                          const apr_array_header_t *ignore_patterns,
                           svn_wc_status_func2_t status_func,
                           void *status_baton,
                           svn_cancel_func_t cancel_func,
@@ -3072,9 +4116,9 @@
 /**
  * Like svn_wc_get_status_editor3(), but with @a ignore_patterns
  * provided from the corresponding value in @a config, and @a recurse
- * instead of @a depth.  If @a recurse is TRUE, behave as if for @c
- * svn_depth_infinity; else if @a recurse is FALSE, behave as if for
- * @c svn_depth_immediates.
+ * instead of @a depth.  If @a recurse is TRUE, behave as if for
+ * #svn_depth_infinity; else if @a recurse is FALSE, behave as if for
+ * #svn_depth_immediates.
  *
  * @since New in 1.2.
  * @deprecated Provided for backward compatibility with the 1.4 API.
@@ -3146,30 +4190,50 @@
 
 
 /**
- * Copy @a src to @a dst_basename in @a dst_parent, and schedule
- * @a dst_basename for addition to the repository, remembering the copy
- * history.
- *
- * @a src must be a file or directory under version control; @a dst_parent
- * must be a directory under version control in the same working copy;
- * @a dst_basename will be the name of the copied item, and it must not
- * exist already.
+ * Copy @a src_abspath to @a dst_abspath, and schedule @a dst_abspath
+ * for addition to the repository, remembering the copy history. @a wc_ctx
+ * is used for accessing the working copy and must contain a write lock for
+ * the parent directory of @a dst_abspath,
+ *
+ * If @a metadata_only is TRUE then this is a database-only operation and
+ * the working directories and files are not copied.
+ *
+ * @a src_abspath must be a file or directory under version control;
+ * the parent of @a dst_abspath must be a directory under version control
+ * in the same working copy; @a dst_abspath will be the name of the copied
+ * item, and it must not exist already if @a metadata_only is FALSE.  Note that
+ * when @a src points to a versioned file, the working file doesn't
+ * necessarily exist in which case its text-base is used instead.
  *
  * If @a cancel_func is non-NULL, call it with @a cancel_baton at
  * various points during the operation.  If it returns an error
- * (typically @c SVN_ERR_CANCELLED), return that error immediately.
+ * (typically #SVN_ERR_CANCELLED), return that error immediately.
  *
- * For each file or directory copied, @a notify_func will be called
- * with its path and the @a notify_baton.  @a notify_func may be @c NULL
- * if you are not interested in this information.
+ * If @a notify_func is non-NULL, call it with @a notify_baton and the path
+ * of the root node (only) of the destination.
  *
- * @par Important:
- * This is a variant of svn_wc_add().  No changes will happen
- * to the repository until a commit occurs.  This scheduling can be
- * removed with svn_client_revert2().
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_copy3(svn_wc_context_t *wc_ctx,
+             const char *src_abspath,
+             const char *dst_abspath,
+             svn_boolean_t metadata_only,
+             svn_cancel_func_t cancel_func,
+             void *cancel_baton,
+             svn_wc_notify_func2_t notify_func,
+             void *notify_baton,
+             apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_copy3(), but takes access batons and a relative path
+ * and a basename instead of absolute paths and a working copy context.
  *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_copy2(const char *src,
              svn_wc_adm_access_t *dst_parent,
@@ -3181,7 +4245,7 @@
              apr_pool_t *pool);
 
 /**
- * Similar to svn_wc_copy2(), but takes an @c svn_wc_notify_func_t instead.
+ * Similar to svn_wc_copy2(), but takes an #svn_wc_notify_func_t instead.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
@@ -3197,30 +4261,105 @@
             apr_pool_t *pool);
 
 /**
- * Schedule @a path for deletion, it will be deleted from the repository on
- * the next commit.  If @a path refers to a directory, then a recursive
- * deletion will occur.  @a adm_access must hold a write lock for the parent
- * of @a path.
+ * Move @a src_abspath to @a dst_abspath, by scheduling @a dst_abspath
+ * for addition to the repository, remembering the history. Mark @a src_abspath
+ * as deleted after moving. at a wc_ctx is used for accessing the working copy and
+ * must contain a write lock for the parent directory of @a src_abspath and
+ * @a dst_abspath.
+ *
+ * If @a metadata_only is TRUE then this is a database-only operation and
+ * the working directories and files are not changed.
+ *
+ * @a src_abspath must be a file or directory under version control;
+ * the parent of @a dst_abspath must be a directory under version control
+ * in the same working copy; @a dst_abspath will be the name of the copied
+ * item, and it must not exist already if @a metadata_only is FALSE.  Note that
+ * when @a src points to a versioned file, the working file doesn't
+ * necessarily exist in which case its text-base is used instead.
+ *
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton at
+ * various points during the operation.  If it returns an error
+ * (typically #SVN_ERR_CANCELLED), return that error immediately.
+ *
+ * If @a notify_func is non-NULL, call it with @a notify_baton and the path
+ * of the root node (only) of the destination.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_move(svn_wc_context_t *wc_ctx,
+            const char *src_abspath,
+            const char *dst_abspath,
+            svn_boolean_t metadata_only,
+            svn_cancel_func_t cancel_func,
+            void *cancel_baton,
+            svn_wc_notify_func2_t notify_func,
+            void *notify_baton,
+            apr_pool_t *scratch_pool);
+
+/**
+ * Schedule @a local_abspath for deletion.  It will be deleted from the
+ * repository on the next commit.  If @a local_abspath refers to a
+ * directory, then a recursive deletion will occur. @a wc_ctx must hold
+ * a write lock for the parent of @a local_abspath, @a local_abspath itself
+ * and everything below @a local_abspath.
  *
  * If @a keep_local is FALSE, this function immediately deletes all files,
- * modified and unmodified, versioned and unversioned from the working copy.
+ * modified and unmodified, versioned and of @a delete_unversioned is TRUE,
+ * unversioned from the working copy.
  * It also immediately deletes unversioned directories and directories that
- * are scheduled to be added.  Only versioned directories will remain in the
- * working copy, these get deleted by the update following the commit.
+ * are scheduled to be added below @a local_abspath.  Only versioned may
+ * remain in the working copy, these get deleted by the update following
+ * the commit.
  *
  * If @a keep_local is TRUE, all files and directories will be kept in the
  * working copy (and will become unversioned on the next commit).
  *
+ * If @a delete_unversioned_target is TRUE and @a local_abspath is not
+ * versioned, @a local_abspath will be handled as an added files without
+ * history. So it will be deleted if @a keep_local is FALSE. If @a
+ * delete_unversioned is FALSE and @a local_abspath is not versioned a
+ * #SVN_ERR_WC_PATH_NOT_FOUND error will be returned.
+ *
  * If @a cancel_func is non-NULL, call it with @a cancel_baton at
  * various points during the operation.  If it returns an error
- * (typically @c SVN_ERR_CANCELLED), return that error immediately.
+ * (typically #SVN_ERR_CANCELLED), return that error immediately.
  *
  * For each path marked for deletion, @a notify_func will be called with
  * the @a notify_baton and that path. The @a notify_func callback may be
  * @c NULL if notification is not needed.
  *
+ * Use @a scratch_pool for temporary allocations.  It may be cleared
+ * immediately upon returning from this function.
+ *
+ * @since New in 1.7.
+ */
+ /* ### BH: Maybe add a delete_switched flag that allows deny switched
+            nodes like file externals? */
+svn_error_t *
+svn_wc_delete4(svn_wc_context_t *wc_ctx,
+               const char *local_abspath,
+               svn_boolean_t keep_local,
+               svn_boolean_t delete_unversioned_target,
+               svn_cancel_func_t cancel_func,
+               void *cancel_baton,
+               svn_wc_notify_func2_t notify_func,
+               void *notify_baton,
+               apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_delete4, but uses an access baton and relative path
+ * instead of a working copy context and absolute path. @a adm_access
+ * must hold a write lock for the parent of @a path.
+ *
+ * @c delete_unversioned_target will always be set to TRUE.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_delete3(const char *path,
                svn_wc_adm_access_t *adm_access,
@@ -3247,7 +4386,7 @@
                apr_pool_t *pool);
 
 /**
- * Similar to svn_wc_delete2(), but takes an @c svn_wc_notify_func_t instead.
+ * Similar to svn_wc_delete2(), but takes an #svn_wc_notify_func_t instead.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
@@ -3263,63 +4402,93 @@
 
 
 /**
- * Put @a path under version control by adding an entry in its parent,
- * and, if @a path is a directory, adding an administrative area.  The
- * new entry and anything under it is scheduled for addition to the
- * repository.  @a parent_access should hold a write lock for the parent
- * directory of @a path.  If @a path is a directory then an access baton
- * for @a path will be added to the set containing @a parent_access.
- *
- * If @a path does not exist, return @c SVN_ERR_WC_PATH_NOT_FOUND.
- *
- * If @a path is a directory, add it at @a depth; otherwise, ignore
- * @a depth.
- *
- * If @a copyfrom_url is non-NULL, it and @a copyfrom_rev are used as
- * `copyfrom' args.  This is for copy operations, where one wants
- * to schedule @a path for addition with a particular history.
+ * Schedule the single node that exists on disk at @a local_abspath for
+ * addition to the working copy.  The added node will have no properties.
  *
- * If @a cancel_func is non-NULL, call it with @a cancel_baton at
- * various points during the operation.  If it returns an error
- * (typically @c SVN_ERR_CANCELLED), return that error immediately.
+ * The versioned state of the parent path must be a modifiable directory,
+ * and the versioned state of @a local_abspath must be either nonexistent or
+ * deleted; if deleted, the new node will be a replacement.
+ *
+ * If @a local_abspath does not exist as file, directory or symlink, return
+ * #SVN_ERR_WC_PATH_NOT_FOUND.
+ *
+ * This is a replacement for svn_wc_add4() case 2a.
+ *
+ * ### TODO: Allow the caller to provide the node's properties?
+ *
+ * ### TODO: Split into add_dir, add_file, add_symlink?
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_add_from_disk(svn_wc_context_t *wc_ctx,
+                     const char *local_abspath,
+                     svn_wc_notify_func2_t notify_func,
+                     void *notify_baton,
+                     apr_pool_t *scratch_pool);
+
+
+/**
+ * Put @a local_abspath under version control by registering it as addition
+ * or copy in the database containing its parent. The new node is scheduled
+ * for addition to the repository below its parent node.
+ *
+ * 1) If the node is already versioned, it MUST BE the root of a separate
+ * working copy from the same repository as the parent WC. The new node
+ * and anything below it will be scheduled for addition inside the parent
+ * working copy as a copy of the original location. The separate working
+ * copy will be integrated by this step. In this case, which is only used
+ * by code like that of "svn cp URL at rev path" @a copyfrom_url and
+ * @a copyfrom_rev MUST BE the the url and revision of @a local_abspath
+ * in the separate working copy.
+ *
+ * 2a) If the node was not versioned before it will be scheduled as a local
+ * addition or 2b) if @a copyfrom_url and @a copyfrom_rev are set as a copy
+ * of that location. In this last case the function doesn't set the pristine
+ * version (of a file) and/or pristine properties, which callers should
+ * handle via different APIs. Usually it is easier to call
+ * svn_wc_add_repos_file4() (### or a possible svn_wc_add_repos_dir()) than
+ * using this variant.
  *
- * When the @a path has been added, then @a notify_func will be called
- * (if it is not @c NULL) with the @a notify_baton and the path.
+ * If @a local_abspath does not exist as file, directory or symlink, return
+ * #SVN_ERR_WC_PATH_NOT_FOUND.
  *
- * Return @c SVN_ERR_WC_NODE_KIND_CHANGE if @a path is both an unversioned
- * directory and a file that is scheduled for deletion or in state deleted.
+ * If @a local_abspath is an unversioned directory, record @a depth on it;
+ * otherwise, ignore @a depth. (Use #svn_depth_infinity unless you exactly
+ * know what you are doing, or you may create an unexpected sparse working
+ * copy)
  *
- *<pre> ### This function currently does double duty -- it is also
- * ### responsible for "switching" a working copy directory over to a
- * ### new copyfrom ancestry and scheduling it for addition.  Here is
- * ### the old doc string from Ben, lightly edited to bring it
- * ### up-to-date, explaining the TRUE, secret life of this function:</pre>
- *
- * Given a @a path within a working copy of type KIND, follow this algorithm:
- *
- *    - if @a path is not under version control:
- *       - Place it under version control and schedule for addition;
- *         if @a copyfrom_url is non-NULL, use it and @a copyfrom_rev as
- *         'copyfrom' history
- *
- *    - if @a path is already under version control:
- *          (This can only happen when a directory is copied, in which
- *           case ancestry must have been supplied as well.)
- *
- *       -  Schedule the directory itself for addition with copyfrom history.
- *       -  Mark all its children with a 'copied' flag
- *       -  Rewrite all the URLs to what they will be after a commit.
- *       -  ### @todo Remove old wcprops too, see the '###' below.
- *
- *<pre> ### I think possibly the "switchover" functionality should be
- * ### broken out into a separate function, but its all intertwined in
- * ### the code right now.  Ben, thoughts?  Hard?  Easy?  Mauve?</pre>
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton at
+ * various points during the operation.  If it returns an error
+ * (typically #SVN_ERR_CANCELLED), return that error immediately.
  *
- * ### Update: see "###" comment in svn_wc_add_repos_file3()'s doc
- * string about this.
+ * When the @a local_abspath has been added, then @a notify_func will be
+ * called (if it is not @c NULL) with the @a notify_baton and the path.
  *
+ * @note Case 1 is deprecated. Consider doing a WC-to-WC copy instead.
+ * @note For case 2a, prefer svn_wc_add_from_disk().
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_add4(svn_wc_context_t *wc_ctx,
+            const char *local_abspath,
+            svn_depth_t depth,
+            const char *copyfrom_url,
+            svn_revnum_t copyfrom_rev,
+            svn_cancel_func_t cancel_func,
+            void *cancel_baton,
+            svn_wc_notify_func2_t notify_func,
+            void *notify_baton,
+            apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_add4(), but with an access baton
+ * and relative path instead of a context and absolute path.
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_add3(const char *path,
             svn_wc_adm_access_t *parent_access,
@@ -3334,7 +4503,7 @@
 
 /**
  * Similar to svn_wc_add3(), but with the @a depth parameter always
- * @c svn_depth_infinity.
+ * #svn_depth_infinity.
  *
  * @since New in 1.2.
  * @deprecated Provided for backward compatibility with the 1.5 API.
@@ -3352,7 +4521,7 @@
             apr_pool_t *pool);
 
 /**
- * Similar to svn_wc_add2(), but takes an @c svn_wc_notify_func_t instead.
+ * Similar to svn_wc_add2(), but takes an #svn_wc_notify_func_t instead.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
@@ -3368,14 +4537,15 @@
            void *notify_baton,
            apr_pool_t *pool);
 
-/** Add a file to a working copy at @a dst_path, obtaining the text-base's
- * contents from @a new_base_contents, the wc file's content from
- * @a new_contents, its base properties from @a new_base_props and
- * wc properties from @a new_props.
- *
- * The base text and props normally come from the repository file
- * represented by the copyfrom args, see below.  The new file will
- * be scheduled for addition with history.
+/** Add a file to a working copy at @a local_abspath, obtaining the
+ * text-base's contents from @a new_base_contents, the wc file's
+ * content from @a new_contents, its unmodified properties from @a
+ * new_base_props and its actual properties from @a new_props. Use
+ * @a wc_ctx for accessing the working copy.
+ *
+ * The unmodified text and props normally come from the repository
+ * file represented by the copyfrom args, see below.  The new file
+ * will be marked as copy.
  *
  * @a new_contents and @a new_props may be NULL, in which case
  * the working copy text and props are taken from the base files with
@@ -3384,8 +4554,7 @@
  * @a new_contents must be provided in Normal Form. This is required
  * in order to pass both special and non-special files through a stream.
  *
- * @a adm_access, or an access baton in its associated set, must
- * contain a write lock for the parent of @a dst_path.
+ * @a wc_ctx must contain a write lock for the parent of @a local_abspath.
  *
  * If @a copyfrom_url is non-NULL, then @a copyfrom_rev must be a
  * valid revision number, and together they are the copyfrom history
@@ -3393,13 +4562,11 @@
  *
  * The @a cancel_func and @a cancel_baton are a standard cancellation
  * callback, or NULL if no callback is needed. @a notify_func and
- * @a notify_baton are a notification callback, and will be notified
- * of the addition of this file.
+ * @a notify_baton are a notification callback, and (if not NULL)
+ * will be notified of the addition of this file.
  *
  * Use @a scratch_pool for temporary allocations.
  *
- * ### NOTE: the notification callback/baton is not yet used.
- *
  * ### This function is very redundant with svn_wc_add().  Ideally,
  * we'd merge them, so that svn_wc_add() would just take optional
  * new_props and optional copyfrom information.  That way it could be
@@ -3412,8 +4579,30 @@
  * etc, etc.  So another part of the Ideal Plan is that that
  * functionality of svn_wc_add() would move into a separate function.
  *
- * @since New in 1.6
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_add_repos_file4(svn_wc_context_t *wc_ctx,
+                       const char *local_abspath,
+                       svn_stream_t *new_base_contents,
+                       svn_stream_t *new_contents,
+                       apr_hash_t *new_base_props,
+                       apr_hash_t *new_props,
+                       const char *copyfrom_url,
+                       svn_revnum_t copyfrom_rev,
+                       svn_cancel_func_t cancel_func,
+                       void *cancel_baton,
+                       apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_add_repos_file4, but uses access batons and a
+ * relative path instead of a working copy context and absolute path.
+ *
+ * ### NOTE: the notification callback/baton is not yet used.
+ *
+ * @since New in 1.6.
+ * @deprecated Provided for compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_add_repos_file3(const char *dst_path,
                        svn_wc_adm_access_t *adm_access,
@@ -3464,35 +4653,56 @@
                       apr_pool_t *pool);
 
 
-/** Remove entry @a name in @a adm_access from revision control.  @a name
- * must be either a file or @c SVN_WC_ENTRY_THIS_DIR.  @a adm_access must
+/** Remove @a local_abspath from revision control.  @a wc_ctx must
  * hold a write lock.
  *
- * If @a name is a file, all its info will be removed from @a adm_access's
- * administrative directory.  If @a name is @c SVN_WC_ENTRY_THIS_DIR, then
- * @a adm_access's entire administrative area will be deleted, along with
- * *all* the administrative areas anywhere in the tree below @a adm_access.
+ * If @a local_abspath is a file, all its info will be removed from the
+ * administrative area.  If @a local_abspath is a directory, then the
+ * administrative area will be deleted, along with *all* the administrative
+ * areas anywhere in the tree below @a adm_access.
  *
  * Normally, only administrative data is removed.  However, if
  * @a destroy_wf is TRUE, then all working file(s) and dirs are deleted
  * from disk as well.  When called with @a destroy_wf, any locally
  * modified files will *not* be deleted, and the special error
- * @c SVN_ERR_WC_LEFT_LOCAL_MOD might be returned.  (Callers only need to
+ * #SVN_ERR_WC_LEFT_LOCAL_MOD might be returned.  (Callers only need to
  * check for this special return value if @a destroy_wf is TRUE.)
  *
- * If @a instant_error is TRUE, then return @c
- * SVN_ERR_WC_LEFT_LOCAL_MOD the instant a locally modified file is
+ * If @a instant_error is TRUE, then return
+ * #SVN_ERR_WC_LEFT_LOCAL_MOD the instant a locally modified file is
  * encountered.  Otherwise, leave locally modified files in place and
  * return the error only after all the recursion is complete.
  *
  * If @a cancel_func is non-NULL, call it with @a cancel_baton at
  * various points during the removal.  If it returns an error
- * (typically @c SVN_ERR_CANCELLED), return that error immediately.
+ * (typically #SVN_ERR_CANCELLED), return that error immediately.
  *
  * WARNING:  This routine is exported for careful, measured use by
  * libsvn_client.  Do *not* call this routine unless you really
  * understand what the heck you're doing.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_remove_from_revision_control2(svn_wc_context_t *wc_ctx,
+                                     const char *local_abspath,
+                                     svn_boolean_t destroy_wf,
+                                     svn_boolean_t instant_error,
+                                     svn_cancel_func_t cancel_func,
+                                     void *cancel_baton,
+                                     apr_pool_t *pool);
+
+/**
+ * Similar to svn_wc_remove_from_revision_control2() but with a name
+ * and access baton.
+ *
+ * WARNING:  This routine was exported for careful, measured use by
+ * libsvn_client.  Do *not* call this routine unless you really
+ * understand what the heck you're doing.
+ *
+ * @deprecated Provided for compatibility with the 1.6 API
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_remove_from_revision_control(svn_wc_adm_access_t *adm_access,
                                     const char *name,
@@ -3504,31 +4714,35 @@
 
 
 /**
- * Assuming @a path is under version control and in a state of conflict,
- * then take @a path *out* of this state.  If @a resolve_text is TRUE then
- * any text conflict is resolved, if @a resolve_props is TRUE then any
- * property conflicts are resolved, if @a resolve_tree is TRUE then any
- * tree conflicts are resolved.
- *
- * If @a depth is @c svn_depth_empty, act only on @a path; if
- * @c svn_depth_files, resolve @a path and its conflicted file
- * children (if any); if @c svn_depth_immediates, resolve @a path and
- * all its immediate conflicted children (both files and directories,
- * if any); if @c svn_depth_infinity, resolve @a path and every
+ * Assuming @a local_abspath is under version control or a tree conflict
+ * victim and in a state of conflict, then take @a local_abspath *out*
+ * of this state.  If @a resolve_text is TRUE then any text conflict is
+ * resolved, if @a resolve_tree is TRUE then any tree conflicts are
+ * resolved. If @a resolve_prop is set to "" all property conflicts are
+ * resolved, if it is set to any other string value, conflicts on that
+ * specific property are resolved and when resolve_prop is NULL, no
+ * property conflicts are resolved.
+ *
+ * If @a depth is #svn_depth_empty, act only on @a local_abspath; if
+ * #svn_depth_files, resolve @a local_abspath and its conflicted file
+ * children (if any); if #svn_depth_immediates, resolve @a local_abspath
+ * and all its immediate conflicted children (both files and directories,
+ * if any); if #svn_depth_infinity, resolve @a local_abspath and every
  * conflicted file or directory anywhere beneath it.
  *
- * If @a conflict_choice is @c svn_wc_conflict_choose_base, resolve the
+ * If @a conflict_choice is #svn_wc_conflict_choose_base, resolve the
  * conflict with the old file contents; if
- * @c svn_wc_conflict_choose_mine_full, use the original working contents;
- * if @c svn_wc_conflict_choose_theirs_full, the new contents; and if
- * @c svn_wc_conflict_choose_merged, don't change the contents at all,
+ * #svn_wc_conflict_choose_mine_full, use the original working contents;
+ * if #svn_wc_conflict_choose_theirs_full, the new contents; and if
+ * #svn_wc_conflict_choose_merged, don't change the contents at all,
  * just remove the conflict status, which is the pre-1.5 behavior.
  *
- * @c svn_wc_conflict_choose_theirs_conflict and @c
- * svn_wc_conflict_choose_mine_conflict are not legal for binary
+ * #svn_wc_conflict_choose_theirs_conflict and
+ * #svn_wc_conflict_choose_mine_conflict are not legal for binary
  * files or properties.
  *
- * @a adm_access is an access baton, with a write lock, for @a path.
+ * @a wc_ctx is a working copy context, with a write lock, for @a
+ * local_abspath.
  *
  * Needless to say, this function doesn't touch conflict markers or
  * anything of that sort -- only a human can semantically resolve a
@@ -3538,19 +4752,43 @@
  * The implementation details are opaque, as our "conflicted" criteria
  * might change over time.  (At the moment, this routine removes the
  * three fulltext 'backup' files and any .prej file created in a conflict,
- * and modifies @a path's entry.)
+ * and modifies @a local_abspath's entry.)
+ *
+ * If @a local_abspath is not under version control and not a tree
+ * conflict, return #SVN_ERR_ENTRY_NOT_FOUND. If @a path isn't in a
+ * state of conflict to begin with, do nothing, and return #SVN_NO_ERROR.
+ *
+ * If @c local_abspath was successfully taken out of a state of conflict,
+ * report this information to @c notify_func (if non- at c NULL.)  If only
+ * text, only property, or only tree conflict resolution was requested,
+ * and it was successful, then success gets reported.
+ *
+ * Temporary allocations will be performed in @a scratch_pool.
  *
- * If @a path is not under version control, return @c SVN_ERR_ENTRY_NOT_FOUND.
- * If @a path isn't in a state of conflict to begin with, do nothing, and
- * return @c SVN_NO_ERROR.
- *
- * If @c path was successfully taken out of a state of conflict, report this
- * information to @c notify_func (if non- at c NULL.)  If only text, only
- * property, or only tree conflict resolution was requested, and it was
- * successful, then success gets reported.
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_resolved_conflict5(svn_wc_context_t *wc_ctx,
+                          const char *local_abspath,
+                          svn_depth_t depth,
+                          svn_boolean_t resolve_text,
+                          const char *resolve_prop,
+                          svn_boolean_t resolve_tree,
+                          svn_wc_conflict_choice_t conflict_choice,
+                          svn_cancel_func_t cancel_func,
+                          void *cancel_baton,
+                          svn_wc_notify_func2_t notify_func,
+                          void *notify_baton,
+                          apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_resolved_conflict5, but takes an absolute path
+ * and an access baton. This version doesn't support resolving a specific
+ * property.conflict.
  *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_resolved_conflict4(const char *path,
                           svn_wc_adm_access_t *adm_access,
@@ -3570,6 +4808,7 @@
  * Similar to svn_wc_resolved_conflict4(), but without tree-conflict
  * resolution support.
  *
+ * @since New in 1.5.
  * @deprecated Provided for backward compatibility with the 1.5 API.
  */
 SVN_DEPRECATED
@@ -3590,9 +4829,10 @@
 /**
  * Similar to svn_wc_resolved_conflict3(), but without automatic conflict
  * resolution support, and with @a depth set according to @a recurse:
- * if @a recurse is TRUE, @a depth is @c svn_depth_infinity, else it is
- * @c svn_depth_files.
+ * if @a recurse is TRUE, @a depth is #svn_depth_infinity, else it is
+ * #svn_depth_files.
  *
+ * @since New in 1.2.
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
@@ -3612,7 +4852,7 @@
  * Similar to svn_wc_resolved_conflict2(), but takes an
  * svn_wc_notify_func_t and doesn't have cancellation support.
  *
- * @deprecated Provided for backward compatibility with the 1.0 API.
+ * @deprecated Provided for backward compatibility with the 1.1 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -3641,7 +4881,7 @@
  * Create a queue for use with svn_wc_queue_committed() and
  * svn_wc_process_committed_queue().
  *
- * The returned queue and all further allocations required for queueing
+ * The returned queue and all further allocations required for queuing
  * new items will also be done from @a pool.
  *
  * @since New in 1.5.
@@ -3652,18 +4892,17 @@
 
 /**
  * Queue committed items to be processed later by
- * svn_wc_process_committed_queue().
- *
- * All pointer data passed to this function (@a path, @a adm_access,
- * @a wcprop_changes and @a checksum) should remain valid until the queue
- * has been processed by svn_wc_process_committed_queue().
+ * svn_wc_process_committed_queue2().
  *
- * Record in @a queue that @a path will need to be bumped after a commit
- * succeeds. @a adm_access must hold a write lock appropriate for @a path.
+ * Record in @a queue that @a local_abspath will need to be bumped
+ * after a commit succeeds.
  *
  * If non-NULL, @a wcprop_changes is an array of <tt>svn_prop_t *</tt>
- * changes to wc properties; if an @c svn_prop_t->value is NULL, then
+ * changes to wc properties; if an #svn_prop_t->value is NULL, then
  * that property is deleted.
+ *   ### [JAF]  No, a prop whose value is NULL is ignored, not deleted.  This
+ *   ### 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 remove_lock is @c TRUE, any entryprops related to a repository
  * lock will be removed.
@@ -3671,32 +4910,68 @@
  * If @a remove_changelist is @c TRUE, any association with a
  * changelist will be removed.
  *
- * If @a path is a file and @a checksum is non-NULL, use @a checksum as
- * the checksum for the new text base. Otherwise, calculate the checksum
- * if needed.
  *
- * If @a recurse is TRUE and @a path is a directory, then bump every
- * versioned object at or under @a path.  This is usually done for
+ * If @a sha1_checksum is non-NULL, use it to identify the node's pristine
+ * text.
+ *
+ * If @a recurse is TRUE and @a local_abspath is a directory, then bump every
+ * versioned object at or under @a local_abspath.  This is usually done for
  * copied trees.
  *
- * 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.
+ * ### In the present implementation, if a recursive directory item is in
+ *     the queue, then any children (at any depth) of that directory that
+ *     are also in the queue as separate items will get:
+ *       'wcprop_changes' = NULL;
+ *       'remove_lock' = FALSE;
+ *       'remove_changelist' from the recursive parent item;
+ *     and any children (at any depth) of that directory that are NOT in
+ *     the queue as separate items will get:
+ *       'wcprop_changes' = NULL;
+ *       'remove_lock' = FALSE;
+ *       'remove_changelist' from the recursive parent item;
  *
  * @note the @a recurse parameter should be used with extreme care since
  * it will bump ALL nodes under the directory, regardless of their
  * actual inclusion in the new revision.
  *
+ * All pointer data passed to this function (@a local_abspath,
+ * @a wcprop_changes and the checksums) should remain valid until the
+ * queue has been processed by svn_wc_process_committed_queue2().
+ *
+ * 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.7.
+ */
+svn_error_t *
+svn_wc_queue_committed3(svn_wc_committed_queue_t *queue,
+                        svn_wc_context_t *wc_ctx,
+                        const char *local_abspath,
+                        svn_boolean_t recurse,
+                        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);
+
+/** Same as svn_wc_queue_committed3() except @a path doesn't have to be an
+ * abspath and @a adm_access is unused and a SHA-1 checksum cannot be
+ * specified.
+ *
  * @since New in 1.6.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_queue_committed2(svn_wc_committed_queue_t *queue,
                         const char *path,
                         svn_wc_adm_access_t *adm_access,
                         svn_boolean_t recurse,
-                        apr_array_header_t *wcprop_changes,
+                        const apr_array_header_t *wcprop_changes,
                         svn_boolean_t remove_lock,
                         svn_boolean_t remove_changelist,
-                        svn_checksum_t *checksum,
+                        const svn_checksum_t *md5_checksum,
                         apr_pool_t *scratch_pool);
 
 
@@ -3710,12 +4985,13 @@
  *
  * @deprecated Provided for backwards compatibility with 1.5
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_queue_committed(svn_wc_committed_queue_t **queue,
                        const char *path,
                        svn_wc_adm_access_t *adm_access,
                        svn_boolean_t recurse,
-                       apr_array_header_t *wcprop_changes,
+                       const apr_array_header_t *wcprop_changes,
                        svn_boolean_t remove_lock,
                        svn_boolean_t remove_changelist,
                        const unsigned char *digest,
@@ -3727,11 +5003,27 @@
  * @a rev_date and @a rev_author are the (server-side) date and author
  * of the new revision; one or both may be @c NULL.
  *
- * @a adm_access must be associated with all affected directories, and
- * must hold a write lock in each one.
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
+ * if the client wants to cancel the operation.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_process_committed_queue2(svn_wc_committed_queue_t *queue,
+                                svn_wc_context_t *wc_ctx,
+                                svn_revnum_t new_revnum,
+                                const char *rev_date,
+                                const char *rev_author,
+                                svn_cancel_func_t cancel_func,
+                                void *cancel_baton,
+                                apr_pool_t *scratch_pool);
+
+/** @see svn_wc_process_committed_queue2()
  *
  * @since New in 1.5.
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_process_committed_queue(svn_wc_committed_queue_t *queue,
                                svn_wc_adm_access_t *adm_access,
@@ -3758,7 +5050,7 @@
                           svn_revnum_t new_revnum,
                           const char *rev_date,
                           const char *rev_author,
-                          apr_array_header_t *wcprop_changes,
+                          const apr_array_header_t *wcprop_changes,
                           svn_boolean_t remove_lock,
                           svn_boolean_t remove_changelist,
                           const unsigned char *digest,
@@ -3777,7 +5069,7 @@
                           svn_revnum_t new_revnum,
                           const char *rev_date,
                           const char *rev_author,
-                          apr_array_header_t *wcprop_changes,
+                          const apr_array_header_t *wcprop_changes,
                           svn_boolean_t remove_lock,
                           const unsigned char *digest,
                           apr_pool_t *pool);
@@ -3795,7 +5087,7 @@
                           svn_revnum_t new_revnum,
                           const char *rev_date,
                           const char *rev_author,
-                          apr_array_header_t *wcprop_changes,
+                          const apr_array_header_t *wcprop_changes,
                           svn_boolean_t remove_lock,
                           apr_pool_t *pool);
 
@@ -3812,7 +5104,7 @@
                          svn_revnum_t new_revnum,
                          const char *rev_date,
                          const char *rev_author,
-                         apr_array_header_t *wcprop_changes,
+                         const apr_array_header_t *wcprop_changes,
                          apr_pool_t *pool);
 
 
@@ -3820,36 +5112,36 @@
 
 
 /**
- * Do a depth-first crawl in a working copy, beginning at @a path.
+ * Do a depth-first crawl in a working copy, beginning at @a local_abspath,
+ * using @a wc_ctx for accessing the working copy.
  *
  * Communicate the `state' of the working copy's revisions and depths
- * to @a reporter/@a report_baton.  Obviously, if @a path is a file
- * instead of a directory, this depth-first crawl will be a short one.
+ * to @a reporter/@a report_baton.  Obviously, if @a local_abspath is a
+ * file instead of a directory, this depth-first crawl will be a short one.
  *
- * No locks are or logs are created, nor are any animals harmed in the
- * process.  No cleanup is necessary.  @a adm_access must be an access
- * baton for the @a path hierarchy, it does not require a write lock.
+ * No locks or logs are created, nor are any animals harmed in the
+ * process unless @a restore_files is TRUE.  No cleanup is necessary.
  *
  * After all revisions are reported, @a reporter->finish_report() is
  * called, which immediately causes the RA layer to update the working
  * copy.  Thus the return value may very well reflect the result of
  * the update!
  *
- * If @a depth is @c svn_depth_empty, then report state only for
- * @a path itself.  If @c svn_depth_files, do the same and include
- * immediate file children of @a path.  If @c svn_depth_immediates,
- * then behave as if for @c svn_depth_files but also report the
+ * If @a depth is #svn_depth_empty, then report state only for
+ * @a path itself.  If #svn_depth_files, do the same and include
+ * immediate file children of @a path.  If #svn_depth_immediates,
+ * then behave as if for #svn_depth_files but also report the
  * property states of immediate subdirectories.  If @a depth is
- * @c svn_depth_infinity, then report state fully recursively.  All
+ * #svn_depth_infinity, then report state fully recursively.  All
  * descents are only as deep as @a path's own depth permits, of
- * course.  If @a depth is @c svn_depth_unknown, then just use
- * @c svn_depth_infinity, which in practice means depth of @a path.
+ * course.  If @a depth is #svn_depth_unknown, then just use
+ * #svn_depth_infinity, which in practice means depth of @a path.
  *
  * Iff @a honor_depth_exclude is TRUE, the crawler will report paths
- * whose ambient depth is @c svn_depth_exclude as being excluded, and
+ * whose ambient depth is #svn_depth_exclude as being excluded, and
  * thus prevent the server from pushing update data for those paths;
  * therefore, don't set this flag if you wish to pull in excluded paths.
- * Note that @c svn_depth_exclude on the target @a path is never
+ * Note that #svn_depth_exclude on the target @a path is never
  * honored, even if @a honor_depth_exclude is TRUE, because we need to
  * be able to explicitly pull in a target.  For example, if this is
  * the working copy...
@@ -3876,12 +5168,34 @@
  * use_commit_times is TRUE, then set restored files' timestamps to
  * their last-commit-times.
  *
- * If @a traversal_info is non-NULL, then record pre-update traversal
- * state in it.  (Caller should obtain @a traversal_info from
- * svn_wc_init_traversal_info().)
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_crawl_revisions5(svn_wc_context_t *wc_ctx,
+                        const char *local_abspath,
+                        const svn_ra_reporter3_t *reporter,
+                        void *report_baton,
+                        svn_boolean_t restore_files,
+                        svn_depth_t depth,
+                        svn_boolean_t honor_depth_exclude,
+                        svn_boolean_t depth_compatibility_trick,
+                        svn_boolean_t use_commit_times,
+                        svn_cancel_func_t cancel_func,
+                        void *cancel_baton,
+                        svn_wc_notify_func2_t notify_func,
+                        void *notify_baton,
+                        apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_crawl_revisions5, but with a relative path and
+ * access baton instead of an absolute path and wc_ctx.
+ *
+ * Passes NULL for @a cancel_func and @a cancel_baton.
  *
  * @since New in 1.6.
+ * @deprecated Provided for compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_crawl_revisions4(const char *path,
                         svn_wc_adm_access_t *adm_access,
@@ -3897,12 +5211,14 @@
                         svn_wc_traversal_info_t *traversal_info,
                         apr_pool_t *pool);
 
+
 /**
  * Similar to svn_wc_crawl_revisions4, but with @a honor_depth_exclude always
  * set to false.
  *
  * @deprecated Provided for compatibility with the 1.5 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_crawl_revisions3(const char *path,
                         svn_wc_adm_access_t *adm_access,
@@ -3919,8 +5235,8 @@
 
 /**
  * Similar to svn_wc_crawl_revisions3, but taking svn_ra_reporter2_t
- * instead of svn_ra_reporter3_t, and therefore only able to report @c
- * svn_depth_infinity for depths; and taking @a recurse instead of @a
+ * instead of svn_ra_reporter3_t, and therefore only able to report
+ * #svn_depth_infinity for depths; and taking @a recurse instead of @a
  * depth; and with @a depth_compatibility_trick always false.
  *
  * @deprecated Provided for compatibility with the 1.4 API.
@@ -3940,8 +5256,8 @@
                         apr_pool_t *pool);
 
 /**
- * Similar to svn_wc_crawl_revisions2(), but takes an svn_wc_notify_func_t
- * and a @c svn_reporter_t instead.
+ * Similar to svn_wc_crawl_revisions2(), but takes an #svn_wc_notify_func_t
+ * and a #svn_ra_reporter_t instead.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
@@ -3960,28 +5276,49 @@
                        apr_pool_t *pool);
 
 
-/* Updates. */
+/**
+ * @defgroup svn_wc_roots Working copy roots
+ * @{
+ */
 
-/** Set @a *wc_root to @c TRUE if @a path represents a "working copy root",
- * @c FALSE otherwise. Here, @a path is a "working copy root" if its parent
- * directory is not a WC or if its parent directory's repository URL is not
- * the parent of its own repository URL. Thus, a switched subtree is
+/** Set @a *wc_root to @c TRUE if @a local_abspath represents a "working copy
+ * root", @c FALSE otherwise. Here, @a local_abspath is a "working copy root"
+ * if its parent directory is not a WC or if its parent directory's repository
+ * URL is not the parent of its own repository URL. Thus, a switched subtree is
  * considered to be a working copy root. Also, a deleted tree-conflict
  * victim is considered a "working copy root" because it has no URL.
  *
- * If @a path is not found, return the error @c SVN_ERR_ENTRY_NOT_FOUND.
+ * If @a local_abspath is not found, return the error #SVN_ERR_ENTRY_NOT_FOUND.
+ *
+ * Use @a scratch_pool for any temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_is_wc_root2(svn_boolean_t *wc_root,
+                   svn_wc_context_t *wc_ctx,
+                   const char *local_abspath,
+                   apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_is_wc_root2(), but with an access baton and relative
+ * path.
  *
- * Use @a pool for any intermediate allocations.
+ * @note If @a path is '', this function will always return @c TRUE.
  *
- * @note Due to the way in which "WC-root-ness" is calculated, passing
- * a @a path of `.' to this function will always return @c TRUE.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_is_wc_root(svn_boolean_t *wc_root,
                   const char *path,
                   svn_wc_adm_access_t *adm_access,
                   apr_pool_t *pool);
 
+/** @} */
+
+
+/* Updates. */
 
 /** Conditionally split @a path into an @a anchor and @a target for the
  * purpose of updating and committing.
@@ -3992,8 +5329,35 @@
  * @a target is the actual subject (relative to the @a anchor) of the
  * update/commit, or "" if the @a anchor itself is the subject.
  *
- * Allocate @a anchor and @a target in @a pool.
+ * Allocate @a anchor and @a target in @a result_pool; @a scratch_pool
+ * is used for temporary allocations.
+ *
+ * @note Even though this API uses a #svn_wc_context_t, it accepts a
+ * (possibly) relative path and returns a (possibly) relative path in
+ * @a *anchor.  The reason being that the outputs are generally used to
+ * open access batons, and such opening currently requires relative paths.
+ * In the long-run, I expect this API to be removed from 1.7, due to the
+ * remove of access batons, but for the time being, the #svn_wc_context_t
+ * parameter allows us to avoid opening a duplicate database, just for this
+ * function.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_get_actual_target2(const char **anchor,
+                          const char **target,
+                          svn_wc_context_t *wc_ctx,
+                          const char *path,
+                          apr_pool_t *result_pool,
+                          apr_pool_t *scratch_pool);
+
+
+/** Similar to svn_wc_get_actual_target2(), but without the wc context, and
+ * with a absolute path.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_get_actual_target(const char *path,
                          const char **anchor,
@@ -4001,24 +5365,61 @@
                          apr_pool_t *pool);
 
 
-
-/* Update and update-like functionality. */
+/**
+ * @defgroup svn_wc_update_switch Update and switch (update-like functionality)
+ * @{
+ */
+
+/**
+ * A simple callback type to wrap svn_ra_get_file();  see that
+ * docstring for more information.
+ *
+ * This technique allows libsvn_client to 'wrap' svn_ra_get_file() and
+ * pass it down into libsvn_wc functions, thus allowing the WC layer
+ * to legally call the RA function via (blind) callback.
+ *
+ * @since New in 1.5
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+typedef svn_error_t *(*svn_wc_get_file_t)(void *baton,
+                                          const char *path,
+                                          svn_revnum_t revision,
+                                          svn_stream_t *stream,
+                                          svn_revnum_t *fetched_rev,
+                                          apr_hash_t **props,
+                                          apr_pool_t *pool);
+
+/**
+ * A simple callback type to wrap svn_ra_get_dir2() for avoiding issue #3569,
+ * where a directory is updated to a revision without some of its children
+ * recorded in the working copy. A future update won't bring these files in
+ * because the repository assumes they are already there.
+ *
+ * We really only need the names of the dirents for a not-present marking,
+ * but we also store the node-kind if we receive one.
+ *
+ * @a *dirents should be set to a hash mapping <tt>const char *</tt> child
+ * names, to <tt>const svn_dirent_t *</tt> instances.
+ *
+ * @since New in 1.7.
+ */
+typedef svn_error_t *(*svn_wc_dirents_func_t)(void *baton,
+                                              apr_hash_t **dirents,
+                                              const char *repos_root_url,
+                                              const char *repos_relpath,
+                                              apr_pool_t *result_pool,
+                                              apr_pool_t *scratch_pool);
+
 
 /**
  * Set @a *editor and @a *edit_baton to an editor and baton for updating a
  * working copy.
  *
- * If @a ti is non-NULL, record traversal info in @a ti, for use by
- * post-traversal accessors such as svn_wc_edited_externals().
+ * @a anchor_abspath is a local working copy directory, with a fully recursive
+ * write lock in @a wc_ctx, which will be used as the root of our editor.
  *
- * @a anchor is an access baton, with a write lock, for the local path to the
- * working copy which will be used as the root of our editor.  Further
- * locks will be acquired if the update creates new directories.  All
- * locks, both those in @a anchor and newly acquired ones, will be released
- * when the editor driver calls @c close_edit.
- *
- * @a target is the entry in @a anchor that will actually be updated, or
- * the empty string if all of @a anchor should be updated.
+ * @a target_basename is the entry in @a anchor_abspath that will actually be
+ * updated, or the empty string if all of @a anchor_abspath should be updated.
  *
  * The editor invokes @a notify_func with @a notify_baton as the update
  * progresses, if @a notify_func is non-NULL.
@@ -4032,9 +5433,9 @@
  * more drastic measures (such as marking a file conflicted, or
  * bailing out of the update).
  *
- * If @a fetch_func is non-NULL, then use it (with @a fetch_baton) as
- * a fallback for retrieving repository files whenever 'copyfrom' args
- * are sent into editor->add_file().
+ * If @a external_func is non-NULL, then invoke it with @a external_baton
+ * whenever external changes are encountered, giving the callback a chance
+ * to store the external information for processing.
  *
  * If @a diff3_cmd is non-NULL, then use it as the diff3 command for
  * any merging; otherwise, use the built-in merge code.
@@ -4058,21 +5459,88 @@
  * If @a allow_unver_obstructions is TRUE, then allow unversioned
  * obstructions when adding a path.
  *
- * If @a depth is @c svn_depth_infinity, update fully recursively.
- * Else if it is @c svn_depth_immediates, update the uppermost
+ * If @a adds_as_modification is TRUE, a local addition at the same path
+ * as an incoming addition of the same node kind results in a normal node
+ * with a possible local modification, instead of a tree conflict.
+ *
+ * If @a depth is #svn_depth_infinity, update fully recursively.
+ * Else if it is #svn_depth_immediates, update the uppermost
  * directory, its file entries, and the presence or absence of
  * subdirectories (but do not descend into the subdirectories).
- * Else if it is @c svn_depth_files, update the uppermost directory
+ * Else if it is #svn_depth_files, update the uppermost directory
  * and its immediate file entries, but not subdirectories.
- * Else if it is @c svn_depth_empty, update exactly the uppermost
+ * Else if it is #svn_depth_empty, update exactly the uppermost
  * target, and don't touch its entries.
  *
- * If @a depth_is_sticky is set and @a depth is not @c
- * svn_depth_unknown, then in addition to updating PATHS, also set
+ * If @a depth_is_sticky is set and @a depth is not
+ * #svn_depth_unknown, then in addition to updating PATHS, also set
  * their sticky ambient depth value to @a depth.
  *
+ * If @a server_performs_filtering is TRUE, assume that the server handles
+ * the ambient depth filtering, so this doesn't have to be handled in the
+ * editor.
+ *
+ * If @a fetch_dirents_func is not NULL, the update editor may call this
+ * callback, when asked to perform a depth restricted update. It will do this
+ * before returning the editor to allow using the primary ra session for this.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_get_update_editor4(const svn_delta_editor_t **editor,
+                          void **edit_baton,
+                          svn_revnum_t *target_revision,
+                          svn_wc_context_t *wc_ctx,
+                          const char *anchor_abspath,
+                          const char *target_basename,
+                          svn_boolean_t use_commit_times,
+                          svn_depth_t depth,
+                          svn_boolean_t depth_is_sticky,
+                          svn_boolean_t allow_unver_obstructions,
+                          svn_boolean_t adds_as_modification,
+                          svn_boolean_t server_performs_filtering,
+                          svn_boolean_t clean_checkout,
+                          const char *diff3_cmd,
+                          const apr_array_header_t *preserved_exts,
+                          svn_wc_dirents_func_t fetch_dirents_func,
+                          void *fetch_dirents_baton,
+                          svn_wc_conflict_resolver_func2_t conflict_func,
+                          void *conflict_baton,
+                          svn_wc_external_update_t external_func,
+                          void *external_baton,
+                          svn_cancel_func_t cancel_func,
+                          void *cancel_baton,
+                          svn_wc_notify_func2_t notify_func,
+                          void *notify_baton,
+                          apr_pool_t *result_pool,
+                          apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_get_update_editor4, but uses access batons and relative
+ * path instead of a working copy context-abspath pair and
+ * svn_wc_traversal_info_t instead of an externals callback.  Also,
+ * @a fetch_func and @a fetch_baton are ignored.
+ *
+ * If @a ti is non-NULL, record traversal info in @a ti, for use by
+ * post-traversal accessors such as svn_wc_edited_externals().
+ *
+ * All locks, both those in @a anchor and newly acquired ones, will be
+ * released when the editor driver calls @c close_edit.
+ *
+ * Always sets @a adds_as_modification to TRUE, @a server_performs_filtering
+ * and @a clean_checkout to FALSE.
+ *
+ * Uses a svn_wc_conflict_resolver_func_t conflict resolver instead of a
+ * svn_wc_conflict_resolver_func2_t.
+ *
+ * This function assumes that @a diff3_cmd is path encoded. Later versions
+ * assume utf-8.
+ *
+ * Always passes a null dirent function.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_get_update_editor3(svn_revnum_t *target_revision,
                           svn_wc_adm_access_t *anchor,
@@ -4090,7 +5558,7 @@
                           svn_wc_get_file_t fetch_func,
                           void *fetch_baton,
                           const char *diff3_cmd,
-                          apr_array_header_t *preserved_exts,
+                          const apr_array_header_t *preserved_exts,
                           const svn_delta_editor_t **editor,
                           void **edit_baton,
                           svn_wc_traversal_info_t *ti,
@@ -4103,8 +5571,7 @@
  * conflict_func and baton set to NULL, @a fetch_func and baton set to
  * NULL, @a preserved_exts set to NULL, @a depth_is_sticky set to
  * FALSE, and @a depth set according to @a recurse: if @a recurse is
- * TRUE, pass @c svn_depth_infinity, if FALSE, pass @c
- * svn_depth_files.
+ * TRUE, pass #svn_depth_infinity, if FALSE, pass #svn_depth_files.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
@@ -4149,63 +5616,67 @@
                          apr_pool_t *pool);
 
 /**
- * A variant of svn_wc_get_update_editor().
+ * A variant of svn_wc_get_update_editor4().
  *
  * Set @a *editor and @a *edit_baton to an editor and baton for "switching"
  * a working copy to a new @a switch_url.  (Right now, this URL must be
  * within the same repository that the working copy already comes
  * from.)  @a switch_url must not be @c NULL.
  *
- * If @a ti is non-NULL, record traversal info in @a ti, for use by
- * post-traversal accessors such as svn_wc_edited_externals().
- *
- * @a anchor is an access baton, with a write lock, for the local path to the
- * working copy which will be used as the root of our editor.  Further
- * locks will be acquired if the switch creates new directories.  All
- * locks, both those in @a anchor and newly acquired ones, will be released
- * when the editor driver calls @c close_edit.
- *
- * @a target is the entry in @a anchor that will actually be updated, or
- * empty if all of @a anchor should be updated.
- *
- * The editor invokes @a notify_func with @a notify_baton as the switch
- * progresses, if @a notify_func is non-NULL.
- *
- * If @a cancel_func is non-NULL, it will be called with @a cancel_baton as
- * the switch progresses to determine if it should continue.
- *
- * If @a conflict_func is non-NULL, then invoke it with @a
- * conflict_baton whenever a conflict is encountered, giving the
- * callback a chance to resolve the conflict before the editor takes
- * more drastic measures (such as marking a file conflicted, or
- * bailing out of the switch).
+ * All other parameters behave as for svn_wc_get_update_editor4().
  *
- * If @a diff3_cmd is non-NULL, then use it as the diff3 command for
- * any merging; otherwise, use the built-in merge code.
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_get_switch_editor4(const svn_delta_editor_t **editor,
+                          void **edit_baton,
+                          svn_revnum_t *target_revision,
+                          svn_wc_context_t *wc_ctx,
+                          const char *anchor_abspath,
+                          const char *target_basename,
+                          const char *switch_url,
+                          svn_boolean_t use_commit_times,
+                          svn_depth_t depth,
+                          svn_boolean_t depth_is_sticky,
+                          svn_boolean_t allow_unver_obstructions,
+                          svn_boolean_t server_performs_filtering,
+                          const char *diff3_cmd,
+                          const apr_array_header_t *preserved_exts,
+                          svn_wc_dirents_func_t fetch_dirents_func,
+                          void *fetch_dirents_baton,
+                          svn_wc_conflict_resolver_func2_t conflict_func,
+                          void *conflict_baton,
+                          svn_wc_external_update_t external_func,
+                          void *external_baton,
+                          svn_cancel_func_t cancel_func,
+                          void *cancel_baton,
+                          svn_wc_notify_func2_t notify_func,
+                          void *notify_baton,
+                          apr_pool_t *result_pool,
+                          apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_get_switch_editor4, but uses access batons and relative
+ * path instead of a working copy context and svn_wc_traversal_info_t instead
+ * of an externals callback.
  *
- * @a preserved_exts is an array of filename patterns which, when
- * matched against the extensions of versioned files, determine for
- * which such files any related generated conflict files will preserve
- * the original file's extension as their own.  If a file's extension
- * does not match any of the patterns in @a preserved_exts (which is
- * certainly the case if @a preserved_exts is @c NULL or empty),
- * generated conflict files will carry Subversion's custom extensions.
+ * If @a ti is non-NULL, record traversal info in @a ti, for use by
+ * post-traversal accessors such as svn_wc_edited_externals().
  *
- * @a target_revision is a pointer to a revision location which, after
- * successful completion of the drive of this editor, will be
- * populated with the revision to which the working copy was updated.
+ * All locks, both those in @a anchor and newly acquired ones, will be
+ * released when the editor driver calls @c close_edit.
  *
- * If @a use_commit_times is TRUE, then all edited/added files will
- * have their working timestamp set to the last-committed-time.  If
- * FALSE, the working files will be touched with the 'now' time.
+ * Always sets @a server_performs_filtering to FALSE.
  *
- * @a depth and @a depth_is_sticky behave as for svn_wc_get_update_editor3().
+ * Uses a svn_wc_conflict_resolver_func_t conflict resolver instead of a
+ * svn_wc_conflict_resolver_func2_t.
  *
- * If @a allow_unver_obstructions is TRUE, then allow unversioned
- * obstructions when adding a path.
+ * This function assumes that @a diff3_cmd is path encoded. Later versions
+ * assume utf-8.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_get_switch_editor3(svn_revnum_t *target_revision,
                           svn_wc_adm_access_t *anchor,
@@ -4222,7 +5693,7 @@
                           svn_wc_conflict_resolver_func_t conflict_func,
                           void *conflict_baton,
                           const char *diff3_cmd,
-                          apr_array_header_t *preserved_exts,
+                          const apr_array_header_t *preserved_exts,
                           const svn_delta_editor_t **editor,
                           void **edit_baton,
                           svn_wc_traversal_info_t *ti,
@@ -4233,8 +5704,8 @@
  * @a allow_unver_obstructions parameter always set to FALSE,
  * @a preserved_exts set to NULL, @a conflict_func and baton set to NULL,
  * @a depth_is_sticky set to FALSE, and @a depth set according to @a
- * recurse: if @a recurse is TRUE, pass @c svn_depth_infinity, if
- * FALSE, pass @c svn_depth_files.
+ * recurse: if @a recurse is TRUE, pass #svn_depth_infinity, if
+ * FALSE, pass #svn_depth_files.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
  */
@@ -4258,7 +5729,7 @@
 
 /**
  * Similar to svn_wc_get_switch_editor2(), but takes an
- * @c svn_wc_notify_func_t instead.
+ * #svn_wc_notify_func_t instead.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
@@ -4280,8 +5751,14 @@
                          svn_wc_traversal_info_t *ti,
                          apr_pool_t *pool);
 
+/** @} */
+
+
+/**
+ * @defgroup svn_wc_properties Properties
+ * @{
+ */
 
-
 /* A word about the implementation of working copy property storage:
  *
  * Since properties are key/val pairs, you'd think we store them in
@@ -4301,11 +5778,28 @@
 
 /** Set @a *props to a hash table mapping <tt>char *</tt> names onto
  * <tt>svn_string_t *</tt> values for all the regular properties of
- * @a path.  Allocate the table, names, and values in @a pool.  If
- * the node has no properties, or does not exist in the working copy,
- * then an empty hash is returned.  @a adm_access is an access baton
- * set that contains @a path.
+ * @a local_abspath.  Allocate the table, names, and values in
+ * @a result_pool.  If the node has no properties, then an empty hash
+ * is returned.  Use @a wc_ctx to access the working copy, and @a
+ * scratch_pool for temporary allocations.
+ *
+ * If the node does not exist, #SVN_ERR_WC_PATH_NOT_FOUND is returned.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_prop_list2(apr_hash_t **props,
+                  svn_wc_context_t *wc_ctx,
+                  const char *local_abspath,
+                  apr_pool_t *result_pool,
+                  apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_prop_list2() but with a #svn_wc_adm_access_t /
+ * relative path parameter pair.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_prop_list(apr_hash_t **props,
                  const char *path,
@@ -4313,12 +5807,71 @@
                  apr_pool_t *pool);
 
 
-/** Set @a *value to the value of property @a name for @a path, allocating
- * @a *value in @a pool.  If no such prop, set @a *value to @c NULL.
- * @a name may be a regular or wc property; if it is an entry property,
- * return the error @c SVN_ERR_BAD_PROP_KIND.  @a adm_access is an access
- * baton set that contains @a path.
+/** Return the set of "pristine" properties for @a local_abspath.
+ *
+ * There are node states where properties do not make sense. For these
+ * cases, NULL will be returned in @a *props. Otherwise, a hash table
+ * will always be returned (but may be empty, indicating no properties).
+ *
+ * If the node is locally-added, then @a *props will be set to NULL since
+ * pristine properties are undefined. Note: if this addition is replacing a
+ * previously-deleted node, then the replaced node's properties are not
+ * available until the addition is reverted.
+ *
+ * If the node has been copied (from another node in the repository), then
+ * the pristine properties will correspond to those original properties.
+ *
+ * If the node is locally-deleted, these properties will correspond to
+ * the BASE node's properties, as checked-out from the repository. Note: if
+ * this deletion is a child of a copy, then the pristine properties will
+ * correspond to that copy's properties, not any potential BASE node. The
+ * BASE node's properties will not be accessible until the copy is reverted.
+ *
+ * Nodes that are incomplete, excluded, absent, or not present at the
+ * node's revision will return NULL in @a props.
+ *
+ * If the node is not versioned, SVN_ERR_WC_PATH_NOT_FOUND will be returned.
+ *
+ * @a props will be allocated in @a result_pool, and all temporary
+ * allocations will be performed in @a scratch_pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_get_pristine_props(apr_hash_t **props,
+                          svn_wc_context_t *wc_ctx,
+                          const char *local_abspath,
+                          apr_pool_t *result_pool,
+                          apr_pool_t *scratch_pool);
+
+
+/** Set @a *value to the value of property @a name for @a local_abspath,
+ * allocating @a *value in @a result_pool.  If no such prop, set @a *value
+ * to @c NULL. @a name may be a regular or wc property; if it is an
+ * entry property, return the error #SVN_ERR_BAD_PROP_KIND.  @a wc_ctx
+ * is used to access the working copy.
+ *
+ * If @a local_abspath is not a versioned path, return
+ * #SVN_ERR_WC_PATH_NOT_FOUND
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_prop_get2(const svn_string_t **value,
+                 svn_wc_context_t *wc_ctx,
+                 const char *local_abspath,
+                 const char *name,
+                 apr_pool_t *result_pool,
+                 apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_prop_get2(), but with a #svn_wc_adm_access_t /
+ * relative path parameter pair.
+ *
+ * When @a path is not versioned, set @a *value to NULL.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_prop_get(const svn_string_t **value,
                 const char *name,
@@ -4327,29 +5880,64 @@
                 apr_pool_t *pool);
 
 /**
- * Set property @a name to @a value for @a path, or if @a value is
- * NULL, remove property @a name from @a path.  @a adm_access is an
- * access baton with a write lock for @a path.
+ * Set property @a name to @a value for @a local_abspath, or if @a value is
+ * NULL, remove property @a name from @a local_abspath.  Use @a wc_ctx to
+ * access @a local_abspath.
  *
  * If @a skip_checks is TRUE, do no validity checking.  But if @a
  * skip_checks is FALSE, and @a name is not a valid property for @a
- * path, return an error, either @c SVN_ERR_ILLEGAL_TARGET (if the
- * property is not appropriate for @a path), or @c
- * SVN_ERR_BAD_MIME_TYPE (if @a name is "svn:mime-type", but @a value
+ * path, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the
+ * property is not appropriate for @a path), or
+ * #SVN_ERR_BAD_MIME_TYPE (if @a name is "svn:mime-type", but @a value
  * is not a valid mime-type).
  *
+ * @a depth follows the usual semeatic for depth.  If the property is a
+ * wc property, @a depth must be #svn_depth_empty.
+ *
  * @a name may be a wc property or a regular property; but if it is an
- * entry property, return the error @c SVN_ERR_BAD_PROP_KIND, even if
+ * entry property, return the error #SVN_ERR_BAD_PROP_KIND, even if
  * @a skip_checks is TRUE.
  *
+ * @a changelist_filter is an array of <tt>const char *</tt> changelist
+ * names, used as a restrictive filter on items whose properties are
+ * set; that is, don't set properties on any item unless it's a member
+ * of one of those changelists.  If @a changelist_filter is empty (or
+ * altogether @c NULL), no changelist filtering occurs.
+ *
+ * If @a cancel_func is non-NULL, then it will be invoked (with the
+ * @a cancel_baton value passed) during the processing of the property
+ * set (i.e. when @a depth indicates some amount of recursion).
+ *
  * For each file or directory operated on, @a notify_func will be called
  * with its path and the @a notify_baton.  @a notify_func may be @c NULL
  * if you are not interested in this information.
  *
- * Use @a pool for temporary allocation.
+ * Use @a scratch_pool for temporary allocation.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_prop_set4(svn_wc_context_t *wc_ctx,
+                 const char *local_abspath,
+                 const char *name,
+                 const svn_string_t *value,
+                 svn_depth_t depth,
+                 svn_boolean_t skip_checks,
+                 const apr_array_header_t *changelist_filter,
+                 svn_cancel_func_t cancel_func,
+                 void *cancel_baton,
+                 svn_wc_notify_func2_t notify_func,
+                 void *notify_baton,
+                 apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_prop_set4(), but with a #svn_wc_adm_access_t /
+ * relative path parameter pair, no @a depth parameter, no changelist
+ * filtering (for the depth-based property setting), and no cancelation.
  *
  * @since New in 1.6.
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_prop_set3(const char *name,
                  const svn_string_t *value,
@@ -4365,6 +5953,7 @@
  * Like svn_wc_prop_set3(), but without the notification callbacks.
  *
  * @since New in 1.2.
+ * @deprecated Provided for backwards compatibility with the 1.5 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -4416,23 +6005,23 @@
 svn_boolean_t
 svn_wc_is_entry_prop(const char *name);
 
-/** Callback type used by @c svn_wc_canonicalize_svn_prop.
+/** Callback type used by #svn_wc_canonicalize_svn_prop.
  *
  * If @a mime_type is non-null, it sets @a *mime_type to the value of
- * @c SVN_PROP_MIME_TYPE for the path passed to @c
- * svn_wc_canonicalize_svn_prop (allocated from @a pool).  If @a
+ * #SVN_PROP_MIME_TYPE for the path passed to
+ * #svn_wc_canonicalize_svn_prop (allocated from @a pool).  If @a
  * stream is non-null, it writes the contents of the file to @a
  * stream.
  *
- * (Currently, this is used if you are attempting to set the @c
- * SVN_PROP_EOL_STYLE property, to make sure that the value matches
+ * (Currently, this is used if you are attempting to set the
+ * #SVN_PROP_EOL_STYLE property, to make sure that the value matches
  * the mime type and contents.)
  */
-typedef svn_error_t *(*svn_wc_canonicalize_svn_prop_get_file_t)
-  (const svn_string_t **mime_type,
-   svn_stream_t *stream,
-   void *baton,
-   apr_pool_t *pool);
+typedef svn_error_t *(*svn_wc_canonicalize_svn_prop_get_file_t)(
+  const svn_string_t **mime_type,
+  svn_stream_t *stream,
+  void *baton,
+  apr_pool_t *pool);
 
 
 /** Canonicalize the value of an svn:* property @a propname with
@@ -4465,35 +6054,50 @@
                              void *getter_baton,
                              apr_pool_t *pool);
 
+/** @} */
 
 
-/* Diffs */
-
+/**
+ * @defgroup svn_wc_diffs Diffs
+ * @{
+ */
 
 /**
  * Return an @a editor/@a edit_baton for diffing a working copy against the
- * repository.
+ * repository. The editor is allocated in @a result_pool; temporary
+ * calculations are performed in @a scratch_pool.
  *
- * @a anchor/@a target represent the base of the hierarchy to be compared.
+ * This editor supports diffing either the actual files and properties in the
+ * working copy (when @a use_text_base is #FALSE), or the current pristine
+ * information (when @a use_text_base is #TRUE) against the editor driver.
  *
- * @a callbacks/@a callback_baton is the callback table to use when two
- * files are to be compared.
+ * @a anchor_abspath/@a target represent the base of the hierarchy to be
+ * compared. The diff callback paths will be relative to this path.
+ *
+ * Diffs will be reported as valid relpaths, with @a anchor_abspath being
+ * the root ("").
  *
- * If @a depth is @c svn_depth_empty, just diff exactly @a target or
- * @a anchor if @a target is empty.  If @c svn_depth_files then do the same
+ * @a callbacks/@a callback_baton is the callback table to use.
+ *
+ * If @a depth is #svn_depth_empty, just diff exactly @a target or
+ * @a anchor_path if @a target is empty.  If #svn_depth_files then do the same
  * and for top-level file entries as well (if any).  If
- * @c svn_depth_immediates, do the same as @c svn_depth_files but also diff
- * top-level subdirectories at @c svn_depth_empty.  If @c svn_depth_infinity,
- * then diff fully recursively.  In the latter case, @a anchor should be part
- * of an access baton set for the @a target hierarchy.
+ * #svn_depth_immediates, do the same as #svn_depth_files but also diff
+ * top-level subdirectories at #svn_depth_empty.  If #svn_depth_infinity,
+ * then diff fully recursively.
  *
  * @a ignore_ancestry determines whether paths that have discontinuous node
  * ancestry are treated as delete/add or as simple modifications.  If
  * @a ignore_ancestry is @c FALSE, then any discontinuous node ancestry will
  * result in the diff given as a full delete followed by an add.
  *
- * If @a use_text_base is TRUE, then compare the repository against
- * the working copy's text-base files, rather than the working files.
+ * @a show_copies_as_adds determines whether paths added with history will
+ * appear as a diff against their copy source, or whether such paths will
+ * appear as if they were newly added in their entirety.
+ *
+ * If @a use_git_diff_format is TRUE, copied paths will be treated as added
+ * if they weren't modified after being copied. This allows the callbacks
+ * to generate appropriate --git diff headers for such files.
  *
  * Normally, the difference from repository->working_copy is shown.
  * If @a reverse_order is TRUE, then show working_copy->repository diffs.
@@ -4501,14 +6105,52 @@
  * If @a cancel_func is non-NULL, it will be used along with @a cancel_baton
  * to periodically check if the client has canceled the operation.
  *
- * @a changelists is an array of <tt>const char *</tt> changelist
+ * @a changelist_filter is an array of <tt>const char *</tt> changelist
  * names, used as a restrictive filter on items whose differences are
  * reported; that is, don't generate diffs about any item unless
- * it's a member of one of those changelists.  If @a changelists is
+ * it's a member of one of those changelists.  If @a changelist_filter is
  * empty (or altogether @c NULL), no changelist filtering occurs.
  *
+  * If @a server_performs_filtering is TRUE, assume that the server handles
+ * the ambient depth filtering, so this doesn't have to be handled in the
+ * editor.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_get_diff_editor6(const svn_delta_editor_t **editor,
+                        void **edit_baton,
+                        svn_wc_context_t *wc_ctx,
+                        const char *anchor_abspath,
+                        const char *target,
+                        svn_depth_t depth,
+                        svn_boolean_t ignore_ancestry,
+                        svn_boolean_t show_copies_as_adds,
+                        svn_boolean_t use_git_diff_format,
+                        svn_boolean_t use_text_base,
+                        svn_boolean_t reverse_order,
+                        svn_boolean_t server_performs_filtering,
+                        const apr_array_header_t *changelist_filter,
+                        const svn_wc_diff_callbacks4_t *callbacks,
+                        void *callback_baton,
+                        svn_cancel_func_t cancel_func,
+                        void *cancel_baton,
+                        apr_pool_t *result_pool,
+                        apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_get_diff_editor6(), but with an access baton and relative
+ * path. @a server_performs_filtering always true and with a
+ * #svn_wc_diff_callbacks3_t instead of #svn_wc_diff_callbacks4_t,
+ * @a show_copies_as_adds, and @a use_git_diff_format set to @c FALSE.
+ *
+ * Diffs will be reported as below the relative path stored in @a anchor.
+ *
  * @since New in 1.6.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_get_diff_editor5(svn_wc_adm_access_t *anchor,
                         const char *target,
@@ -4520,14 +6162,14 @@
                         svn_boolean_t reverse_order,
                         svn_cancel_func_t cancel_func,
                         void *cancel_baton,
-                        const apr_array_header_t *changelists,
+                        const apr_array_header_t *changelist_filter,
                         const svn_delta_editor_t **editor,
                         void **edit_baton,
                         apr_pool_t *pool);
 
 /**
  * Similar to svn_wc_get_diff_editor5(), but with an
- * @c svn_wc_diff_callbacks2_t instead of @c svn_wc_diff_callbacks3_t.
+ * #svn_wc_diff_callbacks2_t instead of #svn_wc_diff_callbacks3_t.
  *
  * @deprecated Provided for backward compatibility with the 1.5 API.
  */
@@ -4543,15 +6185,15 @@
                         svn_boolean_t reverse_order,
                         svn_cancel_func_t cancel_func,
                         void *cancel_baton,
-                        const apr_array_header_t *changelists,
+                        const apr_array_header_t *changelist_filter,
                         const svn_delta_editor_t **editor,
                         void **edit_baton,
                         apr_pool_t *pool);
 
 /**
- * Similar to svn_wc_get_diff_editor4(), but with @a changelists
- * passed as @c NULL, and @a depth set to @c svn_depth_infinity if @a
- * recurse is TRUE, or @c svn_depth_files if @a recurse is FALSE.
+ * Similar to svn_wc_get_diff_editor4(), but with @a changelist_filter
+ * passed as @c NULL, and @a depth set to #svn_depth_infinity if @a
+ * recurse is TRUE, or #svn_depth_files if @a recurse is FALSE.
  *
  * @deprecated Provided for backward compatibility with the 1.4 API.
 
@@ -4576,7 +6218,7 @@
 
 /**
  * Similar to svn_wc_get_diff_editor3(), but with an
- * @c svn_wc_diff_callbacks_t instead of @c svn_wc_diff_callbacks2_t.
+ * #svn_wc_diff_callbacks_t instead of #svn_wc_diff_callbacks2_t.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
@@ -4622,46 +6264,82 @@
 /**
  * Compare working copy against the text-base.
  *
- * @a anchor/@a target represent the base of the hierarchy to be compared.
+ * @a target_abspath represents the base of the hierarchy to be compared.
  *
  * @a callbacks/@a callback_baton is the callback table to use when two
  * files are to be compared.
  *
- * If @a depth is @c svn_depth_empty, just diff exactly @a target or
- * @a anchor if @a target is empty.  If @c svn_depth_files then do the same
+ * If @a depth is #svn_depth_empty, just diff exactly @a target_path.
+ * If #svn_depth_files then do the same
  * and for top-level file entries as well (if any).  If
- * @c svn_depth_immediates, do the same as @c svn_depth_files but also diff
- * top-level subdirectories at @c svn_depth_empty.  If @c svn_depth_infinity,
- * then diff fully recursively.  In the latter case, @a anchor should be part
- * of an access baton set for the @a target hierarchy.
+ * #svn_depth_immediates, do the same as #svn_depth_files but also diff
+ * top-level subdirectories at #svn_depth_empty.  If #svn_depth_infinity,
+ * then diff fully recursively.
  *
  * @a ignore_ancestry determines whether paths that have discontinuous node
  * ancestry are treated as delete/add or as simple modifications.  If
  * @a ignore_ancestry is @c FALSE, then any discontinuous node ancestry will
  * result in the diff given as a full delete followed by an add.
  *
- * @a changelists is an array of <tt>const char *</tt> changelist
+ * @a show_copies_as_adds determines whether paths added with history will
+ * appear as a diff against their copy source, or whether such paths will
+ * appear as if they were newly added in their entirety.
+ *
+ * If @a use_git_diff_format is TRUE, copied paths will be treated as added
+ * if they weren't modified after being copied. This allows the callbacks
+ * to generate appropriate --git diff headers for such files.
+ *
+ * @a changelist_filter is an array of <tt>const char *</tt> changelist
  * names, used as a restrictive filter on items whose differences are
  * reported; that is, don't generate diffs about any item unless
- * it's a member of one of those changelists.  If @a changelists is
+ * it's a member of one of those changelists.  If @a changelist_filter is
  * empty (or altogether @c NULL), no changelist filtering occurs.
  *
- * @since New in 1.6.
+ * If @a cancel_func is non-NULL, invoke it with @a cancel_baton at various
+ * points during the operation.  If it returns an error (typically
+ * #SVN_ERR_CANCELLED), return that error immediately.
+ *
+ * @since New in 1.7.
  */
 svn_error_t *
-svn_wc_diff5(svn_wc_adm_access_t *anchor,
+svn_wc_diff6(svn_wc_context_t *wc_ctx,
+             const char *target_abspath,
+             const svn_wc_diff_callbacks4_t *callbacks,
+             void *callback_baton,
+             svn_depth_t depth,
+             svn_boolean_t ignore_ancestry,
+             svn_boolean_t show_copies_as_adds,
+             svn_boolean_t use_git_diff_format,
+             const apr_array_header_t *changelist_filter,
+             svn_cancel_func_t cancel_func,
+             void *cancel_baton,
+             apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_diff6(), but with a #svn_wc_diff_callbacks3_t argument
+ * instead of #svn_wc_diff_callbacks4_t, @a show_copies_as_adds,
+ * and @a use_git_diff_format set to * @c FALSE.
+ * It also doesn't allow specifying a cancel function.
+ *
+ * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
+svn_wc_diff5(svn_wc_adm_access_t *anchor,
              const char *target,
              const svn_wc_diff_callbacks3_t *callbacks,
              void *callback_baton,
              svn_depth_t depth,
              svn_boolean_t ignore_ancestry,
-             const apr_array_header_t *changelists,
+             const apr_array_header_t *changelist_filter,
              apr_pool_t *pool);
 
 /**
- * Similar to svn_wc_diff5(), but with a @c svn_wc_diff_callbacks2_t argument
- * instead of @c svn_wc_diff_callbacks3_t.
+ * Similar to svn_wc_diff5(), but with a #svn_wc_diff_callbacks2_t argument
+ * instead of #svn_wc_diff_callbacks3_t.
  *
+ * @since New in 1.5.
  * @deprecated Provided for backward compatibility with the 1.5 API.
  */
 SVN_DEPRECATED
@@ -4672,16 +6350,16 @@
              void *callback_baton,
              svn_depth_t depth,
              svn_boolean_t ignore_ancestry,
-             const apr_array_header_t *changelists,
+             const apr_array_header_t *changelist_filter,
              apr_pool_t *pool);
 
-
 /**
- * Similar to svn_wc_diff4(), but with @a changelists passed @c NULL,
- * and @a depth set to @c svn_depth_infinity if @a recurse is TRUE, or
- * @c svn_depth_files if @a recurse is FALSE.
+ * Similar to svn_wc_diff4(), but with @a changelist_filter passed @c NULL,
+ * and @a depth set to #svn_depth_infinity if @a recurse is TRUE, or
+ * #svn_depth_files if @a recurse is FALSE.
  *
- * @deprecated Provided for backward compatibility with the 1.2 API.
+ * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -4694,9 +6372,10 @@
              apr_pool_t *pool);
 
 /**
- * Similar to svn_wc_diff3(), but with a @c svn_wc_diff_callbacks_t argument
- * instead of @c svn_wc_diff_callbacks2_t.
+ * Similar to svn_wc_diff3(), but with a #svn_wc_diff_callbacks_t argument
+ * instead of #svn_wc_diff_callbacks2_t.
  *
+ * @since New in 1.1.
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
 SVN_DEPRECATED
@@ -4725,21 +6404,36 @@
             apr_pool_t *pool);
 
 
-/** Given a @a path to a file or directory under version control, discover
- * any local changes made to properties and/or the set of 'pristine'
- * properties.  @a adm_access is an access baton set for @a path.
+/** Given a @a local_abspath to a file or directory under version control,
+ * discover any local changes made to properties and/or the set of 'pristine'
+ * properties.  @a wc_ctx will be used to access the working copy.
  *
  * If @a propchanges is non- at c NULL, return these changes as an array of
- * @c svn_prop_t structures stored in @a *propchanges.  The structures and
- * array will be allocated in @a pool.  If there are no local property
- * modifications on @a path, then set @a *propchanges to @c NULL.
+ * #svn_prop_t structures stored in @a *propchanges.  The structures and
+ * array will be allocated in @a result_pool.  If there are no local property
+ * modifications on @a local_abspath, then set @a *propchanges will be empty.
  *
  * If @a original_props is non- at c NULL, then set @a *original_props to
  * hashtable (<tt>const char *name</tt> -> <tt>const svn_string_t *value</tt>)
  * that represents the 'pristine' property list of @a path.  This hashtable is
- * allocated in @a pool, and can be used to compare old and new values of
- * properties.
+ * allocated in @a result_pool.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ */
+svn_error_t *
+svn_wc_get_prop_diffs2(apr_array_header_t **propchanges,
+                       apr_hash_t **original_props,
+                       svn_wc_context_t *wc_ctx,
+                       const char *local_abspath,
+                       apr_pool_t *result_pool,
+                       apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_get_prop_diffs2(), but with a #svn_wc_adm_access_t /
+ * relative path parameter pair.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_get_prop_diffs(apr_array_header_t **propchanges,
                       apr_hash_t **original_props,
@@ -4747,6 +6441,13 @@
                       svn_wc_adm_access_t *adm_access,
                       apr_pool_t *pool);
 
+/** @} */
+
+
+/**
+ * @defgroup svn_wc_merging Merging
+ * @{
+ */
 
 /** The outcome of a merge carried out (or tried as a dry-run) by
  * svn_wc_merge()
@@ -4773,30 +6474,30 @@
 
 } svn_wc_merge_outcome_t;
 
-/** Given paths to three fulltexts, merge the differences between @a left
- * and @a right into @a merge_target.  (It may help to know that @a left,
- * @a right, and @a merge_target correspond to "OLDER", "YOURS", and "MINE",
- * respectively, in the diff3 documentation.)  Use @a pool for any
- * temporary allocation.
- *
- * @a adm_access is an access baton with a write lock for the directory
- * containing @a merge_target.
- *
- * This function assumes that @a left and @a right are in repository-normal
- * form (linefeeds, with keywords contracted); if necessary,
- * @a merge_target is temporarily converted to this form to receive the
- * changes, then translated back again.
+/** Given absolute paths to three fulltexts, merge the differences between
+ * @a left_abspath and @a right_abspath into @a target_abspath.
+ * It may help to know that @a left_abspath, @a right_abspath and @a
+ * target_abspath correspond to "OLDER", "YOURS", and "MINE",
+ * respectively, in the diff3 documentation.
+ *
+ * @a wc_ctx should contain a write lock for the directory containing @a
+ * target_abspath.
+ *
+ * This function assumes that @a left_abspath and @a right_abspath are
+ * in repository-normal form (linefeeds, with keywords contracted); if
+ * necessary, @a target_abspath is temporarily converted to this form to
+ * receive the changes, then translated back again.
  *
- * If @a merge_target is absent, or present but not under version
- * control, then set @a *merge_outcome to @c svn_wc_merge_no_merge and
+ * If @a target_abspath is absent, or present but not under version
+ * control, then set @a *merge_outcome to #svn_wc_merge_no_merge and
  * return success without merging anything.  (The reasoning is that if
  * the file is not versioned, then it is probably unrelated to the
  * changes being considered, so they should not be merged into it.)
  *
  * @a dry_run determines whether the working copy is modified.  When it
- * is @c FALSE the merge will cause @a merge_target to be modified, when it
- * is @c TRUE the merge will be carried out to determine the result but
- * @a merge_target will not be modified.
+ * is @c FALSE the merge will cause @a target_abspath to be modified, when
+ * it is @c TRUE the merge will be carried out to determine the result but
+ * @a target_abspath will not be modified.
  *
  * If @a diff3_cmd is non-NULL, then use it as the diff3 command for
  * any merging; otherwise, use the built-in merge code.  If @a
@@ -4811,30 +6512,73 @@
  * conflict callback cannot resolve the conflict, then:
  *
  *   * Put conflict markers around the conflicting regions in
- *     @a merge_target, labeled with @a left_label, @a right_label, and
+ *     @a target_abspath, labeled with @a left_label, @a right_label, and
  *     @a target_label.  (If any of these labels are @c NULL, default
  *     values will be used.)
  *
- *   * Copy @a left, @a right, and the original @a merge_target to unique
- *     names in the same directory as @a merge_target, ending with the
- *     suffixes ".LEFT_LABEL", ".RIGHT_LABEL", and ".TARGET_LABEL"
- *     respectively.
- *
- *   * Mark the entry for @a merge_target as "conflicted", and track the
- *     above mentioned backup files in the entry as well.
+ *   * Copy @a left_abspath, @a right_abspath, and the original @a
+ *     target_abspath to unique names in the same directory as @a
+ *     target_abspath, ending with the suffixes ".LEFT_LABEL", ".RIGHT_LABEL",
+ *     and ".TARGET_LABEL" respectively.
+ *
+ *   * Mark @a target_abspath as "text-conflicted", and track the above
+ *     mentioned backup files as well.
+ *
+ *   * If @a left_version and/or @a right_version are not NULL, provide
+ *     these values to the conflict handler and track these while the conflict
+ *     exists.
  *
  * Binary case:
  *
- *  If @a merge_target is a binary file, then no merging is attempted,
+ *  If @a target_abspath is a binary file, then no merging is attempted,
  *  the merge is deemed to be a conflict.  If @a dry_run is @c FALSE the
- *  working @a merge_target is untouched, and copies of @a left and
- *  @a right are created next to it using @a left_label and @a right_label.
- *  @a merge_target's entry is marked as "conflicted", and begins
- *  tracking the two backup files.  If @a dry_run is @c TRUE no files are
- *  changed.  The outcome of the merge is returned in @a *merge_outcome.
+ *  working @a target_abspath is untouched, and copies of @a left_abspath and
+ *  @a right_abspath are created next to it using @a left_label and
+ *  @a right_label. @a target_abspath is marked as "text-conflicted", and
+ *  begins tracking the two backup files and the version information.
+ *
+ * If @a dry_run is @c TRUE no files are changed.  The outcome of the merge
+ * is returned in @a *merge_outcome.
+ *
+ * Use @a scratch_pool for any temporary allocation.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_merge4(enum svn_wc_merge_outcome_t *merge_outcome,
+              svn_wc_context_t *wc_ctx,
+              const char *left_abspath,
+              const char *right_abspath,
+              const char *target_abspath,
+              const char *left_label,
+              const char *right_label,
+              const char *target_label,
+              const svn_wc_conflict_version_t *left_version,
+              const svn_wc_conflict_version_t *right_version,
+              svn_boolean_t dry_run,
+              const char *diff3_cmd,
+              const apr_array_header_t *merge_options,
+              const apr_array_header_t *prop_diff,
+              svn_wc_conflict_resolver_func2_t conflict_func,
+              void *conflict_baton,
+              svn_cancel_func_t cancel_func,
+              void *cancel_baton,
+              apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_merge4() but takes relative paths and an access
+ * baton. It doesn't support a cancel function or tracking origin version
+ * information.
+ *
+ * Uses a svn_wc_conflict_resolver_func_t conflict resolver instead of a
+ * svn_wc_conflict_resolver_func2_t.
+ *
+ * This function assumes that @a diff3_cmd is path encoded. Later versions
+ * assume utf-8.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_merge3(enum svn_wc_merge_outcome_t *merge_outcome,
               const char *left,
@@ -4852,6 +6596,7 @@
               void *conflict_baton,
               apr_pool_t *pool);
 
+
 /** Similar to svn_wc_merge3(), but with @a prop_diff, @a
  * conflict_func, @a conflict_baton set to NULL.
  *
@@ -4892,30 +6637,68 @@
              apr_pool_t *pool);
 
 
-/** Given a @a path under version control, merge an array of @a
+/** Given a @a local_abspath under version control, merge an array of @a
  * propchanges into the path's existing properties.  @a propchanges is
- * an array of @c svn_prop_t objects, and @a baseprops is a hash
+ * an array of #svn_prop_t objects, and @a baseprops is a hash
  * representing the original set of properties that @a propchanges is
- * working against.  @a adm_access is an access baton for the directory
- * containing @a path.
+ * working against.  @a wc_ctx contains a lock for @a local_abspath.
  *
- * If @a base_merge is @c FALSE only the working properties will be changed,
- * if it is @c TRUE both the base and working properties will be changed.
+ * Only the working properties will be changed.
  *
  * If @a state is non-NULL, set @a *state to the state of the properties
  * after the merge.
  *
  * If conflicts are found when merging working properties, they are
  * described in a temporary .prej file (or appended to an already-existing
- * .prej file), and the entry is marked "conflicted".  Base properties
- * are changed unconditionally, if @a base_merge is @c TRUE, they never result
- * in a conflict.
+ * .prej file), and the entry is marked "conflicted".
  *
- * If @a path is not under version control, return the error
- * SVN_ERR_UNVERSIONED_RESOURCE and don't touch anyone's properties.
+ * If @a cancel_func is non-NULL, invoke it with @a cancel_baton at various
+ * points during the operation.  If it returns an error (typically
+ * #SVN_ERR_CANCELLED), return that error immediately.
+ *
+ * If @a local_abspath is not under version control, return the error
+ * #SVN_ERR_WC_PATH_NOT_FOUND and don't touch anyone's properties.
+ *
+ * If @a local_abspath has a status in which it doesn't have properties
+ * (E.g. deleted) return the error SVN_ERR_WC_PATH_UNEXPECTED_STATUS.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_merge_props3(svn_wc_notify_state_t *state,
+                    svn_wc_context_t *wc_ctx,
+                    const char *local_abspath,
+                    const svn_wc_conflict_version_t *left_version,
+                    const svn_wc_conflict_version_t *right_version,
+                    apr_hash_t *baseprops,
+                    const apr_array_header_t *propchanges,
+                    svn_boolean_t dry_run,
+                    svn_wc_conflict_resolver_func2_t conflict_func,
+                    void *conflict_baton,
+                    svn_cancel_func_t cancel_func,
+                    void *cancel_baton,
+                    apr_pool_t *scratch_pool);
+
+
+/** Similar to svn_wc_merge_props3, but takes an access baton and relative
+ * path, no cancel_function, and no left and right version.
+ *
+ * This function has the @a base_merge parameter which (when TRUE) will
+ * apply @a propchanges to this node's pristine set of properties. This
+ * functionality is not supported on newer APIs -- pristine information
+ * should only be changed through an update editor drive.
+ *
+ * Uses a svn_wc_conflict_resolver_func_t conflict resolver instead of a
+ * svn_wc_conflict_resolver_func2_t.
+ *
+ * For compatibility reasons this function returns
+ * #SVN_ERR_UNVERSIONED_RESOURCE, when svn_wc_merge_props3 would return either
+ * #SVN_ERR_WC_PATH_NOT_FOUND or #SVN_ERR_WC_PATH_UNEXPECTED_STATUS.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_merge_props2(svn_wc_notify_state_t *state,
                     const char *path,
@@ -4933,8 +6716,7 @@
  * Same as svn_wc_merge_props2(), but with a @a conflict_func (and
  * baton) of NULL.
  *
- * @deprecated Provided for backward compatibility with the 1.3 API.
- *
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -4967,14 +6749,43 @@
                         svn_boolean_t dry_run,
                         apr_pool_t *pool);
 
+/** @} */
 
-/** Given a @a path to a wc file, return a stream to the @a contents of
- * the pristine copy of the file.  This is needed so clients can do
- * diffs.  If the WC has no text-base, return a @c NULL instead of a
- * stream.
+
+/** Given a @a path to a wc file, return in @a *contents a readonly stream to
+ * the pristine contents of the file that would serve as base content for the
+ * next commit. That means:
+ *
+ * When there is no change in node history scheduled, i.e. when there are only
+ * local text-mods, prop-mods or a delete, return the last checked-out or
+ * updated-/switched-to contents of the file.
+ *
+ * If the file is simply added or replaced (no copy-/move-here involved),
+ * set @a *contents to @c NULL.
+ *
+ * When the file has been locally copied-/moved-here, return the contents of
+ * 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
+ * @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).
+ *
+ * @since New in 1.7. */
+svn_error_t *
+svn_wc_get_pristine_contents2(svn_stream_t **contents,
+                              svn_wc_context_t *wc_ctx,
+                              const char *local_abspath,
+                              apr_pool_t *result_pool,
+                              apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_get_pristine_contents2, but takes no working copy
+ * context and a path that can be relative
  *
  * @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_get_pristine_contents(svn_stream_t **contents,
                              const char *path,
@@ -4982,10 +6793,20 @@
                              apr_pool_t *scratch_pool);
 
 
-/** Returns a path to the pristine copy of @a path. Should use
- * svn_wc_get_pristine_contents() instead.
+/** Set @a *pristine_path to the path of the "normal" pristine text file for
+ * the versioned file @a path.
+ *
+ * If @a path does not have a pristine text, set @a *pristine_path to a path where
+ * nothing exists on disk (in a directory that does exist).
+ *
+ * @note: Before version 1.7, the behaviour in that case was to provide the
+ * path where the pristine text *would be* if it were present.  The new
+ * behaviour is intended to provide backward compatibility for callers that
+ * open or test the provided path immediately, and not for callers that
+ * store the path for later use.
  *
  * @deprecated Provided for backwards compatibility with the 1.5 API.
+ * Callers should use svn_wc_get_pristine_contents() instead.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -4995,21 +6816,34 @@
 
 
 /**
- * Recurse from @a path, cleaning up unfinished log business.  Perform
- * necessary allocations in @a pool.  Any working copy locks under @a path
- * will be taken over and then cleared by this function.  If @a diff3_cmd
- * is non-NULL, then use it as the diff3 command for any merging; otherwise,
- * use the built-in merge code.
+ * Recurse from @a local_abspath, cleaning up unfinished log business.  Perform
+ * any temporary allocations in @a scratch_pool.  Any working copy locks under
+ * @a local_abspath will be taken over and then cleared by this function.
  *
- * WARNING: there is no mechanism that will protect locks that are still
- * being used.
+ * WARNING: there is no mechanism that will protect locks that are still being
+ * used.
  *
- * If @a cancel_func is non-NULL, invoke it with @a cancel_baton at
- * various points during the operation.  If it returns an error
- * (typically @c SVN_ERR_CANCELLED), return that error immediately.
+ * If @a cancel_func is non-NULL, invoke it with @a cancel_baton at various
+ * points during the operation.  If it returns an error (typically
+ * #SVN_ERR_CANCELLED), return that error immediately.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_cleanup3(svn_wc_context_t *wc_ctx,
+                const char *local_abspath,
+                svn_cancel_func_t cancel_func,
+                void *cancel_baton,
+                apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_cleanup3() but uses relative paths and creates its own
+ * swn_wc_context_t.
  *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_cleanup2(const char *path,
                 const char *diff3_cmd,
@@ -5032,6 +6866,54 @@
                void *cancel_baton,
                apr_pool_t *pool);
 
+/** Callback for retrieving a repository root for a url from upgrade.
+ *
+ * Called by svn_wc_upgrade() when no repository root and/or repository
+ * uuid are recorded in the working copy. For normal Subversion 1.5 and
+ * later working copies, this callback will not be used.
+ *
+ * @since New in 1.7.
+ */
+typedef svn_error_t * (*svn_wc_upgrade_get_repos_info_t)(
+                                    const char **repos_root,
+                                    const char **repos_uuid,
+                                    void *baton,
+                                    const char *url,
+                                    apr_pool_t *result_pool,
+                                    apr_pool_t *scratch_pool);
+
+
+/**
+ * Upgrade the working copy at @a local_abspath to the latest metadata
+ * storage format.  @a local_abspath should be an absolute path to the
+ * root of the working copy.
+ *
+ * If @a cancel_func is non-NULL, invoke it with @a cancel_baton at
+ * various points during the operation.  If it returns an error
+ * (typically #SVN_ERR_CANCELLED), return that error immediately.
+ *
+ * For each directory converted, @a notify_func will be called with
+ * in @a notify_baton action #svn_wc_notify_upgrade_path and as path
+ * the path of the upgraded directory. @a notify_func may be @c NULL
+ * if this notification is not needed.
+ *
+ * If the old working copy doesn't contain a repository root and/or
+ * repository uuid, @a repos_info_func (if non-NULL) will be called
+ * with @a repos_info_baton to provide the missing information.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_upgrade(svn_wc_context_t *wc_ctx,
+               const char *local_abspath,
+               svn_wc_upgrade_get_repos_info_t repos_info_func,
+               void *repos_info_baton,
+               svn_cancel_func_t cancel_func,
+               void *cancel_baton,
+               svn_wc_notify_func2_t notify_func,
+               void *notify_baton,
+               apr_pool_t *scratch_pool);
+
 
 /** Relocation validation callback typedef.
  *
@@ -5041,8 +6923,8 @@
  * @a baton is a closure object; it should be provided by the
  * implementation, and passed by the caller.
  *
- * If @a root is TRUE, then the implementation should make sure that @a url
- * is the repository root.  Else, it can be an URL inside the repository.
+ * If @a root_url is passed, then the implementation should make sure that
+ * @a url is the repository root.
  * @a pool may be used for temporary allocations.
  *
  * @since New in 1.5.
@@ -5053,8 +6935,11 @@
                                                        const char *root_url,
                                                        apr_pool_t *pool);
 
-/** Similar to @c svn_wc_relocation_validator3_t, but without
- * the @a root_url arguments.
+/** Similar to #svn_wc_relocation_validator3_t, but with
+ * the @a root argument.
+ *
+ * If @a root is TRUE, then the implementation should make sure that @a url
+ * is the repository root.  Else, it can be an URL inside the repository.
  *
  * @deprecated Provided for backwards compatibility with the 1.4 API.
  */
@@ -5064,7 +6949,7 @@
                                                        svn_boolean_t root,
                                                        apr_pool_t *pool);
 
-/** Similar to @c svn_wc_relocation_validator2_t, but without
+/** Similar to #svn_wc_relocation_validator2_t, but without
  * the @a root and @a pool arguments.  @a uuid will not be NULL in this version
  * of the function.
  *
@@ -5074,16 +6959,39 @@
                                                       const char *uuid,
                                                       const char *url);
 
-/** Change repository references at @a path that begin with @a from
- * to begin with @a to instead.  Perform necessary allocations in @a pool.
- * If @a recurse is TRUE, do so.  @a validator (and its baton,
- * @a validator_baton), will be called for each newly generated URL.
+/** Recursively change repository references at @a wcroot_abspath
+ * (which is the root directory of a working copy).  The pre-change
+ * URL should begin with @a from, and the post-change URL will begin
+ * with @a to.  @a validator (and its baton, @a validator_baton), will
+ * be called for the newly generated base URL and calculated repo
+ * root.
  *
- * @a adm_access is an access baton for the directory containing
- * @a path.
+ * @a wc_ctx is an working copy context.
+ *
+ * @a scratch_pool will be used for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_relocate4(svn_wc_context_t *wc_ctx,
+                 const char *wcroot_abspath,
+                 const char *from,
+                 const char *to,
+                 svn_wc_relocation_validator3_t validator,
+                 void *validator_baton,
+                 apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_relocate4(), but with a #svn_wc_adm_access_t /
+ * relative path parameter pair.
+ *
+ * @note As of the 1.7 API, @a path is required to be a working copy
+ * root directory, and @a recurse is required to be TRUE.
  *
  * @since New in 1.5.
+ * @deprecated Provided for limited backwards compatibility with the
+ * 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_relocate3(const char *path,
                  svn_wc_adm_access_t *adm_access,
@@ -5094,8 +7002,9 @@
                  void *validator_baton,
                  apr_pool_t *pool);
 
-/** Similar to svn_wc_relocate3(), but uses @c svn_wc_relocation_validator2_t.
+/** Similar to svn_wc_relocate3(), but uses #svn_wc_relocation_validator2_t.
  *
+ * @since New in 1.4.
  * @deprecated Provided for backwards compatibility with the 1.4 API. */
 SVN_DEPRECATED
 svn_error_t *
@@ -5108,7 +7017,7 @@
                  void *validator_baton,
                  apr_pool_t *pool);
 
-/** Similar to svn_wc_relocate2(), but uses @c svn_wc_relocation_validator_t.
+/** Similar to svn_wc_relocate2(), but uses #svn_wc_relocation_validator_t.
  *
  * @deprecated Provided for backwards compatibility with the 1.3 API. */
 SVN_DEPRECATED
@@ -5124,30 +7033,29 @@
 
 
 /**
- * Revert changes to @a path.  Perform necessary allocations in @a pool.
+ * Revert changes to @a local_abspath.  Perform necessary allocations in
+ * @a scratch_pool.
  *
- * @a parent_access is an access baton for the directory containing @a
- * path, unless @a path is a working copy root (as determined by @c
- * svn_wc_is_wc_root), in which case @a parent_access refers to @a
- * path itself.
+ * @a wc_ctx contains the necessary locks required for performing the
+ * operation.
  *
- * If @a depth is @c svn_depth_empty, revert just @a path (if a
+ * If @a depth is #svn_depth_empty, revert just @a path (if a
  * directory, then revert just the properties on that directory).
- * Else if @c svn_depth_files, revert @a path and any files
+ * Else if #svn_depth_files, revert @a path and any files
  * directly under @a path if it is directory.  Else if
- * @c svn_depth_immediates, revert all of the preceding plus
- * properties on immediate subdirectories; else if @c svn_depth_infinity,
+ * #svn_depth_immediates, revert all of the preceding plus
+ * properties on immediate subdirectories; else if #svn_depth_infinity,
  * revert path and everything under it fully recursively.
  *
- * @a changelists is an array of <tt>const char *</tt> changelist
+ * @a changelist_filter is an array of <tt>const char *</tt> changelist
  * names, used as a restrictive filter on items reverted; that is,
  * don't revert any item unless it's a member of one of those
- * changelists.  If @a changelists is empty (or altogether @c NULL),
+ * changelists.  If @a changelist_filter is empty (or altogether @c NULL),
  * no changelist filtering occurs.
  *
  * If @a cancel_func is non-NULL, call it with @a cancel_baton at
  * various points during the reversion process.  If it returns an
- * error (typically @c SVN_ERR_CANCELLED), return that error
+ * error (typically #SVN_ERR_CANCELLED), return that error
  * immediately.
  *
  * If @a use_commit_times is TRUE, then all reverted working-files
@@ -5159,16 +7067,34 @@
  * notification is not needed.
  *
  * If @a path is not under version control, return the error
- * SVN_ERR_UNVERSIONED_RESOURCE.
+ * #SVN_ERR_UNVERSIONED_RESOURCE.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_revert4(svn_wc_context_t *wc_ctx,
+               const char *local_abspath,
+               svn_depth_t depth,
+               svn_boolean_t use_commit_times,
+               const apr_array_header_t *changelist_filter,
+               svn_cancel_func_t cancel_func,
+               void *cancel_baton,
+               svn_wc_notify_func2_t notify_func,
+               void *notify_baton,
+               apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_revert4() but takes a relative path and access baton.
  *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_revert3(const char *path,
                svn_wc_adm_access_t *parent_access,
                svn_depth_t depth,
                svn_boolean_t use_commit_times,
-               const apr_array_header_t *changelists,
+               const apr_array_header_t *changelist_filter,
                svn_cancel_func_t cancel_func,
                void *cancel_baton,
                svn_wc_notify_func2_t notify_func,
@@ -5176,15 +7102,16 @@
                apr_pool_t *pool);
 
 /**
- * Similar to svn_wc_revert3(), but with @a changelists passed as @c
+ * Similar to svn_wc_revert3(), but with @a changelist_filter passed as @c
  * NULL, and @a depth set according to @a recursive: if @a recursive
- * is TRUE, @a depth is @c svn_depth_infinity; if FALSE, @a depth is
- * @c svn_depth_empty.
+ * is TRUE, @a depth is #svn_depth_infinity; if FALSE, @a depth is
+ * #svn_depth_empty.
  *
  * @note Most APIs map @a recurse==FALSE to @a depth==svn_depth_files;
  * revert is deliberately different.
  *
- * @deprecated Provided for backward compatibility with the 1.2 API.
+ * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -5199,7 +7126,7 @@
                apr_pool_t *pool);
 
 /**
- * Similar to svn_wc_revert2(), but takes an @c svn_wc_notify_func_t instead.
+ * Similar to svn_wc_revert2(), but takes an #svn_wc_notify_func_t instead.
  *
  * @deprecated Provided for backward compatibility with the 1.1 API.
  */
@@ -5215,6 +7142,25 @@
               void *notify_baton,
               apr_pool_t *pool);
 
+/**
+ * Restores a missing node, @a local_abspath using the @a wc_ctx. Records
+ * the new last modified time of the file for status processing.
+ *
+ * If @a use_commit_times is TRUE, then set restored files' timestamps
+ * to their last-commit-times.
+ *
+ * Returns SVN_ERROR_WC_PATH_NOT_FOUND if LOCAL_ABSPATH is not versioned and
+ * SVN_ERROR_WC_PATH_UNEXPECTED_STATUS if LOCAL_ABSPATH is in a status where
+ * it can't be restored.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_restore(svn_wc_context_t *wc_ctx,
+               const char *local_abspath,
+               svn_boolean_t use_commit_times,
+               apr_pool_t *scratch_pool);
+
 
 /* Tmp files */
 
@@ -5224,12 +7170,14 @@
  *
  * The flags will be <tt>APR_WRITE | APR_CREATE | APR_EXCL</tt> and
  * optionally @c APR_DELONCLOSE (if the @a delete_when argument is
- * set to @c svn_io_file_del_on_close).
+ * set to #svn_io_file_del_on_close).
  *
  * This means that as soon as @a fp is closed, the tmp file will vanish.
  *
  * @since New in 1.4
+ * @deprecated For compatibility with 1.6 API
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_create_tmp_file2(apr_file_t **fp,
                         const char **new_name,
@@ -5251,8 +7199,11 @@
                        apr_pool_t *pool);
 
 
-
-/* EOL conversion and keyword expansion. */
+/**
+ * @defgroup svn_wc_translate EOL conversion and keyword expansion
+ * @{
+ */
+
 
 /** Set @a xlated_path to a translated copy of @a src
  * or to @a src itself if no translation is necessary.
@@ -5261,30 +7212,36 @@
  * whose newlines and keywords are converted using the translation
  * as requested by @a flags.
  *
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
+ * if the client has canceled the operation.
+ *
  * When translating to the normal form, inconsistent eol styles will be
  * repaired when appropriate for the given setting.  When translating
  * from normal form, no EOL repair is performed (consistency is assumed).
  * This behaviour can be overridden by specifying
- * @c SVN_WC_TRANSLATE_FORCE_EOL_REPAIR.
+ * #SVN_WC_TRANSLATE_FORCE_EOL_REPAIR.
  *
  * The caller can explicitly request a new file to be returned by setting the
- * @c SVN_WC_TRANSLATE_FORCE_COPY flag in @a flags.
+ * #SVN_WC_TRANSLATE_FORCE_COPY flag in @a flags.
  *
  * This function is generally used to get a file that can be compared
  * meaningfully against @a versioned_file's text base, if
  * @c SVN_WC_TRANSLATE_TO_NF is specified, against @a versioned_file itself
  * if @c SVN_WC_TRANSLATE_FROM_NF is specified.
  *
- * Output files are created in the temp file area belonging to
- * @a versioned_file.  By default they will be deleted at pool cleanup.
- *
- * If @c SVN_WC_TRANSLATE_NO_OUTPUT_CLEANUP is specified, the default
- * pool cleanup handler to remove @a *xlated_path is not registered.
+ * If a new output file is created, it is created in the temp file area
+ * belonging to @a versioned_file.  By default it will be deleted at pool
+ * cleanup.  If @c SVN_WC_TRANSLATE_NO_OUTPUT_CLEANUP is specified, the
+ * default pool cleanup handler to remove @a *xlated_path is not registered.
+ * If the input file is returned as the output, its lifetime is not
+ * specified.
  *
  * If an error is returned, the effect on @a *xlated_path is undefined.
  *
  * @since New in 1.4
+ * @deprecated Provided for compatibility with the 1.6 API
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_translated_file2(const char **xlated_path,
                         const char *src,
@@ -5312,18 +7269,20 @@
  * @a path taking the file properties from @a versioned_file using
  * @a adm_access.
  *
- * When translation from normal form is requested
- * (@c SVN_WC_TRANSLATE_FROM_NF is specified in @a flags), @a path
- * is used as target path and stream read operations are not supported.
- * Conversely, if translation to normal form is requested
- * (@c SVN_WC_TRANSLATE_TO_NF is specified in @a flags), @a path is
- * used as source path and stream write operations are not supported.
+ * If @a flags includes #SVN_WC_TRANSLATE_FROM_NF, the stream will
+ * translate from Normal Form to working copy form while writing to
+ * @a path; stream read operations are not supported.
+ * Conversely, if @a flags includes #SVN_WC_TRANSLATE_TO_NF, the stream will
+ * translate from working copy form to Normal Form while reading from
+ * @a path; stream write operations are not supported.
  *
  * The @a flags are the same constants as those used for
- * svn_wc_translated_file().
+ * svn_wc_translated_file2().
  *
  * @since New in 1.5.
+ * @deprecated Provided for compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_translated_stream(svn_stream_t **stream,
                          const char *path,
@@ -5332,38 +7291,67 @@
                          apr_uint32_t flags,
                          apr_pool_t *pool);
 
-
-/* Text/Prop Deltas Using an Editor */
+/** @} */
 
 
-/** Send the local modifications for versioned file @a path (with
+/**
+ * @defgroup svn_wc_deltas Text/Prop Deltas Using an Editor
+ * @{
+ */
+
+/** Send the local modifications for versioned file @a local_abspath (with
  * matching @a file_baton) through @a editor, then close @a file_baton
- * afterwards.  Use @a pool for any temporary allocation and
- * @a adm_access as an access baton for @a path.
- *
- * This process creates a copy of @a path with keywords and eol
- * untranslated.  If @a tempfile is non-NULL, set @a *tempfile to the
- * path to this copy.  Do not clean up the copy; caller can do that.
- * If @a digest is non-NULL, put the MD5 checksum of the
- * temporary file into @a digest, which must point to @c APR_MD5_DIGESTSIZE
- * bytes of storage.  (The purpose of handing back the tmp copy is that
- * it is usually about to become the new text base anyway, but the
- * installation of the new text base is outside the scope of this
- * function.)
+ * afterwards.  Use @a scratch_pool for any temporary allocation.
  *
- * If @a fulltext, send the untranslated copy of @a path through @a editor
- * as full-text; else send it as svndiff against the current text base.
+ * If @a new_text_base_md5_checksum is non-NULL, set
+ * @a *new_text_base_md5_checksum to the MD5 checksum of (@a local_abspath
+ * translated to repository-normal form), allocated in @a result_pool.
+ *
+ * If @a new_text_base_sha1_checksum in non-NULL, store a copy of (@a
+ * local_abspath translated to repository-normal form) in the pristine text
+ * store, and set @a *new_text_base_sha1_checksum to its SHA-1 checksum.
+ *
+ * If @a fulltext, send the untranslated copy of @a local_abspath through
+ * @a editor as full-text; else send it as svndiff against the current text
+ * base.
  *
- * If sending a diff, and the recorded checksum for @a path's text-base
- * does not match the current actual checksum, then remove the tmp
+ * If sending a diff, and the recorded checksum for @a local_abspath's
+ * text-base does not match the current actual checksum, then remove the tmp
  * copy (and set @a *tempfile to NULL if appropriate), and return the
- * error @c SVN_ERR_WC_CORRUPT_TEXT_BASE.
+ * error #SVN_ERR_WC_CORRUPT_TEXT_BASE.
  *
  * @note This is intended for use with both infix and postfix
  * text-delta styled editor drivers.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_transmit_text_deltas3(const svn_checksum_t **new_text_base_md5_checksum,
+                             const svn_checksum_t **new_text_base_sha1_checksum,
+                             svn_wc_context_t *wc_ctx,
+                             const char *local_abspath,
+                             svn_boolean_t fulltext,
+                             const svn_delta_editor_t *editor,
+                             void *file_baton,
+                             apr_pool_t *result_pool,
+                             apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_transmit_text_deltas3(), but with a relative path
+ * and adm_access baton, and the checksum output is an MD5 digest instead of
+ * two svn_checksum_t objects.
+ *
+ * If @a tempfile is non-NULL, make a copy of @a path with keywords
+ * and eol translated to repository-normal form, and set @a *tempfile to the
+ * absolute path to this copy, allocated in @a result_pool.  The copy will
+ * be in the temporary-text-base directory.  Do not clean up the copy;
+ * caller can do that.  (The purpose of handing back the tmp copy is that it
+ * is usually about to become the new text base anyway, but the installation
+ * of the new text base is outside the scope of this function.)
+ *
  * @since New in 1.4.
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_transmit_text_deltas2(const char **tempfile,
                              unsigned char digest[],
@@ -5389,10 +7377,22 @@
                             apr_pool_t *pool);
 
 
-/** Given a @a path with its accompanying @a entry, transmit all local
- * property modifications using the appropriate @a editor method (in
- * conjunction with @a baton). @a adm_access is an access baton set
- * that contains @a path.  Use @a pool for all allocations.
+/** Given a @a local_abspath, transmit all local property
+ * modifications using the appropriate @a editor method (in conjunction
+ * with @a baton). Use @a scratch_pool for any temporary allocation.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_transmit_prop_deltas2(svn_wc_context_t *wc_ctx,
+                             const char *local_abspath,
+                             const svn_delta_editor_t *editor,
+                             void *baton,
+                             apr_pool_t *scratch_pool);
+
+
+/** Similar to svn_wc_transmit_prop_deltas2(), but with a relative path,
+ * adm_access baton and tempfile.
  *
  * If a temporary file remains after this function is finished, the
  * path to that file is returned in @a *tempfile (so the caller can
@@ -5400,7 +7400,10 @@
  *
  * @note Starting version 1.5, no tempfile will ever be returned
  *       anymore.  If @a *tempfile is passed, its value is set to @c NULL.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_transmit_prop_deltas(const char *path,
                             svn_wc_adm_access_t *adm_access,
@@ -5410,9 +7413,16 @@
                             const char **tempfile,
                             apr_pool_t *pool);
 
+/** @} */
+
+
+/**
+ * @defgroup svn_wc_ignore Ignoring unversioned files and directories
+ * @{
+ */
 
 /** Get the run-time configured list of ignore patterns from the
- * @c svn_config_t's in the @a config hash, and store them in @a *patterns.
+ * #svn_config_t's in the @a config hash, and store them in @a *patterns.
  * Allocate @a *patterns and its contents in @a pool.
  */
 svn_error_t *
@@ -5420,13 +7430,29 @@
                            apr_hash_t *config,
                            apr_pool_t *pool);
 
-/** Get the list of ignore patterns from the @c svn_config_t's in the
+/** Get the list of ignore patterns from the #svn_config_t's in the
  * @a config hash and the local ignore patterns from the directory
- * in @a adm_access, and store them in @a *patterns.
- * Allocate @a *patterns and its contents in @a pool.
+ * at @a local_abspath, using @a wc_ctx, and store them in @a *patterns.
+ * Allocate @a *patterns and its contents in @a result_pool, use @a
+ * scratch_pool for temporary allocations.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_get_ignores2(apr_array_header_t **patterns,
+                    svn_wc_context_t *wc_ctx,
+                    const char *local_abspath,
+                    apr_hash_t *config,
+                    apr_pool_t *result_pool,
+                    apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_get_ignores2(), but with a #svn_wc_adm_access_t
+ * parameter in place of #svn_wc_context_t and @c local_abspath parameters.
  *
  * @since New in 1.3.
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_get_ignores(apr_array_header_t **patterns,
                    apr_hash_t *config,
@@ -5440,30 +7466,71 @@
  */
 svn_boolean_t
 svn_wc_match_ignore_list(const char *str,
-                         apr_array_header_t *list,
+                         const apr_array_header_t *list,
                          apr_pool_t *pool);
 
-
-/** Add @a lock to the working copy for @a path.  @a adm_access must contain
- * a write lock for @a path.  If @a path is read-only, due to locking
- * properties, make it writable.  Perform temporary allocations in @a
- * pool. */
+/** @} */
+
+
+/**
+ * @defgroup svn_wc_repos_locks Repository locks
+ * @{
+ */
+
+/** Add @a lock to the working copy for @a local_abspath.  If @a
+ * local_abspath is read-only, due to locking properties, make it writable.
+ * Perform temporary allocations in @a scratch_pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_add_lock2(svn_wc_context_t *wc_ctx,
+                 const char *abspath,
+                 const svn_lock_t *lock,
+                 apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_add_lock2(), but with a #svn_wc_adm_access_t /
+ * relative path parameter pair.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * @since New in 1.2.
+ */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_add_lock(const char *path,
                 const svn_lock_t *lock,
                 svn_wc_adm_access_t *adm_access,
                 apr_pool_t *pool);
 
-/** Remove any lock from @a path.  @a adm_access must contain a
- * write-lock for @a path.  If @a path has a lock and the locking
- * so specifies, make the file read-only.  Don't return an error if @a
- * path didn't have a lock.  Perform temporary allocations in @a pool. */
+/** Remove any lock from @a local_abspath.  If @a local_abspath has a
+ * lock and the locking so specifies, make the file read-only.  Don't
+ * return an error if @a local_abspath didn't have a lock.  Perform temporary
+ * allocations in @a scratch_pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_remove_lock2(svn_wc_context_t *wc_ctx,
+                    const char *local_abspath,
+                    apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_wc_remove_lock2(), but with a #svn_wc_adm_access_t /
+ * relative path parameter pair.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ * @since New in 1.2.
+ */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_remove_lock(const char *path,
                    svn_wc_adm_access_t *adm_access,
                    apr_pool_t *pool);
 
-
+/** @} */
+
+
 /** A structure to report a summary of a working copy, including the
  * mix of revisions found within it, whether any parts are switched or
  * locally modified, and whether it is a sparse checkout.
@@ -5482,15 +7549,17 @@
   svn_boolean_t switched; /**< Is anything switched? */
   svn_boolean_t modified; /**< Is anything modified? */
 
-  /** Whether any WC paths are at a depth other than @c svn_depth_infinity.
+  /** Whether any WC paths are at a depth other than #svn_depth_infinity.
    * @since New in 1.5.
    */
   svn_boolean_t sparse_checkout;
 } svn_wc_revision_status_t;
 
-/** Set @a *result_p to point to a new @c svn_wc_revision_status_t structure
+/** Set @a *result_p to point to a new #svn_wc_revision_status_t structure
  * containing a summary of the revision range and status of the working copy
- * at @a wc_path (not including "externals").
+ * at @a local_abspath (not including "externals").  @a local_abspath must
+ * be absolute. Return SVN_ERR_WC_PATH_NOT_FOUND if @a local_abspath is not
+ * a working copy path.
  *
  * Set @a (*result_p)->min_rev and @a (*result_p)->max_rev respectively to the
  * lowest and highest revision numbers in the working copy.  If @a committed
@@ -5498,22 +7567,44 @@
  *
  * Set @a (*result_p)->switched to indicate whether any item in the WC is
  * switched relative to its parent.  If @a trail_url is non-NULL, use it to
- * determine if @a wc_path itself is switched.  It should be any trailing
- * portion of @a wc_path's expected URL, long enough to include any parts
+ * determine if @a local_abspath itself is switched.  It should be any trailing
+ * portion of @a local_abspath's expected URL, long enough to include any parts
  * that the caller considers might be changed by a switch.  If it does not
- * match the end of @a wc_path's actual URL, then report a "switched"
+ * match the end of @a local_abspath's actual URL, then report a "switched"
  * status.
  *
  * Set @a (*result_p)->modified to indicate whether any item is locally
  * modified.
  *
  * If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
- * if the client has cancelled the operation.
+ * if the client has canceled the operation.
  *
- * Allocate *result_p in @a pool.
+ * Allocate *result_p in @a result_pool, use @a scratch_pool for temporary
+ * allocations.
  *
- * @since New in 1.4
+ * @a wc_ctx should be a valid working copy context.
+ *
+ * @since New in 1.7
+ */
+svn_error_t *
+svn_wc_revision_status2(svn_wc_revision_status_t **result_p,
+                        svn_wc_context_t *wc_ctx,
+                        const char *local_abspath,
+                        const char *trail_url,
+                        svn_boolean_t committed,
+                        svn_cancel_func_t cancel_func,
+                        void *cancel_baton,
+                        apr_pool_t *result_pool,
+                        apr_pool_t *scratch_pool);
+
+
+/** Similar to svn_wc_revision_status2(), but with a (possibly) local
+ * path and no wc_ctx parameter.
+ *
+ * @since New in 1.4.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_revision_status(svn_wc_revision_status_t **result_p,
                        const char *wc_path,
@@ -5525,29 +7616,56 @@
 
 
 /**
- * Set @a path's entry's 'changelist' attribute to @a changelist iff
+ * Set @a local_abspath's 'changelist' attribute to @a changelist iff
  * @a changelist is not @c NULL; otherwise, remove any current
- * changelist assignment from @a path.  @a changelist may not be the
- * empty string.  @a adm_access is an access baton set that contains
- * @a path.
+ * changelist assignment from @a local_abspath.  @a changelist may not
+ * be the empty string.  Recurse to @a depth.
+ *
+ * @a changelist_filter is an array of <tt>const char *</tt> changelist
+ * names, used as a restrictive filter on items whose changelist
+ * assignments are adjusted; that is, don't tweak the changeset of any
+ * item unless it's currently a member of one of those changelists.
+ * If @a changelist_filter is empty (or altogether @c NULL), no changelist
+ * filtering occurs.
  *
  * If @a cancel_func is not @c NULL, call it with @a cancel_baton to
- * determine if the client has cancelled the operation.
+ * determine if the client has canceled the operation.
  *
  * If @a notify_func is not @c NULL, call it with @a notify_baton to
- * report the change (using notification types @c
- * svn_wc_notify_changelist_set and @c svn_wc_notify_changelist_clear).
+ * report the change (using notification types
+ * #svn_wc_notify_changelist_set and #svn_wc_notify_changelist_clear).
+ *
+ * Use @a scratch_pool for temporary allocations.
  *
  * @note For now, directories are NOT allowed to be associated with
  * changelists; there is confusion about whether they should behave
- * as depth-0 or depth-infinity objects.  If @a path is a directory,
- * return @c SVN_ERR_UNSUPPORTED_FEATURE.
+ * as depth-0 or depth-infinity objects.  If @a local_abspath is a directory,
+ * return an error.
  *
  * @note This metadata is purely a client-side "bookkeeping"
  * convenience, and is entirely managed by the working copy.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_set_changelist2(svn_wc_context_t *wc_ctx,
+                       const char *local_abspath,
+                       const char *changelist,
+                       svn_depth_t depth,
+                       const apr_array_header_t *changelist_filter,
+                       svn_cancel_func_t cancel_func,
+                       void *cancel_baton,
+                       svn_wc_notify_func2_t notify_func,
+                       void *notify_baton,
+                       apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_set_changelist2(), but with an access baton and
+ * relative path.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_set_changelist(const char *path,
                       const char *changelist,
@@ -5558,36 +7676,85 @@
                       void *notify_baton,
                       apr_pool_t *pool);
 
-/** Crop @a target according to @a depth.
+
+
+/**
+ * The callback type used by svn_client_get_changelists().
+ *
+ * On each invocation, @a path is a newly discovered member of the
+ * changelist, and @a baton is a private function closure.
+ *
+ * @since New in 1.5.
+ */
+typedef svn_error_t *(*svn_changelist_receiver_t) (void *baton,
+                                                   const char *path,
+                                                   const char *changelist,
+                                                   apr_pool_t *pool);
+
+
+/* @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_get_changelists(svn_wc_context_t *wc_ctx,
+                       const char *local_abspath,
+                       svn_depth_t depth,
+                       const apr_array_header_t *changelist_filter,
+                       svn_changelist_receiver_t callback_func,
+                       void *callback_baton,
+                       svn_cancel_func_t cancel_func,
+                       void *cancel_baton,
+                       apr_pool_t *scratch_pool);
+
+
+/** Crop @a local_abspath according to @a depth.
  *
  * Remove any item that exceeds the boundary of @a depth (relative to
- * @a target) from revision control.  Leave modified items behind
+ * @a local_abspath) from revision control.  Leave modified items behind
  * (unversioned), while removing unmodified ones completely.
  *
- * If @a target starts out with a shallower depth than @a depth, do not
- * upgrade it to @a depth (that would not be cropping); however, do
+ * @a depth can be svn_depth_empty, svn_depth_files or svn_depth_immediates.
+ * Excluding nodes is handled by svn_wc_exclude().
+ *
+ * If @a local_abspath starts out with a shallower depth than @a depth,
+ * do not upgrade it to @a depth (that would not be cropping); however, do
  * check children and crop them appropriately according to @a depth.
  *
- * Returns immediately with no error if @a target is not a directory,
- * or if @a depth is not restrictive (e.g., @c svn_depth_infinity).
+ * Returns immediately with an #SVN_ERR_UNSUPPORTED_FEATURE error if @a
+ * local_abspath is not a directory, or if @a depth is not restrictive
+ * (e.g., #svn_depth_infinity).
  *
- * @a anchor is an access baton, with a tree lock, for the local path to the
- * working copy which will be used as the root of this operation.  If
- * @a target is not empty, it represents an entry in the @a anchor path;
- * otherwise, the @a anchor path is the target.  @a target may not be
- * @c NULL.
+ * @a wc_ctx contains a tree lock, for the local path to the working copy
+ * which will be used as the root of this operation.
  *
  * If @a cancel_func is not @c NULL, call it with @a cancel_baton at
- * various points to determine if the client has cancelled the operation.
+ * various points to determine if the client has canceled the operation.
  *
  * If @a notify_func is not @c NULL, call it with @a notify_baton to
  * report changes as they are made.
  *
- * @note: svn_depth_exclude currently does nothing; passing it results
- * in immediate success with no side effects.
+ * @since New in 1.7
+ */
+svn_error_t *
+svn_wc_crop_tree2(svn_wc_context_t *wc_ctx,
+                  const char *local_abspath,
+                  svn_depth_t depth,
+                  svn_cancel_func_t cancel_func,
+                  void *cancel_baton,
+                  svn_wc_notify_func2_t notify_func,
+                  void *notify_baton,
+                  apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_crop_tree2(), but uses an access baton and target.
+ *
+ * svn_wc_crop_tree() also allows #svn_depth_exclude, which is now
+ * handled via svn_wc_exclude()
+ *
+ * @a target is a basename in @a anchor or "" for @a anchor itself.
  *
  * @since New in 1.6
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_crop_tree(svn_wc_adm_access_t *anchor,
                  const char *target,
@@ -5598,8 +7765,65 @@
                  void *cancel_baton,
                  apr_pool_t *pool);
 
-/** @} */
+/** Remove the local node for @a local_abspath from the working copy and
+ * add an excluded node placeholder in its place.
+ *
+ * This feature is only supported for unmodified nodes. An
+ * #SVN_ERR_UNSUPPORTED_FEATURE error is returned if the node can't be
+ * excluded in its current state.
+ *
+ * @a wc_ctx contains a tree lock, for the local path to the working copy
+ * which will be used as the root of this operation
+ *
+ * If @a notify_func is not @c NULL, call it with @a notify_baton to
+ * report changes as they are made.
+ *
+ * If @a cancel_func is not @c NULL, call it with @a cancel_baton at
+ * various points to determine if the client has canceled the operation.
+ *
+ *
+ * @since New in 1.7
+ */
+svn_error_t *
+svn_wc_exclude(svn_wc_context_t *wc_ctx,
+               const char *local_abspath,
+               svn_cancel_func_t cancel_func,
+               void *cancel_baton,
+               svn_wc_notify_func2_t notify_func,
+               void *notify_baton,
+               apr_pool_t *scratch_pool);
+
 
+/** @} */
+
+/**
+ * Set @a kind to the #svn_node_kind_t of @a abspath.  Use @a wc_ctx
+ * to access the working copy, and @a scratch_pool for all temporary
+ * allocations.
+ *
+ * If @a abspath is not under version control, set @a kind to #svn_node_none.
+ * If it is versioned but hidden and @a show_hidden is @c FALSE, also return
+ * #svn_node_none.
+ *
+ * ### What does hidden really mean?
+ * ### What happens when show_hidden is TRUE?
+ *
+ * If the node's info is incomplete, it may or may not have a known node kind
+ * set. If the kind is not known (yet), set @a kind to #svn_node_unknown.
+ * Otherwise return the node kind even though the node is marked incomplete.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_read_kind(svn_node_kind_t *kind,
+                 svn_wc_context_t *wc_ctx,
+                 const char *abspath,
+                 svn_boolean_t show_hidden,
+                 apr_pool_t *scratch_pool);
+
+
+/** @} */
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: trunk/GME/Include/subversion/svn_xml.h
==============================================================================
--- trunk/GME/Include/subversion/svn_xml.h	Tue May 21 12:33:00 2013	(r2201)
+++ trunk/GME/Include/subversion/svn_xml.h	Tue May 21 15:37:55 2013	(r2202)
@@ -1,17 +1,22 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2000-2006, 2008 CollabNet.  All rights reserved.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at http://subversion.tigris.org/license-1.html.
- * If newer versions of this license are posted there, you may use a
- * newer version instead, at your option.
- *
- * This software consists of voluntary contributions made by many
- * individuals.  For exact contribution history, see the revision
- * history and logs, available at http://subversion.tigris.org/.
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
  * ====================================================================
  * @endcopyright
  *
@@ -275,14 +280,26 @@
 /** Create an XML header and return it in @a *str.
  *
  * Fully-formed XML documents should start out with a header,
- * something like
- *         \<?xml version="1.0" encoding="utf-8"?\>
+ * something like <pre>
+ *         \<?xml version="1.0" encoding="UTF-8"?\>
+ * </pre>
  *
  * This function returns such a header.  @a *str must either be @c NULL, in
  * which case a new string is created, or it must point to an existing
- * string to be appended to.
+ * string to be appended to. @a encoding must either be NULL, in which case
+ * encoding information is omitted from the header, or must be the name of
+ * the encoding of the XML document, such as "UTF-8".
+ *
+ * @since New in 1.7.
  */
 void
+svn_xml_make_header2(svn_stringbuf_t **str,
+                     const char *encoding,
+                     apr_pool_t *pool);
+
+/* Like svn_xml_make_header2, but does not emit encoding information. */
+SVN_DEPRECATED
+void
 svn_xml_make_header(svn_stringbuf_t **str,
                     apr_pool_t *pool);
 

Modified: trunk/GME/Lib/libeay32.dll
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/libeay32.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/ssleay32.dll
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/ssleay32.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libapr-1.dll
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libapr-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libapr-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libapriconv-1.dll
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libapriconv-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libapriconv-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libaprutil-1.dll
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libaprutil-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libaprutil-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libsvn_fs_fs-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libsvn_fs_fs-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libsvn_fs_util-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libsvn_fs_util-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libsvn_ra_local-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libsvn_ra_local-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libsvn_ra_serf-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libsvn_ra_serf-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libsvn_ra_svn-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/libsvn_ra_svn-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/serf.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/serf.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_client-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_client-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_delta-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_delta-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_diff-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_diff-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_fs-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_fs-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_ra-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_ra-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_repos-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_repos-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_subr-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_subr-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_wc-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/svn_wc-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/xml.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/xml.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_debug/zlibstatD.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libapr-1.dll
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libapr-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libapr-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libapriconv-1.dll
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libapriconv-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libapriconv-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libaprutil-1.dll
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libaprutil-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libaprutil-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libsvn_fs_fs-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libsvn_fs_fs-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libsvn_fs_util-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libsvn_fs_util-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libsvn_ra_local-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libsvn_ra_local-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libsvn_ra_serf-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libsvn_ra_serf-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libsvn_ra_svn-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/libsvn_ra_svn-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/serf.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/serf.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_client-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_client-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_delta-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_delta-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_diff-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_diff-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_fs-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_fs-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_ra-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_ra-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_repos-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_repos-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_subr-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_subr-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_wc-1.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/svn_wc-1.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/xml.lib
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/xml.pdb
==============================================================================
Binary file (source and/or target). No diff available.

Modified: trunk/GME/Lib/subv_release/zlibstat.lib
==============================================================================
Binary file (source and/or target). No diff available.


More information about the gme-commit mailing list