[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 '<', '>', and '&'.
+ * Replace '\<', '\>', and '\&' with '\<', '\>', and '\&'.
* @param p The pool to allocate out of
* @param s The string to quote
- * @param quotes If quotes is true, then replace '"' with '"'.
+ * @param quotes If quotes is true, then replace '"' with '\"'.
* @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