[GME-commit] GMESRC/GME/Include/subversion mod_dav_svn.h, NONE, 1.1 svn_auth.h, NONE, 1.1 svn_base64.h, NONE, 1.1 svn_client.h, NONE, 1.1 svn_cmdline.h, NONE, 1.1 svn_config.h, NONE, 1.1 svn_ctype.h, NONE, 1.1 svn_dav.h, NONE, 1.1 svn_delta.h, NONE, 1.1 svn_diff.h, NONE, 1.1 svn_dso.h, NONE, 1.1 svn_error.h, NONE, 1.1 svn_error_codes.h, NONE, 1.1 svn_fs.h, NONE, 1.1 svn_hash.h, NONE, 1.1 svn_io.h, NONE, 1.1 svn_md5.h, NONE, 1.1 svn_nls.h, NONE, 1.1 svn_opt.h, NONE, 1.1 svn_path.h, NONE, 1.1 svn_pools.h, NONE, 1.1 svn_props.h, NONE, 1.1 svn_quoprint.h, NONE, 1.1 svn_ra.h, NONE, 1.1 svn_ra_svn.h, NONE, 1.1 svn_repos.h, NONE, 1.1 svn_sorts.h, NONE, 1.1 svn_string.h, NONE, 1.1 svn_subst.h, NONE, 1.1 svn_time.h, NONE, 1.1 svn_types.h, NONE, 1.1 svn_user.h, NONE, 1.1 svn_utf.h, NONE, 1.1 svn_version.h, NONE, 1.1 svn_wc.h, NONE, 1.1 svn_xml.h, NONE, 1.1
Log messages of CVS commits
gme-commit at list.isis.vanderbilt.edu
Wed Feb 13 12:41:15 CST 2008
- Previous message: [GME-commit] GMESRC/GME/Include/apr-util apr_anylock.h, NONE, 1.1 apr_base64.h, NONE, 1.1 apr_buckets.h, NONE, 1.1 apr_date.h, NONE, 1.1 apr_dbm.h, NONE, 1.1 apr_hooks.h, NONE, 1.1 apr_ldap.h, NONE, 1.1 apr_ldap.h.in, NONE, 1.1 apr_ldap.hnw, NONE, 1.1 apr_ldap.hw, NONE, 1.1 apr_ldap_url.h, NONE, 1.1 apr_md4.h, NONE, 1.1 apr_md5.h, NONE, 1.1 apr_optional.h, NONE, 1.1 apr_optional_hooks.h, NONE, 1.1 apr_queue.h, NONE, 1.1 apr_reslist.h, NONE, 1.1 apr_rmm.h, NONE, 1.1 apr_sdbm.h, NONE, 1.1 apr_sha1.h, NONE, 1.1 apr_strmatch.h, NONE, 1.1 apr_uri.h, NONE, 1.1 apr_uuid.h, NONE, 1.1 apr_xlate.h, NONE, 1.1 apr_xml.h, NONE, 1.1 apu.h, NONE, 1.1 apu.h.in, NONE, 1.1 apu.hnw, NONE, 1.1 apu.hw, NONE, 1.1 apu_compat.h, NONE, 1.1 apu_version.h, NONE, 1.1 apu_want.h, NONE, 1.1 apu_want.h.in, NONE, 1.1 apu_want.hnw, NONE, 1.1 apu_want.hw, NONE, 1.1
- Next message: [GME-commit] GMESRC/GME/Lib libapr.dll, NONE, 1.1 libapr.lib, NONE, 1.1 libapr.pdb, NONE, 1.1 libaprD.dll, NONE, 1.1 libaprD.lib, NONE, 1.1 libapriconv.dll, NONE, 1.1 libapriconv.lib, NONE, 1.1 libapriconv.pdb, NONE, 1.1 libapriconvD.dll, NONE, 1.1 libapriconvD.lib, NONE, 1.1 libaprutil.dll, NONE, 1.1 libaprutil.lib, NONE, 1.1 libaprutil.pdb, NONE, 1.1 libaprutilD.dll, NONE, 1.1 libaprutilD.lib, NONE, 1.1 libeay32.dll, NONE, 1.1 libeay32.lib, NONE, 1.1 libeay32D.dll, NONE, 1.1 libeay32D.lib, NONE, 1.1 libneon.lib, NONE, 1.1 libneonD.lib, NONE, 1.1 libsvn_client-1.lib, NONE, 1.1 libsvn_client-1D.lib, NONE, 1.1 libsvn_delta-1.lib, NONE, 1.1 libsvn_delta-1D.lib, NONE, 1.1 libsvn_diff-1.lib, NONE, 1.1 libsvn_diff-1D.lib, NONE, 1.1 libsvn_fs-1.lib, NONE, 1.1 libsvn_fs-1D.lib, NONE, 1.1 libsvn_fs_fs-1.lib, NONE, 1.1 libsvn_fs_fs-1D.lib, NONE, 1.1 libsvn_ra-1.lib, NONE, 1.1 libsvn_ra-1D.lib, NONE, 1.1 libsvn_ra_dav-1.lib, NONE, 1.1 libsvn_ra_dav-1D.lib, NONE, 1.1 libsvn_ra_local-1.lib, NONE, 1.1 libsvn_ra_local-1D.lib, NONE, 1.1 libsvn_ra_svn-1.lib, NONE, 1.1 l ibsvn_ra_svn-1D.lib, NONE, 1.1 libsvn_repos-1.lib, NONE, 1.1 libsvn_repos-1D.lib, NONE, 1.1 libsvn_subr-1.lib, NONE, 1.1 libsvn_subr-1D.lib, NONE, 1.1 libsvn_wc-1.lib, NONE, 1.1 libsvn_wc-1D.lib, NONE, 1.1 serf.lib, NONE, 1.1 serfD.lib, NONE, 1.1 ssleay32.dll, NONE, 1.1 ssleay32.lib, NONE, 1.1 ssleay32D.dll, NONE, 1.1 ssleay32D.lib, NONE, 1.1 xml.lib, NONE, 1.1 xmlD.lib, NONE, 1.1 zlibstat.lib, NONE, 1.1 zlibstatD.lib, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /project/gme-repository/GMESRC/GME/Include/subversion
In directory escher:/tmp/cvs-serv7037
Added Files:
mod_dav_svn.h svn_auth.h svn_base64.h svn_client.h
svn_cmdline.h svn_config.h svn_ctype.h svn_dav.h svn_delta.h
svn_diff.h svn_dso.h svn_error.h svn_error_codes.h svn_fs.h
svn_hash.h svn_io.h svn_md5.h svn_nls.h svn_opt.h svn_path.h
svn_pools.h svn_props.h svn_quoprint.h svn_ra.h svn_ra_svn.h
svn_repos.h svn_sorts.h svn_string.h svn_subst.h svn_time.h
svn_types.h svn_user.h svn_utf.h svn_version.h svn_wc.h
svn_xml.h
Log Message:
Subversion library include files.
CVS User: Zoltan Molnar, ISIS (zolmol)
--- NEW FILE: svn_quoprint.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_quoprint.h
* @brief quoted-printable encoding and decoding functions.
*/
#ifndef SVN_QUOPRINT_H
#define SVN_QUOPRINT_H
#include "svn_io.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Return a writable generic stream which will encode binary data in
* quoted-printable 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.
*/
svn_stream_t *svn_quoprint_encode(svn_stream_t *output, apr_pool_t *pool);
/** Return a writable generic stream which will decode binary data in
* quoted-printable format and write the decoded data to @a output. Be
* sure to close the stream when done writing in order to squeeze out
* the last bit of encoded data.
*/
svn_stream_t *svn_quoprint_decode(svn_stream_t *output, apr_pool_t *pool);
/** Simpler interface for encoding quoted-printable data assuming we have all
* of it present at once. The returned string will be allocated from @a pool.
*/
svn_stringbuf_t *svn_quoprint_encode_string(svn_stringbuf_t *str,
apr_pool_t *pool);
/** Simpler interface for decoding quoted-printable data assuming we have all
* of it present at once. The returned string will be allocated from @a pool.
*/
svn_stringbuf_t *svn_quoprint_decode_string(svn_stringbuf_t *str,
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_QUOPRINT_H */
--- NEW FILE: svn_xml.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_xml.h
* @brief XML code shared by various Subversion libraries.
*/
#ifndef SVN_XML_H
#define SVN_XML_H
#include <apr.h>
#include <apr_pools.h>
#include <apr_hash.h>
#include "svn_error.h"
#include "svn_string.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** The namespace all Subversion XML uses. */
#define SVN_XML_NAMESPACE "svn:"
/** Used as style argument to svn_xml_make_open_tag() and friends. */
enum svn_xml_open_tag_style {
/** <tag ...> */
svn_xml_normal = 1,
/** <tag ...>, no cosmetic newline */
svn_xml_protect_pcdata,
/** <tag .../> */
svn_xml_self_closing
};
/** Determine if a string of character @a data of length @a len is a
* safe bet for use with the svn_xml_escape_* functions found in this
* header.
*
* Return @c TRUE if it is, @c FALSE otherwise.
*
* Essentially, this function exists to determine whether or not
* simply running a string of bytes through the Subversion XML escape
* routines will produce legitimate XML. It should only be necessary
* for data which might contain bytes that cannot be safely encoded
* into XML (certain control characters, for example).
*/
svn_boolean_t svn_xml_is_xml_safe(const char *data,
apr_size_t len);
/** Create or append in @a *outstr an xml-escaped version of @a string,
* suitable for output as character data.
*
* If @a *outstr is @c NULL, store a new stringbuf, else append to the
* existing stringbuf there.
*/
void svn_xml_escape_cdata_stringbuf(svn_stringbuf_t **outstr,
const svn_stringbuf_t *string,
apr_pool_t *pool);
/** Same as svn_xml_escape_cdata_stringbuf(), but @a string is an
* @c svn_string_t.
*/
void svn_xml_escape_cdata_string(svn_stringbuf_t **outstr,
const svn_string_t *string,
apr_pool_t *pool);
/** Same as svn_xml_escape_cdata_stringbuf(), but @a string is a
* null-terminated C string.
*/
void svn_xml_escape_cdata_cstring(svn_stringbuf_t **outstr,
const char *string,
apr_pool_t *pool);
/** Create or append in @a *outstr an xml-escaped version of @a string,
* suitable for output as an attribute value.
*
* If @a *outstr is @c NULL, store a new stringbuf, else append to the
* existing stringbuf there.
*/
void svn_xml_escape_attr_stringbuf(svn_stringbuf_t **outstr,
const svn_stringbuf_t *string,
apr_pool_t *pool);
/** Same as svn_xml_escape_attr_stringbuf(), but @a string is an
* @c svn_string_t.
*/
void svn_xml_escape_attr_string(svn_stringbuf_t **outstr,
const svn_string_t *string,
apr_pool_t *pool);
/** Same as svn_xml_escape_attr_stringbuf(), but @a string is a
* null-terminated C string.
*/
void svn_xml_escape_attr_cstring(svn_stringbuf_t **outstr,
const char *string,
apr_pool_t *pool);
/**
* Return UTF-8 string @a string if it contains no characters that are
* unrepresentable in XML. Else, return a copy of @a string,
* allocated in @a pool, with each unrepresentable character replaced
* by "?\uuu", where "uuu" is the three-digit unsigned decimal value
* of that character.
*
* Neither the input nor the output need be valid XML; however, the
* output can always be safely XML-escaped.
*
* @note The current implementation treats all Unicode characters as
* representable, except for most ASCII control characters (the
* exceptions being CR, LF, and TAB, which are valid in XML). There
* may be other UTF-8 characters that are invalid in XML; see
* http://subversion.tigris.org/servlets/ReadMsg?list=dev&msgNo=90591
* and its thread for details.
*
* @since New in 1.2.
*/
const char *svn_xml_fuzzy_escape(const char *string,
apr_pool_t *pool);
/*---------------------------------------------------------------*/
/* Generalized Subversion XML Parsing */
/** A generalized Subversion XML parser object */
typedef struct svn_xml_parser_t svn_xml_parser_t;
typedef void (*svn_xml_start_elem)(void *baton,
const char *name,
const char **atts);
typedef void (*svn_xml_end_elem)(void *baton, const char *name);
/* data is not NULL-terminated. */
typedef void (*svn_xml_char_data)(void *baton,
const char *data,
apr_size_t len);
/** Create a general Subversion XML parser */
svn_xml_parser_t *svn_xml_make_parser(void *baton,
svn_xml_start_elem start_handler,
svn_xml_end_elem end_handler,
svn_xml_char_data data_handler,
apr_pool_t *pool);
/** Free a general Subversion XML parser */
void svn_xml_free_parser(svn_xml_parser_t *svn_parser);
/** Push @a len bytes of xml data in @a buf at @a svn_parser.
*
* If this is the final push, @a is_final must be set.
*
* An error will be returned if there was a syntax problem in the XML,
* or if any of the callbacks set an error using
* svn_xml_signal_bailout().
*
* If an error is returned, the @c svn_xml_parser_t will have been freed
* automatically, so the caller should not call svn_xml_free_parser().
*/
svn_error_t *svn_xml_parse(svn_xml_parser_t *parser,
const char *buf,
apr_size_t len,
svn_boolean_t is_final);
/** The way to officially bail out of xml parsing.
*
* Store @a error in @a svn_parser and set all expat callbacks to @c NULL.
*/
void svn_xml_signal_bailout(svn_error_t *error,
svn_xml_parser_t *svn_parser);
/*** Helpers for dealing with the data Expat gives us. ***/
/** Return the value associated with @a name in expat attribute array @a atts,
* else return @c NULL.
*
* (There could never be a @c NULL attribute value in the XML,
* although the empty string is possible.)
*
* @a atts is an array of c-strings: even-numbered indexes are names,
* odd-numbers hold values. If all is right, it should end on an
* even-numbered index pointing to @c NULL.
*/
const char *svn_xml_get_attr_value(const char *name, const char **atts);
/* Converting between Expat attribute lists and APR hash tables. */
/** Create an attribute hash from @c va_list @a ap.
*
* The contents of @a ap are alternating <tt>char *</tt> keys and
* <tt>char *</tt> vals, terminated by a final @c NULL falling on an
* even index (zero-based).
*/
apr_hash_t *svn_xml_ap_to_hash(va_list ap, apr_pool_t *pool);
/** Create a hash that corresponds to Expat xml attribute list @a atts.
*
* The hash's keys and values are <tt>char *</tt>'s.
*
* @a atts may be null, in which case you just get an empty hash back
* (this makes life more convenient for some callers).
*/
apr_hash_t *svn_xml_make_att_hash(const char **atts, apr_pool_t *pool);
/** Like svn_xml_make_att_hash(), but takes a hash and preserves any
* key/value pairs already in it.
*/
void svn_xml_hash_atts_preserving(const char **atts,
apr_hash_t *ht,
apr_pool_t *pool);
/** Like svn_xml_make_att_hash(), but takes a hash and overwrites
* key/value pairs already in it that also appear in @a atts.
*/
void svn_xml_hash_atts_overlaying(const char **atts,
apr_hash_t *ht,
apr_pool_t *pool);
/* Printing XML */
/** 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"?\>
*
* 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.
*/
void svn_xml_make_header(svn_stringbuf_t **str, apr_pool_t *pool);
/** Store a new xml tag @a tagname in @a *str.
*
* If @a str is @c NULL, allocate @a *str in @a pool; else append the new
* tag to @a *str, allocating in @a str's pool
*
* Take the tag's attributes from varargs, a null-terminated list of
* alternating <tt>char *</tt> key and <tt>char *</tt> val. Do xml-escaping
* on each val.
*
* @a style is one of the enumerated styles in @c svn_xml_open_tag_style.
*/
void svn_xml_make_open_tag(svn_stringbuf_t **str,
apr_pool_t *pool,
enum svn_xml_open_tag_style style,
const char *tagname,
...);
/** Like svn_xml_make_open_tag(), but takes a @c va_list instead of being
* variadic.
*/
void svn_xml_make_open_tag_v(svn_stringbuf_t **str,
apr_pool_t *pool,
enum svn_xml_open_tag_style style,
const char *tagname,
va_list ap);
/** Like svn_xml_make_open_tag(), but takes a hash table of attributes
* (<tt>char *</tt> keys mapping to <tt>char *</tt> values).
*
* You might ask, why not just provide svn_xml_make_tag_atts()?
*
* The reason is that a hash table is the most natural interface to an
* attribute list; the fact that Expat uses <tt>char **</tt> atts instead is
* certainly a defensible implementation decision, but since we'd have
* to have special code to support such lists throughout Subversion
* anyway, we might as well write that code for the natural interface
* (hashes) and then convert in the few cases where conversion is
* needed. Someday it might even be nice to change expat-lite to work
* with apr hashes.
*
* See conversion functions svn_xml_make_att_hash() and
* svn_xml_make_att_hash_overlaying(). Callers should use those to
* convert Expat attr lists into hashes when necessary.
*/
void svn_xml_make_open_tag_hash(svn_stringbuf_t **str,
apr_pool_t *pool,
enum svn_xml_open_tag_style style,
const char *tagname,
apr_hash_t *attributes);
/** Makes a close tag. */
void svn_xml_make_close_tag(svn_stringbuf_t **str,
apr_pool_t *pool,
const char *tagname);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_XML_H */
--- NEW FILE: svn_sorts.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_sorts.h
* @brief all sorts of sorts.
*/
#ifndef SVN_SORTS_H
#define SVN_SORTS_H
#include <apr_pools.h>
#include <apr_tables.h> /* for apr_array_header_t */
#include <apr_hash.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** This structure is used to hold a key/value from a hash table.
* @note Private. For use by Subversion's own code only. See issue #1644.
*/
typedef struct svn_sort__item_t {
/** pointer to the key */
const void *key;
/** size of the key */
apr_ssize_t klen;
/** pointer to the value */
void *value;
} svn_sort__item_t;
/** Compare two @c svn_sort__item_t's, returning an integer greater than,
* equal to, or less than 0, according to whether the key of @a a is
* greater than, equal to, or less than the key of @a b as determined
* by comparing them with svn_path_compare_paths().
*
* The key strings must be null-terminated, even though klen does not
* include the terminator.
*
* This is useful for converting a hash into a sorted
* @c apr_array_header_t. For example, to convert hash @a hsh to a sorted
* array, do this:
*
*<pre> apr_array_header_t *hdr;
* hdr = svn_sort__hash (hsh, @c svn_sort_compare_items_as_paths, pool);</pre>
*/
int svn_sort_compare_items_as_paths(const svn_sort__item_t *a,
const svn_sort__item_t *b);
/** Compare two @c svn_sort__item_t's, returning an integer greater than,
* equal to, or less than 0, according as @a a is greater than, equal to,
* or less than @a b according to a lexical key comparison. The keys are
* not required to be zero-terminated.
*/
int svn_sort_compare_items_lexically(const svn_sort__item_t *a,
const svn_sort__item_t *b);
/** Compare two @c svn_revnum_t's, returning an integer greater than, equal
* to, or less than 0, according as @a b is greater than, equal to, or less
* than @a a. Note that this sorts newest revision to oldest (IOW, descending
* order).
*
* This function is compatible for use with qsort().
*
* This is useful for converting an array of revisions into a sorted
* @c apr_array_header_t. You are responsible for detecting, preventing or
* removing duplicates.
*/
int svn_sort_compare_revisions(const void *a, const void *b);
/**
* Compare two @c const char * paths, returning an integer greater
* than, equal to, or less than 0, using the same comparison rules as
* are used by svn_path_compare_paths().
*
* This function is compatible for use with qsort().
*
* @since New in 1.1.
*/
int svn_sort_compare_paths(const void *a, const void *b);
/** Sort @a ht according to its keys, return an @c apr_array_header_t
* containing @c svn_sort__item_t structures holding those keys and values
* (i.e. for each @c svn_sort__item_t @a item in the returned array,
* @a item->key and @a item->size are the hash key, and @a item->data points to
* the hash value).
*
* Storage is shared with the original hash, not copied.
*
* @a comparison_func should take two @c svn_sort__item_t's and return an
* integer greater than, equal to, or less than 0, according as the first item
* is greater than, equal to, or less than the second.
*
* @note Private. For use by Subversion's own code only. See issue #1644.
*
* @note This function and the @c svn_sort__item_t should go over to APR.
*/
apr_array_header_t *
svn_sort__hash(apr_hash_t *ht,
int (*comparison_func)(const svn_sort__item_t *,
const svn_sort__item_t *),
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_SORTS_H */
--- NEW FILE: svn_time.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_time.h
* @brief Time/date utilities
*/
#ifndef SVN_TIME_H
#define SVN_TIME_H
#include <apr_pools.h>
#include <apr_time.h>
#include "svn_error.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Convert @a when to a <tt>const char *</tt> representation allocated
* in @a pool. Use svn_time_from_cstring() for the reverse
* conversion.
*/
const char *svn_time_to_cstring(apr_time_t when, apr_pool_t *pool);
/** Convert @a data to an @c apr_time_t @a when.
* Use @a pool for temporary memory allocation.
*/
svn_error_t *svn_time_from_cstring(apr_time_t *when, const char *data,
apr_pool_t *pool);
/** Convert @a when to a <tt>const char *</tt> representation allocated
* in @a pool, suitable for human display in UTF8.
*/
const char *svn_time_to_human_cstring(apr_time_t when, apr_pool_t *pool);
/** Convert a human-readable date @a text into an @c apr_time_t, using
* @a now as the current time and storing the result in @a result.
* The local time zone will be used to compute the appropriate GMT
* offset if @a text contains a local time specification. Set @a
* matched to indicate whether or not @a text was parsed successfully.
* Perform any allocation in @a pool. Return an error iff an internal
* error (rather than a simple parse error) occurs.
*/
svn_error_t *
svn_parse_date(svn_boolean_t *matched, apr_time_t *result, const char *text,
apr_time_t now, apr_pool_t *pool);
/** Sleep until the next second, to ensure that any files modified
* after we exit have a different timestamp than the one we recorded.
*/
void svn_sleep_for_timestamps(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_TIME_H */
--- NEW FILE: svn_pools.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_pools.h
* @brief APR pool management for Subversion
*/
#ifndef SVN_POOLS_H
#define SVN_POOLS_H
#include <apr.h>
#include <apr_errno.h> /* APR's error system */
#include <apr_pools.h>
#include "svn_types.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Wrappers around APR pools, so we get debugging. */
/** The recommended maximum amount of memory (4MB) to keep in an APR
* allocator on the free list, conveniently defined here to share
* between all our applications.
*/
#define SVN_ALLOCATOR_RECOMMENDED_MAX_FREE (4096 * 1024)
/** Wrapper around apr_pool_create_ex(), with a simpler interface.
* The return pool will have an abort function set, which will call
* abort() on OOM.
*/
apr_pool_t *svn_pool_create_ex(apr_pool_t *parent_pool,
apr_allocator_t *allocator);
#ifndef DOXYGEN_SHOULD_SKIP_THIS
apr_pool_t *svn_pool_create_ex_debug(apr_pool_t *parent_pool,
apr_allocator_t *allocator,
const char *file_line);
#if APR_POOL_DEBUG
#define svn_pool_create_ex(pool, allocator) \
svn_pool_create_ex_debug(pool, allocator, APR_POOL__FILE_LINE__)
#endif /* APR_POOL_DEBUG */
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
/** Create a pool as a subpool of @a parent_pool */
#define svn_pool_create(pool) svn_pool_create_ex(pool, NULL)
/** Clear a @a pool destroying its children.
*
* This define for @c svn_pool_clear exists for completeness.
*/
#define svn_pool_clear apr_pool_clear
/** Destroy a @a pool and all of its children.
*
* This define for @c svn_pool_destroy exists for symmetry and
* completeness.
*/
#define svn_pool_destroy apr_pool_destroy
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_POOLS_H */
--- NEW FILE: svn_subst.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_subst.h
* @brief Data substitution (keywords and EOL style)
*/
#ifndef SVN_SUBST_H
#define SVN_SUBST_H
#include "svn_types.h"
#include "svn_string.h"
#include "svn_io.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* EOL conversion and keyword expansion. */
/** Valid states for 'svn:eol-style' property.
*
* Property nonexistence is equivalent to 'none'.
*/
typedef enum svn_subst_eol_style
{
/** An unrecognized style */
svn_subst_eol_style_unknown,
/** EOL translation is "off" or ignored value */
svn_subst_eol_style_none,
/** Translation is set to client's native eol */
svn_subst_eol_style_native,
/** Translation is set to one of LF, CR, CRLF */
svn_subst_eol_style_fixed
} svn_subst_eol_style_t;
/** Set @a *style to the appropriate @c svn_subst_eol_style_t and @a *eol to
* the appropriate cstring for a given svn:eol-style property value.
*
* Set @a *eol to
*
* - @c NULL for @c svn_subst_eol_style_none, or
*
* - a null-terminated C string containing the native eol marker
* for this platform, for @c svn_subst_eol_style_native, or
*
* - a null-terminated C string containing the eol marker indicated
* by the property value, for @c svn_subst_eol_style_fixed.
*
* If @a *style is NULL, it is ignored.
*/
void
svn_subst_eol_style_from_value(svn_subst_eol_style_t *style,
const char **eol,
const char *value);
/** Indicates whether the working copy and normalized versions of a file
* with the given the parameters differ. If @a force_eol_check is true,
* the routine also accounts for all translations required due to repairing
* fixed eol styles.
*
* @since New in 1.4
*
*/
svn_boolean_t
svn_subst_translation_required(svn_subst_eol_style_t style,
const char *eol,
apr_hash_t *keywords,
svn_boolean_t special,
svn_boolean_t force_eol_check);
/** Values used in keyword expansion.
*
* @deprecated Provided for backward compatibility with the 1.2 API.
*/
typedef struct svn_subst_keywords_t
{
/**
* @name svn_subst_keywords_t fields
* String expansion of the like-named keyword, or NULL if the keyword
* was not selected in the svn:keywords property.
* @{
*/
const svn_string_t *revision;
const svn_string_t *date;
const svn_string_t *author;
const svn_string_t *url;
const svn_string_t *id;
/** @} */
} svn_subst_keywords_t;
/**
* Set @a *kw to a new keywords hash filled with the appropriate contents
* given a @a keywords_string (the contents of the svn:keywords
* property for the file in question), the revision @a rev, the @a url,
* the @a date the file was committed on, and the @a author of the last
* commit. Any of these can be @c NULL to indicate that the information is
* not present, or @c 0 for @a date.
*
* Hash keys are of type <tt>const char *</tt>.
* Hash values are of type <tt>svn_string_t *</tt>.
*
* All memory is allocated out of @a pool.
*
* @since New in 1.3.
*/
svn_error_t *
svn_subst_build_keywords2(apr_hash_t **kw,
const char *keywords_string,
const char *rev,
const char *url,
apr_time_t date,
const char *author,
apr_pool_t *pool);
/** Similar to svn_subst_build_keywords2() except that it populates
* an existing structure @a *kw instead of creating a keywords hash.
*
* @deprecated Provided for backward compatibility with the 1.2 API.
*/
svn_error_t *
svn_subst_build_keywords(svn_subst_keywords_t *kw,
const char *keywords_string,
const char *rev,
const char *url,
apr_time_t date,
const char *author,
apr_pool_t *pool);
/** Return @c TRUE if @a a and @a b do not hold the same keywords.
*
* @a a and @a b are hashes of the form produced by
* svn_subst_build_keywords2().
*
* @since New in 1.3.
*
* If @a compare_values is @c TRUE, "same" means that the @a a and @a b
* contain exactly the same set of keywords, and the values of corresponding
* keywords match as well. Else if @a compare_values is @c FALSE, then
* "same" merely means that @a a and @a b hold the same set of keywords,
* although those keywords' values might differ.
*
* @a a and/or @a b may be @c NULL; for purposes of comparison, @c NULL is
* equivalent to holding no keywords.
*/
svn_boolean_t
svn_subst_keywords_differ2(apr_hash_t *a,
apr_hash_t *b,
svn_boolean_t compare_values,
apr_pool_t *pool);
/** Similar to svn_subst_keywords_differ2() except that it compares
* two @c svn_subst_keywords_t structs instead of keyword hashes.
*
* @deprecated Provided for backward compatibility with the 1.2 API.
*/
svn_boolean_t
svn_subst_keywords_differ(const svn_subst_keywords_t *a,
const svn_subst_keywords_t *b,
svn_boolean_t compare_values);
/**
* 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.
*
* @since New in 1.3.
*
* 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.
*
* Detect only keywords that are no longer than @c SVN_IO_MAX_KEYWORD_LEN
* bytes, including the delimiters and the keyword itself.
*
* 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
* convenient way to get @a eol_str and @a keywords if in libsvn_wc.
*/
svn_error_t *
svn_subst_translate_stream3(svn_stream_t *src,
svn_stream_t *dst,
const char *eol_str,
svn_boolean_t repair,
apr_hash_t *keywords,
svn_boolean_t expand,
apr_pool_t *pool);
/** Return a stream which performs eol translation and keyword
* expansion when read from or written to. The stream @a stream
* 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.
*
* Read operations from and write operations to the stream
* perform the same operation: if @a expand is @c FALSE, both
* contract keywords. One stream supports both read and write
* operations. Reads and writes may be mixed.
*
* The stream returned is allocated in @a pool.
*
* @since New in 1.4.
*/
svn_stream_t *
svn_subst_stream_translated(svn_stream_t *stream,
const char *eol_str,
svn_boolean_t repair,
apr_hash_t *keywords,
svn_boolean_t expand,
apr_pool_t *pool);
/** Similar to svn_subst_translate_stream3() except relies upon a
* @c svn_subst_keywords_t struct instead of a hash for the keywords.
*
* @deprecated Provided for backward compatibility with the 1.2 API.
*/
svn_error_t *
svn_subst_translate_stream2(svn_stream_t *src,
svn_stream_t *dst,
const char *eol_str,
svn_boolean_t repair,
const svn_subst_keywords_t *keywords,
svn_boolean_t expand,
apr_pool_t *pool);
/**
* Same as svn_subst_translate_stream2(), but does not take a @a pool
* argument, instead creates a temporary subpool of the global pool, and
* destroys it before returning.
*
* @deprecated Provided for backward compatibility with the 1.1 API.
*/
svn_error_t *
svn_subst_translate_stream(svn_stream_t *src,
svn_stream_t *dst,
const char *eol_str,
svn_boolean_t repair,
const svn_subst_keywords_t *keywords,
svn_boolean_t expand);
/**
* 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
* 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.
*
* @since New in 1.3.
*/
svn_error_t *
svn_subst_copy_and_translate3(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,
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.
*
* @deprecated Provided for backward compatibility with the 1.2 API.
* @since New in 1.1.
*/
svn_error_t *
svn_subst_copy_and_translate2(const char *src,
const char *dst,
const char *eol_str,
svn_boolean_t repair,
const svn_subst_keywords_t *keywords,
svn_boolean_t expand,
svn_boolean_t special,
apr_pool_t *pool);
/**
* Similar to svn_subst_copy_and_translate2() except that @a special is
* always set to @c FALSE.
*
* @deprecated Provided for backward compatibility with the 1.0 API.
*/
svn_error_t *
svn_subst_copy_and_translate(const char *src,
const char *dst,
const char *eol_str,
svn_boolean_t repair,
const svn_subst_keywords_t *keywords,
svn_boolean_t expand,
apr_pool_t *pool);
/**
* Convenience routine: a variant of svn_subst_translate_stream3() which
* operates on cstrings.
*
* @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.
*
* If @a eol_str and @a keywords are @c NULL, behavior is just a byte-for-byte
* copy.
*/
svn_error_t *
svn_subst_translate_cstring2(const char *src,
const char **dst,
const char *eol_str,
svn_boolean_t repair,
apr_hash_t *keywords,
svn_boolean_t expand,
apr_pool_t *pool);
/**
* Similar to svn_subst_translate_cstring2() except that @a keywords is a
* @c svn_subst_keywords_t struct instead of a keywords hash.
*
* @deprecated Provided for backward compatibility with the 1.2 API.
*/
svn_error_t *
svn_subst_translate_cstring(const char *src,
const char **dst,
const char *eol_str,
svn_boolean_t repair,
const svn_subst_keywords_t *keywords,
svn_boolean_t expand,
apr_pool_t *pool);
/**
* Translates a 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
* @a special, should be the ones used to translate the file to its
* working copy form. Usually, these are the values specified by the
* user in the files' properties.
*
* Inconsistent line endings in the file will be automatically repaired
* (made consistent) for some eol styles. For all others, an error is
* returned. By setting @a always_repair_eols to @c TRUE, eols will be
* made consistent even for those styles which don't have it by default.
*
* @note To translate a file FROM normal form, use
* svn_subst_copy_and_translate3().
*
* @since New in 1.4
*
*/
svn_error_t *
svn_subst_translate_to_normal_form(const char *src,
const char *dst,
svn_subst_eol_style_t eol_style,
const char *eol_str,
svn_boolean_t always_repair_eols,
apr_hash_t *keywords,
svn_boolean_t special,
apr_pool_t *pool);
/**
* Set @a *stream_p to a stream that detranslates the file @a src from
* working copy form to normal form, allocated in @a pool.
*
* The values specified for @a eol_style, @a *eol_str, @a keywords and
* @a special, should be the ones used to translate the file to its
* working copy form. Usually, these are the values specified by the
* user in the files' properties.
*
* Inconsistent line endings in the file will be automatically repaired
* (made consistent) for some eol styles. For all others, an error is
* returned. By setting @a always_repair_eols to @c TRUE, eols will be
* made consistent even for those styles which don't have it by default.
*
* @since New in 1.4.
*
*/
svn_error_t *
svn_subst_stream_detranslated(svn_stream_t **stream_p,
const char *src,
svn_subst_eol_style_t eol_style,
const char *eol_str,
svn_boolean_t always_repair_eols,
apr_hash_t *keywords,
svn_boolean_t special,
apr_pool_t *pool);
/* 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.
*/
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.
*/
svn_error_t *svn_subst_detranslate_string(svn_string_t **new_value,
const svn_string_t *value,
svn_boolean_t for_stdout,
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_SUBST_H */
--- NEW FILE: svn_nls.h ---
/**
* @copyright
* ====================================================================
* Copyright (c) 2000-2005 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/.
* ====================================================================
* @endcopyright
*
* @file svn_nls.h
* @brief Support functions for NLS programs
*/
#ifndef SVN_NLS_H
#define SVN_NLS_H
#include "svn_types.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Set up the NLS.
* Return the error @c APR_EINVAL or @c APR_INCOMPLETE if an
* error occurs.
*
* @note This function is for bindings. You should usually
* use svn_cmdline_init() instead of calling this
* function directly. This function should be called
* after initializing APR.
*
* @since New in 1.3.
*/
svn_error_t *svn_nls_init(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_NLS_H */
--- NEW FILE: svn_diff.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_diff.h
* @brief Contextual diffing.
*
* This is an internalized library for performing contextual diffs
* between sources of data.
*
* @note This is different than Subversion's binary-diffing engine.
* That API lives in @c svn_delta.h -- see the "text deltas" section. A
* "text delta" is way of representing precise binary diffs between
* strings of data. The Subversion client and server send text deltas
* to one another during updates and commits.
*
* This API, however, is (or will be) used for performing *contextual*
* merges between files in the working copy. During an update or
* merge, 3-way file merging is needed. And 'svn diff' needs to show
* the differences between 2 files.
*
* The nice thing about this API is that it's very general. It
* operates on any source of data (a "datasource") and calculates
* contextual differences on "tokens" within the data. In our
* particular usage, the datasources are files and the tokens are
* lines. But the possibilities are endless.
*/
#ifndef SVN_DIFF_H
#define SVN_DIFF_H
#include <apr.h>
#include <apr_pools.h>
#include <apr_file_io.h>
#include "svn_types.h"
#include "svn_error.h"
#include "svn_io.h"
#include "svn_version.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* Get libsvn_diff version information.
*
* @since New in 1.1.
*/
const svn_version_t *svn_diff_version(void);
/* Diffs. */
/** An opaque type that represents a difference between either two or
* three datasources. This object is returned by svn_diff_diff(),
* svn_diff_diff3() and svn_diff_diff4(), and consumed by a number of
* other routines.
*/
typedef struct svn_diff_t svn_diff_t;
/**
* There are four types of datasources. In GNU diff3 terminology,
* the first three types correspond to the phrases "older", "mine",
* and "yours".
*/
typedef enum svn_diff_datasource_e
{
/** The oldest form of the data. */
svn_diff_datasource_original,
/** The same data, but potentially changed by the user. */
svn_diff_datasource_modified,
/** The latest version of the data, possibly different than the
* user's modified version.
*/
svn_diff_datasource_latest,
/** The common ancestor of original and modified. */
svn_diff_datasource_ancestor
} svn_diff_datasource_e;
/** A vtable for reading data from the three datasources. */
typedef struct svn_diff_fns_t
{
/** Open the datasource of type @a datasource. */
svn_error_t *(*datasource_open)(void *diff_baton,
svn_diff_datasource_e datasource);
/** Close the datasource of type @a datasource. */
svn_error_t *(*datasource_close)(void *diff_baton,
svn_diff_datasource_e datasource);
/** Get the next "token" from the datasource of type @a datasource.
* Return a "token" in @a *token. Return a hash of "token" in @a *hash.
* Leave @a token and @a hash untouched when the datasource is exhausted.
*/
svn_error_t *(*datasource_get_next_token)(apr_uint32_t *hash, void **token,
void *diff_baton,
svn_diff_datasource_e datasource);
/** A function for ordering the tokens, resembling 'strcmp' in functionality.
* @a compare should contain the return value of the comparison:
* If @a ltoken and @a rtoken are "equal", return 0. If @a ltoken is
* "less than" @a rtoken, return a number < 0. If @a ltoken is
* "greater than" @a rtoken, return a number > 0.
*/
svn_error_t *(*token_compare)(void *diff_baton,
void *ltoken,
void *rtoken,
int *compare);
/** Free @a token from memory, the diff algorithm is done with it. */
void (*token_discard)(void *diff_baton,
void *token);
/** Free *all* tokens from memory, they're no longer needed. */
void (*token_discard_all)(void *diff_baton);
} svn_diff_fns_t;
/* The Main Events */
/** 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.
*/
svn_error_t *svn_diff_diff(svn_diff_t **diff,
void *diff_baton,
const svn_diff_fns_t *diff_fns,
apr_pool_t *pool);
/** 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
* three datasources: "original", "modified", and "latest". Do all
* allocation in @a pool.
*/
svn_error_t *svn_diff_diff3(svn_diff_t **diff,
void *diff_baton,
const svn_diff_fns_t *diff_fns,
apr_pool_t *pool);
/** 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
* two datasources: "original" and "latest", adjusted to become a full
* difference between "original", "modified" and "latest" using "ancestor".
* Do all allocation in @a pool.
*/
svn_error_t *svn_diff_diff4(svn_diff_t **diff,
void *diff_baton,
const svn_diff_fns_t *diff_fns,
apr_pool_t *pool);
/* Utility functions */
/** Determine if a diff object contains conflicts. If it does, return
* @c TRUE, else return @c FALSE.
*/
svn_boolean_t
svn_diff_contains_conflicts(svn_diff_t *diff);
/** Determine if a diff object contains actual differences between the
* datasources. If so, return @c TRUE, else return @c FALSE.
*/
svn_boolean_t
svn_diff_contains_diffs(svn_diff_t *diff);
/* Displaying Diffs */
/** A vtable for displaying (or consuming) differences between datasources.
*
* Differences, similarities, and conflicts are described by lining up
* "ranges" of data.
*
* @note These callbacks describe data ranges in units of "tokens".
* A "token" is whatever you've defined it to be in your datasource
* @c svn_diff_fns_t vtable.
*/
typedef struct svn_diff_output_fns_t
{
/* Two-way and three-way diffs both call the first two output functions: */
/**
* If doing a two-way diff, then an *identical* data range was found
* between the "original" and "modified" datasources. Specifically,
* the match starts at @a original_start and goes for @a original_length
* tokens in the original data, and at @a modified_start for
* @a modified_length tokens in the modified data.
*
* If doing a three-way diff, then all three datasources have
* matching data ranges. The range @a latest_start, @a latest_length in
* the "latest" datasource is identical to the range @a original_start,
* @a original_length in the original data, and is also identical to
* the range @a modified_start, @a modified_length in the modified data.
*/
svn_error_t *(*output_common)(void *output_baton,
apr_off_t original_start,
apr_off_t original_length,
apr_off_t modified_start,
apr_off_t modified_length,
apr_off_t latest_start,
apr_off_t latest_length);
/**
* If doing a two-way diff, then an *conflicting* data range was found
* between the "original" and "modified" datasources. Specifically,
* the conflict starts at @a original_start and goes for @a original_length
* tokens in the original data, and at @a modified_start for
* @a modified_length tokens in the modified data.
*
* If doing a three-way diff, then an identical data range was discovered
* between the "original" and "latest" datasources, but this conflicts with
* a range in the "modified" datasource.
*/
svn_error_t *(*output_diff_modified)(void *output_baton,
apr_off_t original_start,
apr_off_t original_length,
apr_off_t modified_start,
apr_off_t modified_length,
apr_off_t latest_start,
apr_off_t latest_length);
/* ------ The following callbacks are used by three-way diffs only --- */
/** An identical data range was discovered between the "original" and
* "modified" datasources, but this conflicts with a range in the
* "latest" datasource.
*/
svn_error_t *(*output_diff_latest)(void *output_baton,
apr_off_t original_start,
apr_off_t original_length,
apr_off_t modified_start,
apr_off_t modified_length,
apr_off_t latest_start,
apr_off_t latest_length);
/** An identical data range was discovered between the "modified" and
* "latest" datasources, but this conflicts with a range in the
* "original" datasource.
*/
svn_error_t *(*output_diff_common)(void *output_baton,
apr_off_t original_start,
apr_off_t original_length,
apr_off_t modified_start,
apr_off_t modified_length,
apr_off_t latest_start,
apr_off_t latest_length);
/** All three datasources have conflicting data ranges. The range
* @a latest_start, @a latest_length in the "latest" datasource conflicts
* with the range @a original_start, @a original_length in the "original"
* datasource, and also conflicts with the range @a modified_start,
* @a modified_length in the "modified" datasource.
* If there are common ranges in the "modified" and "latest" datasources
* in this conflicting range, @a resolved_diff will contain a diff
* which can be used to retrieve the common and conflicting ranges.
*/
svn_error_t *(*output_conflict)(void *output_baton,
apr_off_t original_start,
apr_off_t original_length,
apr_off_t modified_start,
apr_off_t modified_length,
apr_off_t latest_start,
apr_off_t latest_length,
svn_diff_t *resolved_diff);
} svn_diff_output_fns_t;
/** Given a vtable of @a output_fns/@a output_baton for consuming
* differences, output the differences in @a diff.
*/
svn_error_t *
svn_diff_output(svn_diff_t *diff,
void *output_baton,
const svn_diff_output_fns_t *output_fns);
/* Diffs on files */
/** To what extent whitespace should be ignored when comparing lines.
*
* @since New in 1.4.
*/
typedef enum svn_diff_file_ignore_space_t
{
/** Ignore no whitespace. */
svn_diff_file_ignore_space_none,
/** Ignore changes in sequences of whitespace characters, treating each
* sequence of whitespace characters as a single space. */
svn_diff_file_ignore_space_change,
/** Ignore all whitespace characters. */
svn_diff_file_ignore_space_all
} svn_diff_file_ignore_space_t;
/** Options to control the behaviour of the file diff routines.
*
* @since New in 1.4.
*
* @note This structure may be extended in the future, so to preserve binary
* compatibility, users must not allocate structs of this type themselves.
* @see svn_diff_file_options_create().
*/
typedef struct svn_diff_file_options_t
{
/** To what extent whitespace should be ignored when comparing lines.
* The default is @c svn_diff_file_ignore_space_none. */
svn_diff_file_ignore_space_t ignore_space;
/** Whether to treat all end-of-line markers the same when comparing lines.
* The default is @c FALSE. */
svn_boolean_t ignore_eol_style;
} svn_diff_file_options_t;
/** Allocate a @c svn_diff_file_options_t structure in @a pool, initializing
* it with default values.
*
* @since New in 1.4.
*/
svn_diff_file_options_t *
svn_diff_file_options_create(apr_pool_t *pool);
/**
* Parse @a args, an array of <tt>const char *</tt> command line switches
* and adjust @a options accordingly. @a options is assumed to be initialized
* with default values. @a pool is used for temporary allocation.
*
* @since New in 1.4.
*
* The following options are supported:
* - --ignore-space-change, -b
* - --ignore-all-space, -w
* - --ignore-eol-style
* - --unified, -u (for compatibility, does nothing).
*/
svn_error_t *
svn_diff_file_options_parse(svn_diff_file_options_t *options,
const apr_array_header_t *args,
apr_pool_t *pool);
/** A convenience function to produce a diff between two files.
*
* @since New in 1.4.
*
* Return a diff object in @a *diff (allocated from @a pool) that represents
* the difference between an @a original file and @a modified file.
* (The file arguments must be full paths to the files.)
*
* Compare lines according to the relevant fields of @a options.
*/
svn_error_t *
svn_diff_file_diff_2(svn_diff_t **diff,
const char *original,
const char *modified,
const svn_diff_file_options_t *options,
apr_pool_t *pool);
/** Similar to svn_file_diff_2(), but with @a options set to a struct with
* default options.
*
* @deprecated Provided for backwards compatibility with the 1.3 API.
*/
svn_error_t *
svn_diff_file_diff(svn_diff_t **diff,
const char *original,
const char *modified,
apr_pool_t *pool);
/** A convenience function to produce a diff between three files.
*
* @since New in 1.4.
*
* Return a diff object in @a *diff (allocated from @a pool) that represents
* the difference between an @a original file, @a modified file, and @a latest
* file. (The file arguments must be full paths to the files.)
*
* Compare lines according to the relevant fields of @a options.
*/
svn_error_t *
svn_diff_file_diff3_2(svn_diff_t **diff,
const char *original,
const char *modified,
const char *latest,
const svn_diff_file_options_t *options,
apr_pool_t *pool);
/** Similar to svn_diff_file_diff3_2(), but with @a options set to a struct
* with default options.
*
* @deprecated Provided for backwards compatibility with the 1.3 API.
*/
svn_error_t *
svn_diff_file_diff3(svn_diff_t **diff,
const char *original,
const char *modified,
const char *latest,
apr_pool_t *pool);
/** A convenience function to produce a diff between four files.
*
* @since New in 1.4.
*
* Return a diff object in @a *diff (allocated from @a pool) that represents
* the difference between an @a original file, @a modified file, @a latest
* and @a ancestor file. (The file arguments must be full paths to the files.)
*
* Compare lines according to the relevant fields of @a options.
*/
svn_error_t *
svn_diff_file_diff4_2(svn_diff_t **diff,
const char *original,
const char *modified,
const char *latest,
const char *ancestor,
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
* default options.
*
* @deprecated Provided for backwards compatibility with the 1.3 API.
*/
svn_error_t *
svn_diff_file_diff4(svn_diff_t **diff,
const char *original,
const char *modified,
const char *latest,
const char *ancestor,
apr_pool_t *pool);
/** A convenience function to produce unified diff output from the
* diff generated by svn_diff_file_diff().
*
* @since New in 1.3.
*
* Output a @a diff between @a original_path and @a modified_path in unified
* context diff format to @a output_file. Optionally supply @a original_header
* and/or @a modified_header to be displayed in the header of the output.
* If @a original_header or @a modified_header is @c NULL, a default header
* will be displayed, consisting of path and last modified time. Output
* all headers and markers in @a header_encoding.
*/
svn_error_t *
svn_diff_file_output_unified2(svn_stream_t *output_stream,
svn_diff_t *diff,
const char *original_path,
const char *modified_path,
const char *original_header,
const char *modified_header,
const char *header_encoding,
apr_pool_t *pool);
/** Similar to svn_diff_file_output_unified2(), but with @a header_encoding
* set to @c APR_LOCALE_CHARSET.
*
* @deprecated Provided for backward compatibility with the 1.2 API.
*/
svn_error_t *
svn_diff_file_output_unified(svn_stream_t *output_stream,
svn_diff_t *diff,
const char *original_path,
const char *modified_path,
const char *original_header,
const char *modified_header,
apr_pool_t *pool);
/** A convenience function to produce diff3 output from the
* diff generated by svn_diff_file_diff3().
*
* Output a @a diff between @a original_path, @a modified_path and
* @a latest_path in merged format to @a output_file. Optionally supply
* @a conflict_modified, @a conflict_original, @a conflict_separator and/or
* @a conflict_latest to be displayed as conflict markers in the output.
* If @a conflict_original, @a conflict_modified, @a conflict_latest and/or
* @a conflict_separator is @c NULL, a default marker will be displayed.
* Set @a display_original_in_conflict and @a display_resolved_conflicts
* as desired. Note that these options are mutually exclusive.
*/
svn_error_t *
svn_diff_file_output_merge(svn_stream_t *output_stream,
svn_diff_t *diff,
const char *original_path,
const char *modified_path,
const char *latest_path,
const char *conflict_original,
const char *conflict_modified,
const char *conflict_latest,
const char *conflict_separator,
svn_boolean_t display_original_in_conflict,
svn_boolean_t display_resolved_conflicts,
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_DIFF_H */
--- NEW FILE: svn_config.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_config.h
* @brief Accessing SVN configuration files.
*/
#ifndef SVN_CONFIG_H
#define SVN_CONFIG_H
#include <apr_pools.h>
#include "svn_types.h"
#include "svn_error.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**************************************************************************
*** ***
*** For a description of the SVN configuration file syntax, see ***
*** your ~/.subversion/README, which is written out automatically by ***
*** svn_config_ensure(). ***
*** ***
**************************************************************************/
/** Opaque structure describing a set of configuration options. */
typedef struct svn_config_t svn_config_t;
/*** Configuration Defines ***/
/**
* @name Client configuration files strings
* Strings for the names of files, sections, and options in the
* client configuration files.
* @{
*/
#define SVN_CONFIG_CATEGORY_SERVERS "servers"
#define SVN_CONFIG_SECTION_GROUPS "groups"
#define SVN_CONFIG_SECTION_GLOBAL "global"
#define SVN_CONFIG_OPTION_HTTP_PROXY_HOST "http-proxy-host"
#define SVN_CONFIG_OPTION_HTTP_PROXY_PORT "http-proxy-port"
#define SVN_CONFIG_OPTION_HTTP_PROXY_USERNAME "http-proxy-username"
#define SVN_CONFIG_OPTION_HTTP_PROXY_PASSWORD "http-proxy-password"
#define SVN_CONFIG_OPTION_HTTP_PROXY_EXCEPTIONS "http-proxy-exceptions"
#define SVN_CONFIG_OPTION_HTTP_TIMEOUT "http-timeout"
#define SVN_CONFIG_OPTION_HTTP_COMPRESSION "http-compression"
#define SVN_CONFIG_OPTION_NEON_DEBUG_MASK "neon-debug-mask"
#define SVN_CONFIG_OPTION_SSL_AUTHORITY_FILES "ssl-authority-files"
#define SVN_CONFIG_OPTION_SSL_TRUST_DEFAULT_CA "ssl-trust-default-ca"
#define SVN_CONFIG_OPTION_SSL_CLIENT_CERT_FILE "ssl-client-cert-file"
#define SVN_CONFIG_OPTION_SSL_CLIENT_CERT_PASSWORD "ssl-client-cert-password"
#define SVN_CONFIG_CATEGORY_CONFIG "config"
#define SVN_CONFIG_SECTION_AUTH "auth"
#define SVN_CONFIG_OPTION_STORE_PASSWORDS "store-passwords"
#define SVN_CONFIG_OPTION_STORE_AUTH_CREDS "store-auth-creds"
#define SVN_CONFIG_SECTION_HELPERS "helpers"
#define SVN_CONFIG_OPTION_EDITOR_CMD "editor-cmd"
#define SVN_CONFIG_OPTION_DIFF_CMD "diff-cmd"
#define SVN_CONFIG_OPTION_DIFF3_CMD "diff3-cmd"
#define SVN_CONFIG_OPTION_DIFF3_HAS_PROGRAM_ARG "diff3-has-program-arg"
#define SVN_CONFIG_SECTION_MISCELLANY "miscellany"
#define SVN_CONFIG_OPTION_GLOBAL_IGNORES "global-ignores"
#define SVN_CONFIG_OPTION_LOG_ENCODING "log-encoding"
#define SVN_CONFIG_OPTION_USE_COMMIT_TIMES "use-commit-times"
#define SVN_CONFIG_OPTION_TEMPLATE_ROOT "template-root"
#define SVN_CONFIG_OPTION_ENABLE_AUTO_PROPS "enable-auto-props"
#define SVN_CONFIG_OPTION_NO_UNLOCK "no-unlock"
#define SVN_CONFIG_SECTION_TUNNELS "tunnels"
#define SVN_CONFIG_SECTION_AUTO_PROPS "auto-props"
/** @} */
/** @name Repository conf directory configuration files strings
* Strings for the names of sections and options in the
* repository conf directory configuration files.
* @{
*/
/* For repository svnserve.conf files */
#define SVN_CONFIG_SECTION_GENERAL "general"
#define SVN_CONFIG_OPTION_ANON_ACCESS "anon-access"
#define SVN_CONFIG_OPTION_AUTH_ACCESS "auth-access"
#define SVN_CONFIG_OPTION_PASSWORD_DB "password-db"
#define SVN_CONFIG_OPTION_REALM "realm"
#define SVN_CONFIG_OPTION_AUTHZ_DB "authz-db"
/* For repository password database */
#define SVN_CONFIG_SECTION_USERS "users"
/** @} */
/*** Configuration Default Values ***/
#define SVN_CONFIG_DEFAULT_GLOBAL_IGNORES \
"*.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store"
#define SVN_CONFIG_TRUE "true"
#define SVN_CONFIG_FALSE "false"
/** Read configuration information from the standard sources and merge it
* into the hash @a *cfg_hash. If @a config_dir is not NULL it specifies a
* directory from which to read the configuration files, overriding all
* other sources. Otherwise, first read any system-wide configurations
* (from a file or from the registry), then merge in personal
* configurations (again from file or registry). The hash and all its data
* are allocated in @a pool.
*
* @a *cfg_hash is a hash whose keys are @c const char * configuration
* categories (@c SVN_CONFIG_CATEGORY_SERVERS,
* @c SVN_CONFIG_CATEGORY_CONFIG, etc.) and whose values are the @c
* svn_config_t * items representing the configuration values for that
* category.
*/
svn_error_t *svn_config_get_config(apr_hash_t **cfg_hash,
const char *config_dir,
apr_pool_t *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.
*/
svn_error_t *svn_config_read(svn_config_t **cfgp,
const char *file,
svn_boolean_t must_exist,
apr_pool_t *pool);
/** Like svn_config_read(), but merges the configuration data from @a file
* (a file or registry path) into @a *cfg, which was previously returned
* from svn_config_read(). This function invalidates all value
* expansions in @a cfg, so that the next svn_config_get() takes the
* modifications into account.
*/
svn_error_t *svn_config_merge(svn_config_t *cfg,
const char *file,
svn_boolean_t must_exist);
/** Find the value of a (@a section, @a option) pair in @a cfg, set @a
* *valuep to the value.
*
* If @a cfg is @c NULL, just sets @a *valuep to @a default_value. If
* the value does not exist, expand and return @a default_value. @a
* default_value can be NULL.
*
* The returned value will be valid at least until the next call to
* svn_config_get(), or for the lifetime of @a default_value. It is
* safest to consume the returned value immediately.
*
* This function may change @a cfg by expanding option values.
*/
void svn_config_get(svn_config_t *cfg, const char **valuep,
const char *section, const char *option,
const char *default_value);
/** Add or replace the value of a (@a section, @a option) pair in @a cfg with
* @a value.
*
* This function invalidates all value expansions in @a cfg.
*/
void svn_config_set(svn_config_t *cfg,
const char *section, const char *option,
const char *value);
/** Like svn_config_get(), but for boolean values.
*
* Parses the option as a boolean value. The recognized representations
* are 'true'/'false', 'yes'/'no', 'on'/'off', '1'/'0'; case does not
* matter. Returns an error if the option doesn't contain a known string.
*/
svn_error_t *svn_config_get_bool(svn_config_t *cfg, svn_boolean_t *valuep,
const char *section, const char *option,
svn_boolean_t default_value);
/** Like svn_config_set(), but for boolean values.
*
* Sets the option to 'true'/'false', depending on @a value.
*/
void svn_config_set_bool(svn_config_t *cfg,
const char *section, const char *option,
svn_boolean_t value);
/** Similar to @c svn_config_section_enumerator2_t, but is not
* provided with a memory pool argument.
*
* See svn_config_enumerate_sections() for the details of this type.
*
* @deprecated Provided for backwards compatibility with the 1.2 API.
*/
typedef svn_boolean_t (*svn_config_section_enumerator_t)(const char *name,
void *baton);
/** Similar to svn_config_enumerate_sections2(), but uses a memory pool of
* @a cfg instead of one that is explicitely provided.
*
* @deprecated Provided for backwards compatibility with the 1.2 API.
*/
int svn_config_enumerate_sections(svn_config_t *cfg,
svn_config_section_enumerator_t callback,
void *baton);
/** A callback function used in enumerating config sections.
*
* See svn_config_enumerate_sections2() for the details of this type.
*
* @since New in 1.3.
*/
typedef svn_boolean_t (*svn_config_section_enumerator2_t)(const char *name,
void *baton,
apr_pool_t *pool);
/** Enumerate the sections, passing @a baton and the current section's name
* to @a callback. Continue the enumeration if @a callback returns @c TRUE.
* Return the number of times @a callback was called.
*
* ### See kff's comment to svn_config_enumerate2(). It applies to this
* function, too. ###
*
* @a callback's @a name and @a name parameters are only valid for the
* duration of the call.
*
* @since New in 1.3.
*/
int svn_config_enumerate_sections2(svn_config_t *cfg,
svn_config_section_enumerator2_t callback,
void *baton, apr_pool_t *pool);
/** Similar to @c svn_config_enumerator2_t, but is not
* provided with a memory pool argument.
* See svn_config_enumerate() for the details of this type.
*
* @deprecated Provided for backwards compatibility with the 1.2 API.
*/
typedef svn_boolean_t (*svn_config_enumerator_t)(const char *name,
const char *value,
void *baton);
/** Similar to svn_config_enumerate2(), but uses a memory pool of
* @a cfg instead of one that is explicitely provided.
*
* @deprecated Provided for backwards compatibility with the 1.2 API.
*/
int svn_config_enumerate(svn_config_t *cfg, const char *section,
svn_config_enumerator_t callback, void *baton);
/** A callback function used in enumerating config options.
*
* See svn_config_enumerate2() for the details of this type.
*
* @since New in 1.3.
*/
typedef svn_boolean_t (*svn_config_enumerator2_t)(const char *name,
const char *value,
void *baton,
apr_pool_t *pool);
/** Enumerate the options in @a section, passing @a baton and the current
* option's name and value to @a callback. Continue the enumeration if
* @a callback returns @c TRUE. Return the number of times @a callback
* was called.
*
* ### kff asks: A more usual interface is to continue enumerating
* while @a callback does not return error, and if @a callback does
* return error, to return the same error (or a wrapping of it)
* from svn_config_enumerate(). What's the use case for
* svn_config_enumerate()? Is it more likely to need to break out
* of an enumeration early, with no error, than an invocation of
* @a callback is likely to need to return an error? ###
*
* @a callback's @a name and @a value parameters are only valid for the
* duration of the call.
*
* @since New in 1.3.
*/
int svn_config_enumerate2(svn_config_t *cfg, const char *section,
svn_config_enumerator2_t callback, void *baton,
apr_pool_t *pool);
/**
* Return @c TRUE if @a section exists in @a config, @c FALSE otherwise.
*
* @since New in 1.4.
*/
svn_boolean_t svn_config_has_section(svn_config_t *cfg, const char *section);
/** Enumerate the group @a master_section in @a cfg. Each variable
* value is interpreted as a list of glob patterns (separated by comma
* and optional whitespace). Return the name of the first variable
* whose value matches @a key, or @c NULL if no variable matches.
*/
const char *svn_config_find_group(svn_config_t *cfg, const char *key,
const char *master_section,
apr_pool_t *pool);
/** Retrieve value corresponding to @a option_name for a given
* @a server_group in @a cfg , or return @a default_value if none is found.
*
* The config will first be checked for a default, then will be checked for
* an override in a server group.
*/
const char *svn_config_get_server_setting(svn_config_t *cfg,
const char* server_group,
const char* option_name,
const char* default_value);
/** Retrieve value into @a result_value corresponding to @a option_name for a
* given @a server_group in @a cfg, or return @a default_value if none is
* found.
*
* The config will first be checked for a default, then will be checked for
* an override in a server group. If the value found is not a valid integer,
* a @c svn_error_t* will be returned.
*/
svn_error_t *svn_config_get_server_setting_int(svn_config_t *cfg,
const char *server_group,
const char *option_name,
apr_int64_t default_value,
apr_int64_t *result_value,
apr_pool_t *pool);
/** Try to ensure that the user's ~/.subversion/ area exists, and create
* no-op template files for any absent config files. Use @a pool for any
* temporary allocation. If @a config_dir is not @c NULL it specifies a
* directory from which to read the config overriding all other sources.
*
* Don't error if something exists but is the wrong kind (for example,
* ~/.subversion exists but is a file, or ~/.subversion/servers exists
* but is a directory).
*
* Also don't error if trying to create something and failing -- it's
* okay for the config area or its contents not to be created.
* However, if creating a config template file succeeds, return an
* error if unable to initialize its contents.
*/
svn_error_t *svn_config_ensure(const char *config_dir, apr_pool_t *pool);
/** Accessing cached authentication data in the user config area.
*
* @defgroup cached_authentication_data cached authentication data.
* @{
*/
/** A hash-key pointing to a realmstring. Every file containing
* authentication data should have this key.
*/
#define SVN_CONFIG_REALMSTRING_KEY "svn:realmstring"
/** Use @a cred_kind and @a realmstring to locate a file within the
* ~/.subversion/auth/ area. If the file exists, initialize @a *hash
* and load the file contents into the hash, using @a pool. If the
* file doesn't exist, set @a *hash to NULL.
*
* If @a config_dir is not NULL it specifies a directory from which to
* read the config overriding all other sources.
*
* Besides containing the original credential fields, the hash will
* also contain @c SVN_CONFIG_REALMSTRING_KEY. The caller can examine
* this value as a sanity-check that the correct file was loaded.
*
* The hashtable will contain <tt>const char *</tt> keys and
* <tt>svn_string_t *</tt> values.
*/
svn_error_t * svn_config_read_auth_data(apr_hash_t **hash,
const char *cred_kind,
const char *realmstring,
const char *config_dir,
apr_pool_t *pool);
/** Use @a cred_kind and @a realmstring to create or overwrite a file
* within the ~/.subversion/auth/ area. Write the contents of @a hash into
* the file. If @a config_dir is not NULL it specifies a directory to read
* the config overriding all other sources.
*
* Also, add @a realmstring to the file, with key @c
* SVN_CONFIG_REALMSTRING_KEY. This allows programs (or users) to
* verify exactly which set credentials live within the file.
*
* The hashtable must contain <tt>const char *</tt> keys and
* <tt>svn_string_t *</tt> values.
*/
svn_error_t * svn_config_write_auth_data(apr_hash_t *hash,
const char *cred_kind,
const char *realmstring,
const char *config_dir,
apr_pool_t *pool);
/** @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_CONFIG_H */
--- NEW FILE: svn_md5.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_md5.h
* @brief Converting and comparing MD5 checksums.
*/
#ifndef SVN_MD5_H
#define SVN_MD5_H
#include <apr_pools.h>
#include <apr_md5.h>
#include "svn_error.h"
#include "svn_pools.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** The MD5 digest for the empty string. */
const unsigned char *svn_md5_empty_string_digest(void);
/** Return the hex representation of @a digest, which must be
* @c APR_MD5_DIGESTSIZE bytes long, allocating the string in @a pool.
*/
const char *svn_md5_digest_to_cstring_display(const unsigned char digest[],
apr_pool_t *pool);
/** Return the hex representation of @a digest, which must be
* @c APR_MD5_DIGESTSIZE bytes long, allocating the string in @a pool.
* If @a digest is all zeros, then return NULL.
*/
const char *svn_md5_digest_to_cstring(const unsigned char digest[],
apr_pool_t *pool);
/** Compare digests @a d1 and @a d2, each @c APR_MD5_DIGESTSIZE bytes long.
* If neither is all zeros, and they do not match, then return false;
* else return true.
*/
svn_boolean_t svn_md5_digests_match(const unsigned char d1[],
const unsigned char d2[]);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_MD5_H */
--- NEW FILE: svn_wc.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_wc.h
* @brief The Subversion Working Copy Library
[...3425 lines suppressed...]
*
* Allocate *result_p in @a pool.
*
* @since New in 1.4
*/
svn_error_t *
svn_wc_revision_status(svn_wc_revision_status_t **result_p,
const char *wc_path,
const char *trail_url,
svn_boolean_t committed,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_WC_H */
--- NEW FILE: svn_error.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_error.h
* @brief Common exception handling for Subversion.
*/
#ifndef SVN_ERROR_H
#define SVN_ERROR_H
#include <apr.h>
#include <apr_errno.h> /* APR's error system */
#include <apr_pools.h>
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define APR_WANT_STDIO
#endif
#include <apr_want.h>
#include "svn_types.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** the best kind of (@c svn_error_t *) ! */
#define SVN_NO_ERROR 0
/* The actual error codes are kept in a separate file; see comments
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.
*/
char *svn_strerror(apr_status_t statcode, char *buf, apr_size_t bufsize);
/** If @a err has a custom error message, return that, otherwise
* store the generic error string associated with @a err->apr_err into
* @a buf (terminating with null) and return @a buf.
*
* @since New in 1.4.
*
* @note @a buf and @a bufsize are provided in the interface so that
* this function is thread-safe and yet does no allocation.
*/
const char *svn_err_best_message(svn_error_t *err,
char *buf, apr_size_t bufsize);
/** SVN error creation and destruction.
*
* @defgroup svn_error_error_creation_destroy error creation and destruction
* @{
*/
/** Create a nested exception structure.
*
* Input: an APR or SVN custom error code,
* a "child" error to wrap,
* a specific message
*
* Returns: a new error structure (containing the old one).
*
* Notes: Errors are always allocated in a subpool of the global pool,
* since an error's lifetime is generally not related to the
* lifetime of any convenient pool. Errors must be freed
* with svn_error_clear(). The specific message should be NULL
* if there is nothing to add to the general message associated
* with the error code.
*
* If creating the "bottommost" error in a chain, pass @c NULL for
* the child argument.
*/
svn_error_t *svn_error_create(apr_status_t apr_err,
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().
*/
svn_error_t *svn_error_createf(apr_status_t apr_err,
svn_error_t *child,
const char *fmt,
...)
__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 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
* following arguments according to apr_psprintf(), and then
* appending ": " and the error message corresponding to @a status.
* (If UTF-8 translation of the APR error message fails, the ": " and
* APR error are not appended to the error message.)
*/
svn_error_t *svn_error_wrap_apr(apr_status_t status, const char *fmt, ...)
__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 wrappered exception with your own
* message, before throwing it up the stack. (It uses all of the
* child's fields.)
*/
svn_error_t *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))
/** 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.
*/
void svn_error_compose(svn_error_t *chain, svn_error_t *new_err);
/** Create a new error that is a deep copy of err and return it.
*
* @since New in 1.2.
*/
svn_error_t *svn_error_dup(svn_error_t *err);
/** Free the memory used by @a error, as well as all ancestors and
* descendants of @a error.
*
* Unlike other Subversion objects, errors are managed explicitly; you
* MUST clear an error if you are ignoring it, or you are leaking memory.
* For convenience, @a error may be @c NULL, in which case this function does
* nothing; thus, svn_error_clear(svn_foo(...)) works as an idiom to
* ignore errors.
*/
void svn_error_clear(svn_error_t *error);
/**
* Very basic default error handler: print out error stack @a error to the
* stdio stream @a stream, with each error prefixed by @a prefix, and quit
* iff the @a fatal flag is set. Allocations are performed in the error's
* pool.
*
* If you're not sure what prefix to pass, just pass "svn: ". That's
* what code that used to call svn_handle_error() and now calls
* svn_handle_error2() does.
*
* @since New in 1.2.
*/
void svn_handle_error2(svn_error_t *error,
FILE *stream,
svn_boolean_t fatal,
const char *prefix);
/** Like svn_handle_error2() but with @c prefix set to "svn: "
*
* @deprecated Provided for backward compatibility with the 1.1 API.
*/
void svn_handle_error(svn_error_t *error,
FILE *stream,
svn_boolean_t fatal);
/**
* Very basic default warning handler: print out the error @a error to the
* stdio stream @a stream, prefixed by @a prefix. Allocations are
* performed in the error's pool.
*
* @since New in 1.2.
*/
void svn_handle_warning2(FILE *stream, svn_error_t *error, const char *prefix);
/** Like svn_handle_warning2() but with @c prefix set to "svn: "
*/
void svn_handle_warning(FILE *stream, svn_error_t *error);
/** A statement macro for checking error values.
*
* Evaluate @a expr. If it yields an error, return that error from the
* current function. Otherwise, continue.
*
* The <tt>do { ... } while (0)</tt> wrapper has no semantic effect,
* but it makes this macro syntactically equivalent to the expression
* statement it resembles. Without it, statements like
*
* <tt>
* if (a)
* SVN_ERR (some operation);
* else
* foo;
* </tt>
*
* would not mean what they appear to.
*/
#define SVN_ERR(expr) \
do { \
svn_error_t *svn_err__temp = (expr); \
if (svn_err__temp) \
return svn_err__temp; \
} while (0)
/** A statement macro, very similar to @c SVN_ERR.
*
* This macro will wrap the error with the specified text before
* returning the error.
*/
#define SVN_ERR_W(expr, wrap_msg) \
do { \
svn_error_t *svn_err__temp = (expr); \
if (svn_err__temp) \
return svn_error_quick_wrap(svn_err__temp, wrap_msg); \
} while (0)
/** A statement macro, similar to @c SVN_ERR, but returns an integer.
*
* Evaluate @a expr. If it yields an error, handle that error and
* return @c EXIT_FAILURE.
*/
#define SVN_INT_ERR(expr) \
do { \
svn_error_t *svn_err__temp = (expr); \
if (svn_err__temp) { \
svn_handle_error2(svn_err__temp, stderr, FALSE, "svn: "); \
svn_error_clear(svn_err__temp); \
return EXIT_FAILURE; } \
} while (0)
/** @} */
/**
* 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.
*
* @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) \
/**
* Return TRUE if @a err is an error specifically related to unlocking
* a path in the repository, FALSE otherwise.
*
* @since New in 1.2.
*/
#define SVN_ERR_IS_UNLOCK_ERROR(err) \
(err->apr_err == SVN_ERR_FS_PATH_NOT_LOCKED || \
err->apr_err == SVN_ERR_FS_BAD_LOCK_TOKEN || \
err->apr_err == SVN_ERR_FS_LOCK_OWNER_MISMATCH || \
err->apr_err == SVN_ERR_FS_NO_SUCH_LOCK || \
err->apr_err == SVN_ERR_RA_NOT_LOCKED || \
err->apr_err == SVN_ERR_FS_LOCK_EXPIRED)
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_ERROR_H */
--- NEW FILE: svn_error_codes.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_error_codes.h
* @brief Subversion error codes.
[...1021 lines suppressed...]
SVN_ERRDEF(SVN_ERR_CL_BAD_LOG_MESSAGE,
SVN_ERR_CL_CATEGORY_START + 8,
"Something is wrong with the log message's contents")
SVN_ERRDEF(SVN_ERR_CL_UNNECESSARY_LOG_MESSAGE,
SVN_ERR_CL_CATEGORY_START + 9,
"A log message was given where none was necessary")
SVN_ERROR_END
#undef SVN_ERROR_START
#undef SVN_ERRDEF
#undef SVN_ERROR_END
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* defined(SVN_ERROR_BUILD_ARRAY) || !defined(SVN_ERROR_ENUM_DEFINED) */
--- NEW FILE: svn_opt.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_opt.h
* @brief Option and argument parsing for Subversion command lines
*/
#ifndef SVN_OPTS_H
#define SVN_OPTS_H
#include <apr.h>
#include <apr_pools.h>
#include <apr_getopt.h>
#include "svn_types.h"
#include "svn_error.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* All subcommand procedures in Subversion conform to this prototype.
*
* @a os is the apr option state after getopt processing has been run; in
* other words, it still contains the non-option arguments following
* the subcommand. See @a os->argv and @a os->ind.
*
* @a baton is anything you need it to be.
*
* @a pool is used for allocating errors, and for any other allocation
* 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);
/** The maximum number of aliases a subcommand can have. */
#define SVN_OPT_MAX_ALIASES 3
/** The maximum number of options that can be accepted by a subcommand. */
#define SVN_OPT_MAX_OPTIONS 50
/** Options that have no short option char should use an identifying
* integer equal to or greater than this.
*/
#define SVN_OPT_FIRST_LONGOPT_ID 256
/** One element of a subcommand dispatch table.
*
* @since New in 1.4.
*/
typedef struct svn_opt_subcommand_desc2_t
{
/** The full name of this command. */
const char *name;
/** The function this command invokes. */
svn_opt_subcommand_t *cmd_func;
/** A list of alias names for this command (e.g., 'up' for 'update'). */
const char *aliases[SVN_OPT_MAX_ALIASES];
/** A brief string describing this command, for usage messages. */
const char *help;
/** A list of options accepted by this command. Each value in the
* array is a unique enum (the 2nd field in apr_getopt_option_t)
*/
int valid_options[SVN_OPT_MAX_OPTIONS];
/** A list of option help descriptions, keyed by the option unique enum
* (the 2nd field in apr_getopt_option_t), which override the generic
* descriptions given in an apr_getopt_option_t on a per-subcommand basis.
*/
struct { int optch; const char *desc; } desc_overrides[SVN_OPT_MAX_OPTIONS];
} svn_opt_subcommand_desc2_t;
/** One element of a subcommand dispatch table.
*
* @deprecated Provided for backward compatibility with the 1.3 API.
*
* Like #svn_opt_subcommand_desc2_t but lacking the @c desc_overrides
* member.
*/
typedef struct svn_opt_subcommand_desc_t
{
/** The full name of this command. */
const char *name;
/** The function this command invokes. */
svn_opt_subcommand_t *cmd_func;
/** A list of alias names for this command (e.g., 'up' for 'update'). */
const char *aliases[SVN_OPT_MAX_ALIASES];
/** A brief string describing this command, for usage messages. */
const char *help;
/** A list of options accepted by this command. Each value in the
* array is a unique enum (the 2nd field in apr_getopt_option_t)
*/
int valid_options[SVN_OPT_MAX_OPTIONS];
} svn_opt_subcommand_desc_t;
/**
* Return the entry in @a table whose name matches @a cmd_name, or @c NULL if
* none. @a cmd_name may be an alias.
*
* @since New in 1.4.
*/
const svn_opt_subcommand_desc2_t *
svn_opt_get_canonical_subcommand2(const svn_opt_subcommand_desc2_t *table,
const char *cmd_name);
/**
* Return the entry in @a table whose name matches @a cmd_name, or @c NULL if
* none. @a cmd_name may be an alias.
*
* Same as svn_opt_get_canonical_subcommand2(), but acts on
* #svn_opt_subcommand_desc_t.
*
* @deprecated Provided for backward compatibility with the 1.3 API.
*/
const svn_opt_subcommand_desc_t *
svn_opt_get_canonical_subcommand(const svn_opt_subcommand_desc_t *table,
const char *cmd_name);
/**
* 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,
* then the subcommand-specific option description instead of the generic one,
* if a specific description is defined.
*
* The returned value may be statically allocated, or allocated in @a pool.
*
* @since New in 1.4.
*/
const apr_getopt_option_t *
svn_opt_get_option_from_code2(int code,
const apr_getopt_option_t *option_table,
const svn_opt_subcommand_desc2_t *command,
apr_pool_t *pool);
/**
* Return the first entry from @a option_table 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.
*
* @deprecated Provided for backward compatibility with the 1.3 API.
*/
const apr_getopt_option_t *
svn_opt_get_option_from_code(int code,
const apr_getopt_option_t *option_table);
/**
* Return @c TRUE iff subcommand @a command supports option @a option_code,
* else return @c FALSE.
*
* @since New in 1.4.
*/
svn_boolean_t
svn_opt_subcommand_takes_option2(const svn_opt_subcommand_desc2_t *command,
int option_code);
/**
* Return @c TRUE iff subcommand @a command supports option @a option_code,
* else return @c FALSE.
*
* Same as svn_opt_subcommand_takes_option2(), but acts on
* #svn_opt_subcommand_desc_t.
*
* @deprecated Provided for backward compatibility with the 1.3 API.
*/
svn_boolean_t
svn_opt_subcommand_takes_option(const svn_opt_subcommand_desc_t *command,
int option_code);
/**
* Print a generic (not command-specific) usage message to @a stream.
*
* (### todo: why is @a stream a stdio file instead of an svn stream?)
*
* If @a header is non-null, print @a header followed by a newline. Then
* loop over @a cmd_table printing the usage for each command (getting
* option usages from @a opt_table). Then if @a footer is non-null, print
* @a footer followed by a newline.
*
* Use @a pool for temporary allocation.
*
* @since New in 1.4.
*/
void
svn_opt_print_generic_help2(const char *header,
const svn_opt_subcommand_desc2_t *cmd_table,
const apr_getopt_option_t *opt_table,
const char *footer,
apr_pool_t *pool,
FILE *stream);
/* Same as svn_opt_print_generic_help2(), but acts on
* #svn_opt_subcommand_desc_t.
*
* @deprecated Provided for backward compatibility with the 1.3 API.
*/
void
svn_opt_print_generic_help(const char *header,
const svn_opt_subcommand_desc_t *cmd_table,
const apr_getopt_option_t *opt_table,
const char *footer,
apr_pool_t *pool,
FILE *stream);
/**
* Print an option @a opt nicely into a @a string allocated in @a pool.
* If @a doc is set, include the generic documentation string of @a opt,
* localized to the current locale if a translation is available.
*/
void
svn_opt_format_option(const char **string,
const apr_getopt_option_t *opt,
svn_boolean_t doc,
apr_pool_t *pool);
/**
* Get @a subcommand's usage from @a table, and print it to @c stdout.
* Obtain option usage from @a options_table. Use @a pool for temporary
* allocation. @a subcommand may be a canonical command name or an
* alias. (### todo: why does this only print to @c stdout, whereas
* svn_opt_print_generic_help() gives us a choice?)
*
* @since New in 1.4.
*/
void
svn_opt_subcommand_help2(const char *subcommand,
const svn_opt_subcommand_desc2_t *table,
const apr_getopt_option_t *options_table,
apr_pool_t *pool);
/**
* Same as svn_opt_subcommand_help2(), but acts on
* #svn_opt_subcommand_desc_t.
*
* @deprecated Provided for backward compatibility with the 1.3 API.
*/
void
svn_opt_subcommand_help(const char *subcommand,
const svn_opt_subcommand_desc_t *table,
const apr_getopt_option_t *options_table,
apr_pool_t *pool);
/* Parsing revision and date options. */
/**
* Various ways of specifying revisions.
*
* @note
* In contexts where local mods are relevant, the `working' kind
* refers to the uncommitted "working" revision, which may be modified
* with respect to its base revision. In other contexts, `working'
* should behave the same as `committed' or `current'.
*/
enum svn_opt_revision_kind {
/** No revision information given. */
svn_opt_revision_unspecified,
/** revision given as number */
svn_opt_revision_number,
/** revision given as date */
svn_opt_revision_date,
/** rev of most recent change */
svn_opt_revision_committed,
/** (rev of most recent change) - 1 */
svn_opt_revision_previous,
/** .svn/entries current revision */
svn_opt_revision_base,
/** current, plus local mods */
svn_opt_revision_working,
/** repository youngest */
svn_opt_revision_head
};
/**
* A revision value, which can be specified as a number or a date.
*
* @note This union was formerly an anonymous inline type in
* @c svn_opt_revision_t, and was converted to a named type just to
* make things easier for SWIG.
*
* @since New in 1.3.
*/
typedef union svn_opt_revision_value_t
{
svn_revnum_t number;
apr_time_t date;
} svn_opt_revision_value_t;
/** A revision, specified in one of @c svn_opt_revision_kind ways. */
typedef struct svn_opt_revision_t
{
enum svn_opt_revision_kind kind; /**< See svn_opt_revision_kind */
svn_opt_revision_value_t value; /**< Extra data qualifying the @c kind */
} svn_opt_revision_t;
/**
* Set @a *start_revision and/or @a *end_revision according to @a arg,
* where @a arg is "N" or "N:M", like so:
*
* - If @a arg is "N", set @a *start_revision to represent N, and
* leave @a *end_revision untouched.
*
* - If @a arg is "N:M", set @a *start_revision and @a *end_revision
* to represent N and M respectively.
*
* N and/or M may be one of the special revision descriptors
* recognized by revision_from_word(), or a date in curly braces.
*
* If @a arg is invalid, return -1; else return 0.
* It is invalid to omit a revision (as in, ":", "N:" or ":M").
*
* @note It is typical, though not required, for @a *start_revision and
* @a *end_revision to be @c svn_opt_revision_unspecified kind on entry.
*
* Use @a pool for temporary allocations.
*/
int svn_opt_parse_revision(svn_opt_revision_t *start_revision,
svn_opt_revision_t *end_revision,
const char *arg,
apr_pool_t *pool);
/* Parsing arguments. */
/**
* Pull remaining target arguments from @a os into @a *targets_p,
* converting them to UTF-8, followed by targets from @a known_targets
* (which might come from, for example, the "--targets" command line
* option), which are already in UTF-8.
*
* On each URL target, do some IRI-to-URI encoding and some
* auto-escaping. On each local path, canonicalize case and path
* separators, and silently skip it if it has the same name as a
* Subversion working copy administrative directory.
*
* Allocate @a *targets_p and its elements in @a pool.
*
* @since New in 1.2.
*/
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,
apr_pool_t *pool);
/**
* The same as svn_opt_args_to_target_array2() except that, in
* addition, if @a extract_revisions is set, then look for trailing
* "@rev" syntax on the first two paths. If the first target in @a
* *targets_p ends in "@rev", replace it with a canonicalized version of
* the part before "@rev" and replace @a *start_revision with the value
* of "rev". If the second target in @a *targets_p ends in "@rev",
* replace it with a canonicalized version of the part before "@rev"
* and replace @a *end_revision with the value of "rev". Ignore
* revision specifiers on any further paths. "rev" can be any form of
* single revision specifier, as accepted by svn_opt_parse_revision().
*
* @deprecated Provided for backward compatibility with the 1.1 API.
*/
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,
svn_opt_revision_t *start_revision,
svn_opt_revision_t *end_revision,
svn_boolean_t extract_revisions,
apr_pool_t *pool);
/**
* If no targets exist in @a *targets, add `.' as the lone target.
*
* (Some commands take an implicit "." string argument when invoked
* with no arguments. Those commands make use of this function to
* add "." to the target array if the user passes no args.)
*/
void svn_opt_push_implicit_dot_target(apr_array_header_t *targets,
apr_pool_t *pool);
/**
* Parse @a num_args non-target arguments from the list of arguments in
* @a os->argv, return them as <tt>const char *</tt> in @a *args_p, without
* doing any UTF-8 conversion. Allocate @a *args_p and its values in @a pool.
*/
svn_error_t *
svn_opt_parse_num_args(apr_array_header_t **args_p,
apr_getopt_t *os,
int num_args,
apr_pool_t *pool);
/**
* Parse all remaining arguments from @a os->argv, return them as
* <tt>const char *</tt> in @a *args_p, without doing any UTF-8 conversion.
* Allocate @a *args_p and its values in @a pool.
*/
svn_error_t *
svn_opt_parse_all_args(apr_array_header_t **args_p,
apr_getopt_t *os,
apr_pool_t *pool);
/**
* Parse a working-copy 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@" -> error
* "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)
*
* [*] Syntactically valid but probably not semantically useful.
*
* If a trailing revision specifier is found, parse it into @a *rev and
* put the rest of the path into @a *truepath, allocating from @a pool;
* or return an @c SVN_ERR_CL_ARG_PARSING_ERROR if the revision
* specifier is invalid. If no trailing revision specifier is found,
* set @a *truepath to @a path and @a rev->kind to @c
* svn_opt_revision_unspecified.
*
* @since New in 1.1.
*/
svn_error_t *
svn_opt_parse_path(svn_opt_revision_t *rev,
const char **truepath,
const char *path,
apr_pool_t *pool);
/**
* Print either generic help, or command-specific help for @a pgm_name.
* If there are arguments in @a os, then try printing help for them as
* though they are subcommands, using @a cmd_table and @a option_table
* for option information.
*
* If @a os is @c NULL, or there are no targets in @a os, then:
*
* - If @a print_version is true, then print version info, in brief
* form if @a quiet is also true; if @a quiet is false, then if
* @a version_footer is non-null, print it following the version
* information.
*
* - Else if @a print_version is not true, then print generic help,
* via svn_opt_print_generic_help2() with the @a header, @a cmd_table,
* @a option_table, and @a footer arguments.
*
* Use @a pool for temporary allocations.
*
* Notes: The reason this function handles both version printing and
* general usage help is that a confused user might put both the
* --version flag *and* subcommand arguments on a help command line.
* The logic for handling such a situation should be in one place.
*
* @since New in 1.4.
*/
svn_error_t *
svn_opt_print_help2(apr_getopt_t *os,
const char *pgm_name,
svn_boolean_t print_version,
svn_boolean_t quiet,
const char *version_footer,
const char *header,
const svn_opt_subcommand_desc2_t *cmd_table,
const apr_getopt_option_t *option_table,
const char *footer,
apr_pool_t *pool);
/* Same as vn_opt_print_help2), but acts on #svn_opt_subcommand_desc_t.
*
* @deprecated Provided for backward compatibility with the 1.3 API.
*/
svn_error_t *
svn_opt_print_help(apr_getopt_t *os,
const char *pgm_name,
svn_boolean_t print_version,
svn_boolean_t quiet,
const char *version_footer,
const char *header,
const svn_opt_subcommand_desc_t *cmd_table,
const apr_getopt_option_t *option_table,
const char *footer,
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_OPTS_H */
--- NEW FILE: svn_cmdline.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_cmdline.h
* @brief Support functions for command line programs
*/
#ifndef SVN_CMDLINE_H
#define SVN_CMDLINE_H
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define APR_WANT_STDIO
#endif
#include <apr_want.h>
#include <apr_getopt.h>
#include "svn_utf.h"
#include "svn_auth.h"
#include "svn_config.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Set up the locale for character conversion, and initialize APR.
* If @a error_stream is non-null, print error messages to the stream,
* using @a progname as the program name. Return @c EXIT_SUCCESS if
* successful, otherwise @c EXIT_FAILURE.
*
* @note This function should be called exactly once at program startup,
* before calling any other APR or Subversion functions.
*/
int svn_cmdline_init(const char *progname, FILE *error_stream);
/** Set @a *dest to an output-encoded C string from UTF-8 C string @a
* src; allocate @a *dest in @a pool.
*/
svn_error_t *svn_cmdline_cstring_from_utf8(const char **dest,
const char *src,
apr_pool_t *pool);
/** Like svn_utf_cstring_from_utf8_fuzzy(), but converts to an
* output-encoded C string. */
const char *svn_cmdline_cstring_from_utf8_fuzzy(const char *src,
apr_pool_t *pool);
/** Set @a *dest to a UTF-8-encoded C string from input-encoded C
* string @a src; allocate @a *dest in @a pool.
*/
svn_error_t * svn_cmdline_cstring_to_utf8(const char **dest,
const char *src,
apr_pool_t *pool);
/** Set @a *dest to an output-encoded natively-formatted path string
* from canonical path @a src; allocate @a *dest in @a pool.
*/
svn_error_t *svn_cmdline_path_local_style_from_utf8(const char **dest,
const char *src,
apr_pool_t *pool);
/** Write to stdout, using a printf-like format string @a fmt, passed
* through apr_pvsprintf(). All string arguments are in UTF-8; the output
* is converted to the output encoding. Use @a pool for temporary
* allocation.
*
* @since New in 1.1.
*/
svn_error_t *svn_cmdline_printf(apr_pool_t *pool,
const char *fmt,
...)
__attribute__((format(printf, 2, 3)));
/** Write to the stdio @a stream, using a printf-like format string @a fmt,
* passed through apr_pvsprintf(). All string arguments are in UTF-8;
* the output is converted to the output encoding. Use @a pool for
* temporary allocation.
*
* @since New in 1.1.
*/
svn_error_t *svn_cmdline_fprintf(FILE *stream,
apr_pool_t *pool,
const char *fmt,
...)
__attribute__((format(printf, 3, 4)));
/** Output the @a string to the stdio @a stream, converting from UTF-8
* to the output encoding. Use @a pool for temporary allocation.
*
* @since New in 1.1.
*/
svn_error_t *svn_cmdline_fputs(const char *string,
FILE *stream,
apr_pool_t *pool);
/** Flush output buffers of the stdio @a stream, returning an error if that
* fails. This is just a wrapper for the standard fflush() function for
* consistent error handling.
*
* @since New in 1.1.
*/
svn_error_t *svn_cmdline_fflush(FILE *stream);
/** Return the name of the output encoding allocated in @a pool, or @c
* APR_LOCALE_CHARSET if the output encoding is the same as the locale
* encoding.
*
* @since New in 1.3.
*/
const char *svn_cmdline_output_encoding(apr_pool_t *pool);
/** Handle @a error in preparation for immediate exit from a
* command-line client. Specifically:
*
* Call svn_handle_error2(@a error, stderr, FALSE, @a prefix), clear
* @a error, destroy @a pool iff it is non-NULL, and return EXIT_FAILURE.
*
* @since New in 1.3.
*/
int svn_cmdline_handle_exit_error(svn_error_t *error,
apr_pool_t *pool,
const char *prefix);
/** Prompt the user for input, using @a prompt_str for the prompt and
* returning the user's response in @a result, allocated in @a pool.
*
* @since New in 1.4.
*/
svn_error_t *
svn_cmdline_prompt_user(const char **result,
const char *prompt_str,
apr_pool_t *pool);
/** A cancellation function/baton pair to be passed as the baton argument
* to the @c svn_cmdline_*_prompt functions.
*
* @since New in 1.4.
*/
typedef struct svn_cmdline_prompt_baton_t {
svn_cancel_func_t cancel_func;
void *cancel_baton;
} svn_cmdline_prompt_baton_t;
/** An implementation of @c svn_auth_simple_prompt_func_t that prompts
* the user for keyboard input on the command line.
*
* @since New in 1.4.
*
* Expects a @c svn_cmdline_prompt_baton_t to be passed as @a baton.
*/
svn_error_t *
svn_cmdline_auth_simple_prompt(svn_auth_cred_simple_t **cred_p,
void *baton,
const char *realm,
const char *username,
svn_boolean_t may_save,
apr_pool_t *pool);
/** An implementation of @c svn_auth_username_prompt_func_t that prompts
* the user for their username via the command line.
*
* @since New in 1.4.
*
* Expects a @c svn_cmdline_prompt_baton_t to be passed as @a baton.
*/
svn_error_t *
svn_cmdline_auth_username_prompt(svn_auth_cred_username_t **cred_p,
void *baton,
const char *realm,
svn_boolean_t may_save,
apr_pool_t *pool);
/** An implementation of @c svn_auth_ssl_server_trust_prompt_func_t that
* asks the user if they trust a specific ssl server via the command line.
*
* @since New in 1.4.
*
* 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);
/** An implementation of @c svn_auth_ssl_client_cert_prompt_func_t that
* prompts the user for the filename of their SSL client certificate via
* the command line.
*
* @since New in 1.4.
*
* 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);
/** An implementation of @c svn_auth_ssl_client_cert_pw_prompt_func_t that
* prompts the user for their SSL certificate password via the command line.
*
* @since New in 1.4.
*
* 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);
/** Initialize auth baton @a ab with the standard set of authentication
* providers used by the command line client. @a non_interactive,
* @a username, @a password, @a config_dir, and @a auth_cache are the
* values of the command line options of the same names. @a cfg is the
* @c SVN_CONFIG_CATEGORY_CONFIG configuration, and @a cancel_func and
* @a cancel_baton control the cancellation of the prompting providers
* that are initialized. @a pool is used for all allocations.
*
* @since New in 1.4.
*/
svn_error_t *
svn_cmdline_setup_auth_baton(svn_auth_baton_t **ab,
svn_boolean_t non_interactive,
const char *username,
const char *password,
const char *config_dir,
svn_boolean_t no_auth_cache,
svn_config_t *cfg,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *pool);
/** Wrapper for apr_getopt_init(), which see.
*
* @since New in 1.4.
*
* On OS400 V5R4, prior to calling apr_getopt_init(), converts each of the
* @a argc strings in @a argv[] in place from EBCDIC to UTF-8, allocating
* each new UTF-8 string in @a pool.
*
* This is a private API for Subversion's own use.
*/
svn_error_t *
svn_cmdline__getopt_init(apr_getopt_t **os,
int argc,
const char *argv[],
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_CMDLINE_H */
--- NEW FILE: svn_fs.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_fs.h
* @brief Interface to the Subversion filesystem.
[...1688 lines suppressed...]
svn_fs_get_locks_callback_t get_locks_func,
void *get_locks_baton,
apr_pool_t *pool);
/** @} */
/**
* Append a textual list of all available FS modules to the stringbuf
* @a output.
*
* @since New in 1.2.
*/
svn_error_t *svn_fs_print_modules(svn_stringbuf_t *output,
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_FS_H */
--- NEW FILE: svn_hash.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_hash.h
* @brief Dumping and reading hash tables to/from files.
*/
#ifndef SVN_HASH_H
#define SVN_HASH_H
#include <apr_pools.h>
#include <apr_hash.h>
#include <apr_file_io.h>
#include "svn_types.h"
#include "svn_io.h"
#include "svn_error.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** The longest the "K <number>" line can be in one of our hashdump files. */
#define SVN_KEYLINE_MAXLEN 100
/*----------------------------------------------------*/
/** Reading/writing hashtables to disk
*
* @defgroup svn_hash_read_write reading and writing hashtables to disk
* @{
*/
/**
* The conventional terminator for hash dumps.
*
* @since New in 1.1.
*/
#define SVN_HASH_TERMINATOR "END"
/**
* Read a hash table from @a stream, storing the resultants names and
* values in @a hash. Use a @a pool for all allocations. @a hash will
* have <tt>const char *</tt> keys and <tt>svn_string_t *</tt> values.
* If @a terminator is NULL, expect the hash to be terminated by the
* end of the stream; otherwise, expect the hash to be terminated by a
* line containing @a terminator. Pass @c SVN_HASH_TERMINATOR to use
* the conventional terminator "END".
*
* @since New in 1.1.
*/
svn_error_t *svn_hash_read2(apr_hash_t *hash,
svn_stream_t *stream,
const char *terminator,
apr_pool_t *pool);
/**
* Dump @a hash to @a stream. Use @a pool for all allocations. @a
* hash has <tt>const char *</tt> keys and <tt>svn_string_t *</tt>
* values. If @a terminator is not NULL, terminate the hash with a
* line containing @a terminator.
*
* @since New in 1.1.
*/
svn_error_t *svn_hash_write2(apr_hash_t *hash,
svn_stream_t *stream,
const char *terminator,
apr_pool_t *pool);
/**
* Similar to svn_hash_read2(), but allows @a stream to contain
* deletion lines which remove entries from @a hash as well as adding
* to it.
*
* @since New in 1.1.
*/
svn_error_t *svn_hash_read_incremental(apr_hash_t *hash,
svn_stream_t *stream,
const char *terminator,
apr_pool_t *pool);
/**
* Similar to svn_hash_write2(), but only writes out entries for
* keys which differ between @a hash and @a oldhash, and also writes
* out deletion lines for keys which are present in @a oldhash but not
* in @a hash.
*
* @since New in 1.1.
*/
svn_error_t *svn_hash_write_incremental(apr_hash_t *hash,
apr_hash_t *oldhash,
svn_stream_t *stream,
const char *terminator,
apr_pool_t *pool);
/**
* This function behaves like svn_hash_read2(), but it only works
* on an apr_file_t input, empty files are accepted, and the hash is
* expected to be terminated with a line containing "END" or
* "PROPS-END".
*
* @deprecated Provided for backward compatibility with the 1.0 API.
*/
svn_error_t *svn_hash_read(apr_hash_t *hash,
apr_file_t *srcfile,
apr_pool_t *pool);
/**
* This function behaves like svn_hash_write2(), but it only works
* on an apr_file_t output, and the terminator is always "END".
*
* @deprecated Provided for backward compatibility with the 1.0 API.
*/
svn_error_t *svn_hash_write(apr_hash_t *hash,
apr_file_t *destfile,
apr_pool_t *pool);
/** @} */
/** Taking the "diff" of two hash tables.
*
* @defgroup svn_hash_diff taking the diff of two hash tables.
* @{
*/
/** Hash key status indicator for svn_hash_diff_func_t. */
enum svn_hash_diff_key_status
{
/* Key is present in both hashes. */
svn_hash_diff_key_both,
/* Key is present in first hash only. */
svn_hash_diff_key_a,
/* Key is present in second hash only. */
svn_hash_diff_key_b
};
/** Function type for expressing a key's status between two hash tables. */
typedef svn_error_t *(*svn_hash_diff_func_t)
(const void *key, apr_ssize_t klen,
enum svn_hash_diff_key_status status,
void *baton);
/** Take the diff of two hashtables.
*
* For each key in the union of @a hash_a's and @a hash_b's keys, invoke
* @a diff_func exactly once, passing the key, the key's length, an enum
* @c svn_hash_diff_key_status indicating which table(s) the key appears
* in, and @a diff_func_baton.
*
* Process all keys of @a hash_a first, then all remaining keys of @a hash_b.
*
* If @a diff_func returns error, return that error immediately, without
* applying @a diff_func to anything else.
*
* @a hash_a or @a hash_b or both may be null; treat a null table as though
* empty.
*
* Use @a pool for temporary allocation.
*/
svn_error_t *svn_hash_diff(apr_hash_t *hash_a,
apr_hash_t *hash_b,
svn_hash_diff_func_t diff_func,
void *diff_func_baton,
apr_pool_t *pool);
/** @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_HASH_H */
--- NEW FILE: mod_dav_svn.h ---
/*
* mod_dav_svn.h: public header for the DAV/SVN Apache module
*
* ====================================================================
* 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/.
* ====================================================================
*/
#ifndef MOD_DAV_SVN_H
#define MOD_DAV_SVN_H
#include <httpd.h>
#include <mod_dav.h>
#ifdef __cplusplus
extern "C" {
#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:
* CLEANED_URI: The uri with duplicate and trailing slashes removed.
* 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.
* RELATIVE_PATH: The remaining imaginary path components.
* 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").
For example, consider the uri
/svn/repos/proj1/!svn/blah/13//A/B/alpha
In the SVNPath case, this function would receive 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:
* 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
*/
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 **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.
*/
AP_MODULE_DECLARE(dav_error *) dav_svn_get_repos_path(request_rec *r,
const char *root_path,
const char **repos_path);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* MOD_DAV_SVN_H */
--- NEW FILE: svn_base64.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_base64.h
* @brief Base64 encoding and decoding functions
*/
#ifndef SVN_BASE64_H
#define SVN_BASE64_H
#include <apr_md5.h>
#include "svn_io.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Return a writable generic stream which will encode binary data in
* base64 format and write the encoded data to @c 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.
*/
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.
*/
svn_stream_t *svn_base64_decode(svn_stream_t *output, apr_pool_t *pool);
/** Encode an @c svn_stringbuf_t into base64.
*
* A simple interface for encoding base64 data assuming we have all of
* it present at once. The returned string will be allocated from @c pool.
*/
const svn_string_t *svn_base64_encode_string(const svn_string_t *str,
apr_pool_t *pool);
/** Decode an @c svn_stringbuf_t from base64.
*
* A simple interface for decoding base64 data assuming we have all of
* it present at once. The returned string will be allocated from @c pool.
*/
const svn_string_t *svn_base64_decode_string(const svn_string_t *str,
apr_pool_t *pool);
/** Return a base64-encoded checksum for finalized @c digest.
*
* @c digest contains @c APR_MD5_DIGESTSIZE bytes of finalized data.
* Allocate the returned checksum in @c pool.
*/
svn_stringbuf_t *svn_base64_from_md5(unsigned char digest[],
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_BASE64_H */
--- NEW FILE: svn_delta.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_delta.h
* @brief Delta-parsing
[...986 lines suppressed...]
*
* Use @a pool for all necessary allocations.
*/
svn_error_t *
svn_delta_path_driver(const svn_delta_editor_t *editor,
void *edit_baton,
svn_revnum_t revision,
apr_array_header_t *paths,
svn_delta_path_driver_cb_func_t callback_func,
void *callback_baton,
apr_pool_t *pool);
/** @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_DELTA_H */
--- NEW FILE: svn_auth.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_auth.h
* @brief Subversion's authentication system
*/
#ifndef SVN_AUTH_H
#define SVN_AUTH_H
#include <apr_pools.h>
#include "svn_types.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Overview of the svn authentication system.
*
* We define an authentication "provider" as a module that is able to
* return a specific set of credentials. (e.g. username/password,
* certificate, etc.) Each provider implements a vtable that
*
* - can fetch initial credentials
* - can retry the fetch (or try to fetch something different)
* - can store the credentials for future use
*
* For any given type of credentials, there can exist any number of
* separate providers -- each provider has a different method of
* fetching. (i.e. from a disk store, by prompting the user, etc.)
*
* The application begins by creating an auth baton object, and
* "registers" some number of providers with the auth baton, in a
* specific order. (For example, it may first register a
* username/password provider that looks in disk store, then register
* a username/password provider that prompts the user.)
*
* Later on, when any svn library is challenged, it asks the auth
* baton for the specific credentials. If the initial credentials
* fail to authenticate, the caller keeps requesting new credentials.
* Under the hood, libsvn_auth effectively "walks" over each provider
* (in order of registry), one at a time, until all the providers have
* exhausted all their retry options.
*
* This system allows an application to flexibly define authentication
* behaviors (by changing registration order), and very easily write
* new authentication providers.
*
* An auth_baton also contains an internal hashtable of run-time
* parameters; any provider or library layer can set these run-time
* parameters at any time, so that the provider has access to the
* data. (For example, certain run-time data may not be available
* until an authentication challenge is made.) Each credential type
* must document the run-time parameters that are made available to
* its providers.
*
* @defgroup auth_fns authentication functions
* @{
*/
/** The type of a Subversion authentication object */
typedef struct svn_auth_baton_t svn_auth_baton_t;
/** The type of a Subversion authentication-iteration object */
typedef struct svn_auth_iterstate_t svn_auth_iterstate_t;
/** The main authentication "provider" vtable. */
typedef struct svn_auth_provider_t
{
/** The kind of credentials this provider knows how to retrieve. */
const char *cred_kind;
/** Get an initial set of credentials.
*
* Set @a *credentials to a set of valid credentials within @a
* realmstring, or NULL if no credentials are available. Set @a
* *iter_baton to context that allows a subsequent call to @c
* next_credentials, in case the first credentials fail to
* authenticate. @a provider_baton is general context for the
* vtable, @a parameters contains any run-time data that the
* provider may need, and @a realmstring comes from the
* svn_auth_first_credentials() call.
*/
svn_error_t * (*first_credentials)(void **credentials,
void **iter_baton,
void *provider_baton,
apr_hash_t *parameters,
const char *realmstring,
apr_pool_t *pool);
/** Get a different set of credentials.
*
* Set @a *credentials to another set of valid credentials (using @a
* iter_baton as the context from previous call to first_credentials
* or next_credentials). If no more credentials are available, set
* @a *credentials to NULL. If the provider only has one set of
* credentials, this function pointer should simply be NULL. @a
* provider_baton is general context for the vtable, @a parameters
* contains any run-time data that the provider may need, and @a
* realmstring comes from the svn_auth_first_credentials() call.
*/
svn_error_t * (*next_credentials)(void **credentials,
void *iter_baton,
void *provider_baton,
apr_hash_t *parameters,
const char *realmstring,
apr_pool_t *pool);
/** Save credentials.
*
* Store @a credentials for future use. @a provider_baton is
* general context for the vtable, and @a parameters contains any
* run-time data the provider may need. Set @a *saved to true if
* the save happened, or false if not. The provider is not required
* to save; if it refuses or is unable to save for non-fatal
* reasons, return false. If the provider never saves data, then
* this function pointer should simply be NULL. @a realmstring comes
* from the svn_auth_first_credentials() call.
*/
svn_error_t * (*save_credentials)(svn_boolean_t *saved,
void *credentials,
void *provider_baton,
apr_hash_t *parameters,
const char *realmstring,
apr_pool_t *pool);
} svn_auth_provider_t;
/** A provider object, ready to be put into an array and given to
svn_auth_open(). */
typedef struct svn_auth_provider_object_t
{
const svn_auth_provider_t *vtable;
void *provider_baton;
} svn_auth_provider_object_t;
/** Specific types of credentials **/
/** Simple username/password pair credential kind.
*
* The following auth parameters may be available to the providers:
*
* - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
* - @c SVN_AUTH_PARAM_DEFAULT_USERNAME (@c char*)
* - @c SVN_AUTH_PARAM_DEFAULT_PASSWORD (@c char*)
*/
#define SVN_AUTH_CRED_SIMPLE "svn.simple"
/** @c SVN_AUTH_CRED_SIMPLE credentials. */
typedef struct svn_auth_cred_simple_t
{
/** Username */
const char *username;
/** Password */
const char *password;
/** Indicates if the credentials may be saved (to disk). For example, a
* GUI prompt implementation with a remember password checkbox shall set
* @a may_save to TRUE if the checkbox is checked.
*/
svn_boolean_t may_save;
} svn_auth_cred_simple_t;
/** Username credential kind.
*
* The following optional auth parameters are relevant to the providers:
*
* - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
* - @c SVN_AUTH_PARAM_DEFAULT_USERNAME (@c char*)
*/
#define SVN_AUTH_CRED_USERNAME "svn.username"
/** @c SVN_AUTH_CRED_USERNAME credentials. */
typedef struct svn_auth_cred_username_t
{
/** Username */
const char *username;
/** Indicates if the credentials may be saved (to disk). For example, a
* GUI prompt implementation with a remember username checkbox shall set
* @a may_save to TRUE if the checkbox is checked.
*/
svn_boolean_t may_save;
} svn_auth_cred_username_t;
/** SSL client certificate credential type.
*
* The following auth parameters are available to the providers:
*
* - @c SVN_AUTH_PARAM_CONFIG (@c svn_config_t*)
* - @c SVN_AUTH_PARAM_SERVER_GROUP (@c char*)
*
* The following optional auth parameters are relevant to the providers:
*
* - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
*/
#define SVN_AUTH_CRED_SSL_CLIENT_CERT "svn.ssl.client-cert"
/** @c SVN_AUTH_CRED_SSL_CLIENT_CERT credentials. */
typedef struct svn_auth_cred_ssl_client_cert_t
{
/** Full paths to the certificate file */
const char *cert_file;
/** Indicates if the credentials may be saved (to disk). For example, a
* GUI prompt implementation with a remember certificate checkbox shall
* set @a may_save to TRUE if the checkbox is checked.
*/
svn_boolean_t may_save;
} svn_auth_cred_ssl_client_cert_t;
/** SSL client certificate passphrase credential type.
*
* @note The realmstring used with this credential type must be a name that
* makes it possible for the user to identify the certificate.
*
* The following auth parameters are available to the providers:
*
* - @c SVN_AUTH_PARAM_CONFIG (@c svn_config_t*)
* - @c SVN_AUTH_PARAM_SERVER_GROUP (@c char*)
*
* The following optional auth parameters are relevant to the providers:
*
* - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
*/
#define SVN_AUTH_CRED_SSL_CLIENT_CERT_PW "svn.ssl.client-passphrase"
/** @c SVN_AUTH_CRED_SSL_CLIENT_CERT_PW credentials. */
typedef struct svn_auth_cred_ssl_client_cert_pw_t
{
/** Certificate password */
const char *password;
/** Indicates if the credentials may be saved (to disk). For example, a
* GUI prompt implementation with a remember password checkbox shall set
* @a may_save to TRUE if the checkbox is checked.
*/
svn_boolean_t may_save;
} svn_auth_cred_ssl_client_cert_pw_t;
/** SSL server verification credential type.
*
* The following auth parameters are available to the providers:
*
* - @c SVN_AUTH_PARAM_CONFIG (@c svn_config_t*)
* - @c SVN_AUTH_PARAM_SERVER_GROUP (@c char*)
* - @c SVN_AUTH_PARAM_SSL_SERVER_FAILURES (@c apr_uint32_t*)
* - @c SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO
* (@c svn_auth_ssl_server_cert_info_t*)
*
* The following optional auth parameters are relevant to the providers:
*
* - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
*/
#define SVN_AUTH_CRED_SSL_SERVER_TRUST "svn.ssl.server"
/** SSL server certificate information used by @c
* SVN_AUTH_CRED_SSL_SERVER_TRUST providers.
*/
typedef struct svn_auth_ssl_server_cert_info_t
{
/** Primary CN */
const char *hostname;
/** ASCII fingerprint */
const char *fingerprint;
/** ASCII date from which the certificate is valid */
const char *valid_from;
/** ASCII date until which the certificate is valid */
const char *valid_until;
/** DN of the certificate issuer */
const char *issuer_dname;
/** Base-64 encoded DER certificate representation */
const char *ascii_cert;
} svn_auth_ssl_server_cert_info_t;
/**
* Return a deep copy of @a info, allocated in @a pool.
*
* @since New in 1.3.
*/
svn_auth_ssl_server_cert_info_t *
svn_auth_ssl_server_cert_info_dup(const svn_auth_ssl_server_cert_info_t *info,
apr_pool_t *pool);
/** @c SVN_AUTH_CRED_SSL_SERVER_TRUST credentials. */
typedef struct svn_auth_cred_ssl_server_trust_t
{
/** Indicates if the credentials may be saved (to disk). For example, a
* GUI prompt implementation with a checkbox to accept the certificate
* permanently shall set @a may_save to TRUE if the checkbox is checked.
*/
svn_boolean_t may_save;
/** Bit mask of the accepted failures */
apr_uint32_t accepted_failures;
} svn_auth_cred_ssl_server_trust_t;
/** Credential-constructing prompt functions. **/
/** These exist so that different client applications can use
* different prompt mechanisms to supply the same credentials. For
* example, if authentication requires a username and password, a
* command-line client's prompting function might prompt first for the
* username and then for the password, whereas a GUI client's would
* present a single dialog box asking for both, and a telepathic
* client's would read all the information directly from the user's
* mind. All these prompting functions return the same type of
* credential, but the information used to construct the credential is
* gathered in an interface-specific way in each case.
*/
/** Set @a *cred by prompting the user, allocating @a *cred in @a pool.
* @a baton is an implementation-specific closure.
*
* If @a realm is non-null, maybe use it in the prompt string.
*
* If @a username is non-null, then the user might be prompted only
* for a password, but @a *cred would still be filled with both
* username and password. For example, a typical usage would be to
* pass @a username on the first call, but then leave it null for
* subsequent calls, on the theory that if credentials failed, it's
* as likely to be due to incorrect username as incorrect password.
*
* If @a may_save is FALSE, the auth system does not allow the credentials
* to be saved (to disk). A prompt function shall not ask the user if the
* credentials shall be saved if @a may_save is FALSE. For example, a GUI
* 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);
/** Set @a *cred by prompting the user, allocating @a *cred in @a pool.
* @a baton is an implementation-specific closure.
*
* If @a realm is non-null, maybe use it in the prompt string.
*
* If @a may_save is FALSE, the auth system does not allow the credentials
* to be saved (to disk). A prompt function shall not ask the user if the
* credentials shall be saved if @a may_save is FALSE. For example, a GUI
* 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);
/** @name SSL server certificate failure bits
*
* @note These values are stored in the on disk auth cache by the SSL
* server certificate auth provider, so the meaning of these bits must
* not be changed.
* @{
*/
/** Certificate is not yet valid. */
#define SVN_AUTH_SSL_NOTYETVALID 0x00000001
/** Certificate has expired. */
#define SVN_AUTH_SSL_EXPIRED 0x00000002
/** Certificate's CN (hostname) does not match the remote hostname. */
#define SVN_AUTH_SSL_CNMISMATCH 0x00000004
/** @brief Certificate authority is unknown (i.e. not trusted) */
#define SVN_AUTH_SSL_UNKNOWNCA 0x00000008
/** @brief Other failure. This can happen if neon has introduced a new
* failure bit that we do not handle yet. */
#define SVN_AUTH_SSL_OTHER 0x40000000
/** @} */
/** Set @a *cred by prompting the user, allocating @a *cred in @a pool.
* @a baton is an implementation-specific closure.
*
* @a cert_info is a structure describing the server cert that was
* presented to the client, and @a failures is a bitmask that
* describes exactly why the cert could not be automatically validated,
* composed from the constants SVN_AUTH_SSL_* (@c SVN_AUTH_SSL_NOTYETVALID
* etc.). @a realm is a string that can be used in the prompt string.
*
* If @a may_save is FALSE, the auth system does not allow the credentials
* to be saved (to disk). A prompt function shall not ask the user if the
* credentials shall be saved if @a may_save is FALSE. For example, a GUI
* 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);
/** Set @a *cred by prompting the user, allocating @a *cred in @a pool.
* @a baton is an implementation-specific closure. @a realm is a string
* that can be used in the prompt string.
*
* If @a may_save is FALSE, the auth system does not allow the credentials
* to be saved (to disk). A prompt function shall not ask the user if the
* credentials shall be saved if @a may_save is FALSE. For example, a GUI
* 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);
/** Set @a *cred by prompting the user, allocating @a *cred in @a pool.
* @a baton is an implementation-specific closure. @a realm is a string
* identifying the certificate, and can be used in the prompt string.
*
* If @a may_save is FALSE, the auth system does not allow the credentials
* to be saved (to disk). A prompt function shall not ask the user if the
* credentials shall be saved if @a may_save is FALSE. For example, a GUI
* 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);
/** Initialize an authentication system.
*
* Return an authentication object in @a *auth_baton (allocated in @a
* pool) that represents a particular instance of the svn
* authentication system. @a providers is an array of @c
* svn_auth_provider_object_t pointers, already allocated in @a pool
* and intentionally ordered. These pointers will be stored within @a
* *auth_baton, grouped by credential type, and searched in this exact
* order.
*/
void svn_auth_open(svn_auth_baton_t **auth_baton,
apr_array_header_t *providers,
apr_pool_t *pool);
/** Set an authentication run-time parameter.
*
* Store @a name / @a value pair as a run-time parameter in @a
* auth_baton, making the data accessible to all providers. @a name
* and @a value will NOT be duplicated into the auth_baton's pool.
* To delete a run-time parameter, pass NULL for @a value.
*/
void svn_auth_set_parameter(svn_auth_baton_t *auth_baton,
const char *name,
const void *value);
/** Get an authentication run-time parameter.
*
* Return a value for run-time parameter @a name from @a auth_baton.
* Return NULL if the parameter doesn't exist.
*/
const void * svn_auth_get_parameter(svn_auth_baton_t *auth_baton,
const char *name);
/** Universal run-time parameters, made available to all providers.
If you are writing a new provider, then to be a "good citizen",
you should notice these global parameters! Note that these
run-time params should be treated as read-only by providers; the
application is responsible for placing them into the auth_baton
hash. */
/** The auth-hash prefix indicating that the parameter is global. */
#define SVN_AUTH_PARAM_PREFIX "svn:auth:"
/**
* @name Default credentials defines
* Any 'default' credentials that came in through the application itself,
* (e.g. --username and --password options). Property values are
* const char *.
* @{ */
#define SVN_AUTH_PARAM_DEFAULT_USERNAME SVN_AUTH_PARAM_PREFIX "username"
#define SVN_AUTH_PARAM_DEFAULT_PASSWORD SVN_AUTH_PARAM_PREFIX "password"
/** @} */
/** @brief The application doesn't want any providers to prompt
* users. Property value is irrelevant; only property's existence
* matters. */
#define SVN_AUTH_PARAM_NON_INTERACTIVE SVN_AUTH_PARAM_PREFIX "non-interactive"
/** @brief The application doesn't want any providers to save passwords
* to disk. Property value is irrelevant; only property's existence
* matters. */
#define SVN_AUTH_PARAM_DONT_STORE_PASSWORDS SVN_AUTH_PARAM_PREFIX \
"dont-store-passwords"
/** @brief The application doesn't want any providers to save credentials
* to disk. Property value is irrelevant; only property's existence
* matters. */
#define SVN_AUTH_PARAM_NO_AUTH_CACHE SVN_AUTH_PARAM_PREFIX "no-auth-cache"
/** @brief The following property is for SSL server cert providers. This
* provides a pointer to an @c apr_uint32_t containing the failures
* detected by the certificate validator. */
#define SVN_AUTH_PARAM_SSL_SERVER_FAILURES SVN_AUTH_PARAM_PREFIX \
"ssl:failures"
/** @brief The following property is for SSL server cert providers. This
* provides the cert info (svn_auth_ssl_server_cert_info_t). */
#define SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO SVN_AUTH_PARAM_PREFIX \
"ssl:cert-info"
/** Some providers need access to the @c svn_config_t configuration. */
#define SVN_AUTH_PARAM_CONFIG SVN_AUTH_PARAM_PREFIX "config"
/** The current server group. */
#define SVN_AUTH_PARAM_SERVER_GROUP SVN_AUTH_PARAM_PREFIX "server-group"
/** @brief A configuration directory that overrides the default
* ~/.subversion. */
#define SVN_AUTH_PARAM_CONFIG_DIR SVN_AUTH_PARAM_PREFIX "config-dir"
/** Get an initial set of credentials.
*
* Ask @a auth_baton to set @a *credentials to a set of credentials
* defined by @a cred_kind and valid within @a realmstring, or NULL if
* no credentials are available. Otherwise, return an iteration state
* in @a *state, so that the caller can call
* svn_auth_next_credentials(), in case the first set of credentials
* fails to authenticate.
*
* Use @a pool to allocate @a *state, and for temporary allocation.
* Note that @a *credentials will be allocated in @a auth_baton's pool.
*/
svn_error_t * svn_auth_first_credentials(void **credentials,
svn_auth_iterstate_t **state,
const char *cred_kind,
const char *realmstring,
svn_auth_baton_t *auth_baton,
apr_pool_t *pool);
/** Get another set of credentials, assuming previous ones failed to
* authenticate.
*
* Use @a state to fetch a different set of @a *credentials, as a
* follow-up to svn_auth_first_credentials() or
* svn_auth_next_credentials(). If no more credentials are available,
* set @a *credentials to NULL.
*
* Note that @a *credentials will be allocated in @c auth_baton's pool.
*/
svn_error_t * svn_auth_next_credentials(void **credentials,
svn_auth_iterstate_t *state,
apr_pool_t *pool);
/** Save a set of credentials.
*
* Ask @a state to store the most recently returned credentials,
* presumably because they successfully authenticated. Use @a pool
* for temporary allocation. If no credentials were ever returned, do
* nothing.
*/
svn_error_t * svn_auth_save_credentials(svn_auth_iterstate_t *state,
apr_pool_t *pool);
/** @} */
/** Create and return @a *provider, an authentication provider of type
* svn_auth_cred_simple_t that gets information by prompting the user
* 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
* 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
* re-prompt @a retry_limit times (via svn_auth_next_credentials()).
*
* @since New in 1.4.
*/
void
svn_auth_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
* 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
* 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
* re-prompt @a retry_limit times (via svn_auth_next_credentials()).
*
* @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);
/** Create and return @a *provider, an authentication provider of type @c
* 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).
*
* @since New in 1.4.
*/
void svn_auth_get_simple_provider(svn_auth_provider_object_t **provider,
apr_pool_t *pool);
#if defined(WIN32) || defined(DOXYGEN)
/**
* Create and return @a *provider, an authentication provider of type @c
* svn_auth_cred_simple_t that gets/sets information from the user's
* ~/.subversion configuration directory. Allocate @a *provider in
* @a pool.
*
* This is like svn_client_get_simple_provider(), except that, when
* running on Window 2000 or newer (or any other Windows version that
* includes the CryptoAPI), the provider encrypts the password before
* storing it to disk. On earlier versions of Windows, the provider
* does nothing.
*
* @since New in 1.4.
* @note This function is only available on Windows.
*
* @note An administrative password reset may invalidate the account's
* secret key. This function will detect that situation and behave as
* if the password were not cached at all.
*/
void
svn_auth_get_windows_simple_provider(svn_auth_provider_object_t **provider,
apr_pool_t *pool);
#endif /* WIN32 || DOXYGEN */
#if defined(DARWIN) || defined(DOXYGEN)
/**
* Create and return @a *provider, an authentication provider of type @c
* svn_auth_cred_simple_t that gets/sets information from the user's
* ~/.subversion configuration directory. Allocate @a *provider in
* @a pool.
*
* This is like svn_client_get_simple_provider(), except that the
* password is stored in the Mac OS KeyChain.
*
* @since New in 1.4
* @note This function is only available on Mac OS 10.2 and higher.
*/
void
svn_auth_get_keychain_simple_provider(svn_auth_provider_object_t **provider,
apr_pool_t *pool);
#endif /* DARWIN || DOXYGEN */
/** Create and return @a *provider, an authentication provider of type @c
* 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.)
*
* @since New in 1.4.
*/
void svn_auth_get_username_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.
*
* @a *provider retrieves its credentials from the configuration
* mechanism. The returned credential is used to override SSL
* security on an error.
*
* @since New in 1.4.
*/
void svn_auth_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.
*
* @a *provider retrieves its credentials from the configuration
* mechanism. The returned credential is used to load the appropriate
* client certificate for authentication when requested by a server.
*
* @since New in 1.4.
*/
void svn_auth_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.
*
* @a *provider retrieves its credentials from the configuration
* mechanism. The returned credential is used when a loaded client
* certificate is protected by a passphrase.
*
* @since New in 1.4.
*/
void svn_auth_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.
*
* @a *provider retrieves its credentials by using the @a prompt_func
* and @a prompt_baton. The returned credential is used to override
* SSL security on an error.
*
* @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);
/** Create and return @a *provider, an authentication provider of type @c
* 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
* appropriate client certificate for authentication when requested by
* a server. The prompt will be retried @a retry_limit times.
*
* @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);
/** Create and return @a *provider, an authentication provider of type @c
* 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
* client certificate is protected by a passphrase. The prompt will
* be retried @a retry_limit times.
*
* @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);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_AUTH_H */
--- NEW FILE: svn_types.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_types.h
* @brief Subversion's data types
*/
#ifndef SVN_TYPES_H
#define SVN_TYPES_H
/* ### this should go away, but it causes too much breakage right now */
#include <stdlib.h>
#include <apr.h> /* for apr_size_t */
#include <apr_pools.h>
#include <apr_hash.h>
#include <apr_tables.h>
#include <apr_time.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Subversion error object.
*
* Defined here, rather than in svn_error.h, to avoid a recursive @#include
* situation.
*/
typedef struct svn_error_t
{
/** APR error value, possibly SVN_ custom err */
apr_status_t apr_err;
/** details from producer of error */
const char *message;
/** ptr to the error we "wrap" */
struct svn_error_t *child;
/** The pool holding this error and any child errors it wraps */
apr_pool_t *pool;
/** Source file where the error originated. Only used iff @c SVN_DEBUG. */
const char *file;
/** Source line where the error originated. Only used iff @c SVN_DEBUG. */
long line;
} svn_error_t;
/** @defgroup APR_ARRAY_compat_macros APR Array Compatibility Helper Macros
* These macros are provided by APR itself from version 1.3.
* Definitions are provided here for when using older versions of APR.
* @{
*/
/** index into an apr_array_header_t */
#ifndef APR_ARRAY_IDX
#define APR_ARRAY_IDX(ary,i,type) (((type *)(ary)->elts)[i])
#endif
/** easier array-pushing syntax */
#ifndef APR_ARRAY_PUSH
#define APR_ARRAY_PUSH(ary,type) (*((type *)apr_array_push(ary)))
#endif
/** @} */
/** The various types of nodes in the Subversion filesystem. */
typedef enum
{
/* absent */
svn_node_none,
/* regular file */
svn_node_file,
/* directory */
svn_node_dir,
/* something's here, but we don't know what */
svn_node_unknown
} svn_node_kind_t;
/** About Special Files in Subversion
*
* Subversion denotes files that cannot be portably created or
* modified as "special" files (svn_node_special). It stores these
* files in the repository as a plain text file with the svn:special
* property set. The file contents contain: a platform-specific type
* string, a space character, then any information necessary to create
* the file on a supported platform. For example, if a symbolic link
* were being represented, the repository file would have the
* following contents:
*
* "link /path/to/link/target"
*
* Where 'link' is the identifier string showing that this special
* file should be a symbolic link and '/path/to/link/target' is the
* destination of the symbolic link.
*
* Special files are stored in the text-base exactly as they are
* stored in the repository. The platform specific files are created
* in the working copy at EOL/keyword translation time using
* svn_subst_copy_and_translate2(). If the current platform does not
* support a specific special file type, the file is copied into the
* working copy as it is seen in the repository. Because of this,
* users of other platforms can still view and modify the special
* files, even if they do not have their unique properties.
*
* New types of special files can be added by:
* 1. Implementing a platform-dependent routine to create a uniquely
* named special file and one to read the special file in
* libsvn_subr/io.c.
* 2. Creating a new textual name similar to
* SVN_SUBST__SPECIAL_LINK_STR in libsvn_subr/subst.c.
* 3. Handling the translation/detranslation case for the new type in
* create_special_file and detranslate_special_file, using the
* routines from 1.
*/
/** A revision number. */
typedef long int svn_revnum_t;
/** Valid revision numbers begin at 0 */
#define SVN_IS_VALID_REVNUM(n) ((n) >= 0)
/** The 'official' invalid revision num */
#define SVN_INVALID_REVNUM ((svn_revnum_t) -1)
/** 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.
*/
#define SVN_IGNORED_REVNUM ((svn_revnum_t) -1)
/** Convert null-terminated C string @a str to a revision number. */
#define SVN_STR_TO_REV(str) ((svn_revnum_t) atol(str))
/** In printf()-style functions, format revision numbers using this.
* Do not use this macro within the Subversion project source code, because
* the language translation tools have trouble parsing it. */
#define SVN_REVNUM_T_FMT "ld"
/** The size of a file in the Subversion FS. */
typedef apr_int64_t svn_filesize_t;
/** The 'official' invalid file size constant. */
#define SVN_INVALID_FILESIZE ((svn_filesize_t) -1)
/** In printf()-style functions, format file sizes using this. */
#define SVN_FILESIZE_T_FMT APR_INT64_T_FMT
#ifndef DOXYGEN_SHOULD_SKIP_THIS
/* Parse a base-10 numeric string into a 64-bit unsigned numeric value. */
/* NOTE: Private. For use by Subversion's own code only. See issue #1644. */
/* FIXME: APR should supply a function to do this, such as "apr_atoui64". */
#define svn__atoui64(X) ((apr_uint64_t) apr_atoi64(X))
#endif
/** YABT: Yet Another Boolean Type */
typedef int svn_boolean_t;
#ifndef TRUE
/** uhh... true */
#define TRUE 1
#endif /* TRUE */
#ifndef FALSE
/** uhh... false */
#define FALSE 0
#endif /* FALSE */
/** An enum to indicate whether recursion is needed. */
enum svn_recurse_kind
{
svn_nonrecursive = 1,
svn_recursive
};
/**
* It is sometimes convenient to indicate which parts of an @c 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.
*
* @defgroup svn_dirent_fields dirent fields
* @{
*/
/** An indication that you are interested in the @c kind field */
#define SVN_DIRENT_KIND 0x00001
/** An indication that you are interested in the @c size field */
#define SVN_DIRENT_SIZE 0x00002
/** An indication that you are interested in the @c has_props field */
#define SVN_DIRENT_HAS_PROPS 0x00004
/** An indication that you are interested in the @c created_rev field */
#define SVN_DIRENT_CREATED_REV 0x00008
/** An indication that you are interested in the @c time field */
#define SVN_DIRENT_TIME 0x00010
/** An indication that you are interested in the @c last_author field */
#define SVN_DIRENT_LAST_AUTHOR 0x00020
/** A combination of all the dirent fields */
#define SVN_DIRENT_ALL ~((apr_uint32_t ) 0)
/** @} */
/** A general subversion directory entry. */
typedef struct svn_dirent_t
{
/** node kind */
svn_node_kind_t kind;
/** length of file text, or 0 for directories */
svn_filesize_t size;
/** does the node have props? */
svn_boolean_t has_props;
/** last rev in which this node changed */
svn_revnum_t created_rev;
/** time of created_rev (mod-time) */
apr_time_t time;
/** author of created_rev */
const char *last_author;
/* IMPORTANT: If you extend this struct, check svn_dirent_dup(). */
} svn_dirent_t;
/** Return a deep copy of @a dirent, allocated in @a pool.
*
* @since New in 1.4.
*/
svn_dirent_t *svn_dirent_dup(const svn_dirent_t *dirent,
apr_pool_t *pool);
/** Keyword substitution.
*
* All the keywords Subversion recognizes.
*
* Note that there is a better, more general proposal out there, which
* would take care of both internationalization issues and custom
* keywords (e.g., $NetBSD$). See
*
*<pre> http://subversion.tigris.org/servlets/ReadMsg?list=dev&msgNo=8921
* =====
* From: "Jonathan M. Manning" <jmanning at alisa-jon.net>
* To: dev at subversion.tigris.org
* Date: Fri, 14 Dec 2001 11:56:54 -0500
* Message-ID: <87970000.1008349014 at bdldevel.bl.bdx.com>
* Subject: Re: keywords</pre>
*
* and Eric Gillespie's support of same:
*
*<pre> http://subversion.tigris.org/servlets/ReadMsg?list=dev&msgNo=8757
* =====
* From: "Eric Gillespie, Jr." <epg at pretzelnet.org>
* To: dev at subversion.tigris.org
* Date: Wed, 12 Dec 2001 09:48:42 -0500
* Message-ID: <87k7vsebp1.fsf at vger.pretzelnet.org>
* Subject: Re: Customizable Keywords</pre>
*
* However, it is considerably more complex than the scheme below.
* For now we're going with simplicity, hopefully the more general
* solution can be done post-1.0.
*
* @defgroup svn_types_keywords keywords
* @{
*/
/** The maximum size of an expanded or un-expanded keyword. */
#define SVN_KEYWORD_MAX_LEN 255
/** The most recent revision in which this file was changed. */
#define SVN_KEYWORD_REVISION_LONG "LastChangedRevision"
/** Short version of LastChangedRevision */
#define SVN_KEYWORD_REVISION_SHORT "Rev"
/** Medium version of LastChangedRevision, matching the one CVS uses.
* @since New in 1.1. */
#define SVN_KEYWORD_REVISION_MEDIUM "Revision"
/** The most recent date (repository time) when this file was changed. */
#define SVN_KEYWORD_DATE_LONG "LastChangedDate"
/** Short version of LastChangedDate */
#define SVN_KEYWORD_DATE_SHORT "Date"
/** Who most recently committed to this file. */
#define SVN_KEYWORD_AUTHOR_LONG "LastChangedBy"
/** Short version of LastChangedBy */
#define SVN_KEYWORD_AUTHOR_SHORT "Author"
/** The URL for the head revision of this file. */
#define SVN_KEYWORD_URL_LONG "HeadURL"
/** Short version of HeadURL */
#define SVN_KEYWORD_URL_SHORT "URL"
/** A compressed combination of the other four keywords. */
#define SVN_KEYWORD_ID "Id"
/** @} */
/** All information about a commit.
*
* @note Objects of this type should always be created using the
* svn_create_commit_info() function.
*
* @since New in 1.3.
*/
typedef struct svn_commit_info_t
{
/** just-committed revision. */
svn_revnum_t revision;
/** server-side date of the commit. */
const char *date;
/** author of the commit. */
const char *author;
/** error message from post-commit hook, or NULL. */
const char *post_commit_err;
} svn_commit_info_t;
/**
* Allocate an object of type @c 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.
*
* @note Any object of the type @c svn_commit_info_t should
* be created using this function.
* This is to provide for extending the svn_commit_info_t in
* the future.
*
* @since New in 1.3.
*/
svn_commit_info_t *
svn_create_commit_info(apr_pool_t *pool);
/**
* Return a deep copy @a src_commit_info allocated in @a pool.
*
* @since New in 1.4.
*/
svn_commit_info_t *
svn_commit_info_dup(const svn_commit_info_t *src_commit_info,
apr_pool_t *pool);
/** A structure to represent a path that changed for a log entry. */
typedef struct svn_log_changed_path_t
{
/** 'A'dd, 'D'elete, 'R'eplace, 'M'odify */
char action;
/** Source path of copy (if any). */
const char *copyfrom_path;
/** Source revision of copy (if any). */
svn_revnum_t copyfrom_rev;
} svn_log_changed_path_t;
/**
* Return a deep copy of @a changed_path, allocated in @a pool.
*
* @since New in 1.3.
*/
svn_log_changed_path_t *
svn_log_changed_path_dup(const svn_log_changed_path_t *changed_path,
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().
*
* This function is invoked once on each log message, in the order
* determined by the caller (see above-mentioned functions).
*
* @a baton, @a revision, @a author, @a date, and @a message are what you
* think they are. Any of @a author, @a date, or @a message may be @c NULL.
*
* If @a date is neither null nor the empty string, it was generated by
* svn_time_to_cstring() and can be converted to @c apr_time_t with
* svn_time_from_cstring().
*
* If @a changed_paths is non- at c NULL, then it contains as keys every path
* committed in @a revision; the values are (@c svn_log_changed_path_t *)
* structures.
*
* ### The only reason @a changed_paths is not qualified with `const' is
* that we usually want to loop over it, and apr_hash_first() doesn't
* take a const hash, for various reasons. I'm not sure that those
* "various reasons" are actually even relevant anymore, and if
* they're not, it might be nice to change apr_hash_first() so
* read-only uses of hashes can be protected via the type system.
*
* Use @a pool for temporary allocation. If the caller is iterating
* over log messages, invoking this receiver on each, we recommend the
* standard pool loop recipe: create a subpool, pass it as @a pool to
* each call, clear it after each iteration, destroy it after the loop
* is done. (For allocation that must last beyond the lifetime of a
* given receiver call, use a pool in @a baton.)
*/
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.
*
* When a commit succeeds, an instance of this is invoked with the
* @a commit_info, along with the @a baton closure.
* @a pool can be used for temporary allocations.
*
* @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);
/** Same as @c svn_commit_callback2_t, but uses individual
* data elements instead of the @c 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);
/** Return, in @a *callback2 and @a *callback2_baton a function/baton that
* will call @a callback/@a callback_baton, allocating the @a *callback2_baton
* in @a pool.
*
* @note This is used by compatibility wrappers, which exist in more than
* Subversion core library.
*
* @since New in 1.4.
*/
void svn_compat_wrap_commit_callback(svn_commit_callback2_t *callback2,
void **callback2_baton,
svn_commit_callback_t callback,
void *callback_baton,
apr_pool_t *pool);
/** A buffer size that may be used when processing a stream of data.
*
* @note We don't use this constant any longer, since it is considered to be
* unnecessarily large.
*
* @deprecated Provided for backwards compatibility with the 1.3 API.
*/
#define SVN_STREAM_CHUNK_SIZE 102400
#ifndef DOXYGEN_SHOULD_SKIP_THIS
/*
* The maximum amount we (ideally) hold in memory at a time when
* processing a stream of data.
*
* For example, when copying data from one stream to another, do it in
* blocks of this size.
*
* NOTE: This is an internal macro, put here for convenience.
* No public API may depend on the particular value of this macro.
*/
#define SVN__STREAM_CHUNK_SIZE 16384
#endif
/** The maximum amount we can ever hold in memory. */
/* FIXME: Should this be the same as SVN_STREAM_CHUNK_SIZE? */
#define SVN_MAX_OBJECT_SIZE (((apr_size_t) -1) / 2)
/* ### Note: despite being about mime-TYPES, these probably don't
* ### belong in svn_types.h. However, no other header is more
* ### appropriate, and didn't feel like creating svn_validate.h for
* ### so little.
*/
/** 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.
*
* Use @a pool only to find error allocation.
*
* Goal: to match both "foo/bar" and "foo/bar; charset=blah", without
* being too strict about it, but to disallow mime types that have
* quotes, newlines, or other garbage on the end, such as might be
* unsafe in an HTTP header.
*/
svn_error_t *svn_mime_type_validate(const char *mime_type,
apr_pool_t *pool);
/** Return false iff @a mime_type is a textual type.
*
* All mime types that start with "text/" are textual, plus some special
* cases (for example, "image/x-xbitmap").
*/
svn_boolean_t svn_mime_type_is_binary(const char *mime_type);
/** 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.
*/
typedef svn_error_t *(*svn_cancel_func_t)(void *cancel_baton);
/**
* A lock object, for client & server to share.
*
* A lock represents the exclusive right to add, delete, or modify a
* path. A lock is created in a repository, wholly controlled by the
* repository. A "lock-token" is the lock's UUID, and can be used to
* learn more about a lock's fields, and or/make use of the lock.
* Because a lock is immutable, a client is free to not only cache the
* lock-token, but the lock's fields too, for convenience.
*
* Note that the 'is_dav_comment' field is wholly ignored by every
* library except for mod_dav_svn. The field isn't even marshalled
* over the network to the client. Assuming lock structures are
* created with apr_pcalloc(), a default value of 0 is universally safe.
*
* @note in the current implementation, only files are lockable.
*
* @since New in 1.2.
*/
typedef struct svn_lock_t
{
const char *path; /**< the path this lock applies to */
const char *token; /**< unique URI representing lock */
const char *owner; /**< the username which owns the lock */
const char *comment; /**< (optional) description of lock */
svn_boolean_t is_dav_comment; /**< was comment made by generic DAV client? */
apr_time_t creation_date; /**< when lock was made */
apr_time_t expiration_date; /**< (optional) when lock will expire;
If value is 0, lock will never expire. */
} svn_lock_t;
/**
* Returns an @c 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
* releases, this function should always be used to allocate the structure.
*
* @since New in 1.2.
*/
svn_lock_t *
svn_lock_create(apr_pool_t *pool);
/**
* Return a deep copy of @a lock, allocated in @a pool.
*
* @since New in 1.2.
*/
svn_lock_t *
svn_lock_dup(const svn_lock_t *lock, apr_pool_t *pool);
/**
* Return a formatted Universal Unique IDentifier (UUID) string.
*
* @since New in 1.4.
*/
const char *
svn_uuid_generate(apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_TYPES_H */
--- NEW FILE: svn_ra_svn.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_ra_svn.h
* @brief libsvn_ra_svn functions used by the server
*/
#ifndef SVN_RA_SVN_H
#define SVN_RA_SVN_H
#include <apr.h>
#include <apr_pools.h>
#include <apr_network_io.h>
#include "svn_config.h"
#include "svn_delta.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** The well-known svn port number. */
#define SVN_RA_SVN_PORT 3690
/** Currently-defined capabilities. */
#define SVN_RA_SVN_CAP_EDIT_PIPELINE "edit-pipeline"
#define SVN_RA_SVN_CAP_SVNDIFF1 "svndiff1"
#define SVN_RA_SVN_CAP_ABSENT_ENTRIES "absent-entries"
/** 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.
*
* @defgroup ra_svn_dirent_fields ra_svn dirent fields
* @{
*/
/** The ra_svn way of saying @c SVN_DIRENT_KIND. */
#define SVN_RA_SVN_DIRENT_KIND "kind"
/** The ra_svn way of saying @c SVN_DIRENT_SIZE. */
#define SVN_RA_SVN_DIRENT_SIZE "size"
/** The ra_svn way of saying @c SVN_DIRENT_HAS_PROPS. */
#define SVN_RA_SVN_DIRENT_HAS_PROPS "has-props"
/** The ra_svn way of saying @c SVN_DIRENT_CREATED_REV. */
#define SVN_RA_SVN_DIRENT_CREATED_REV "created-rev"
/** The ra_svn way of saying @c SVN_DIRENT_TIME. */
#define SVN_RA_SVN_DIRENT_TIME "time"
/** The ra_svn way of saying @c SVN_DIRENT_LAST_AUTHOR. */
#define SVN_RA_SVN_DIRENT_LAST_AUTHOR "last-author"
/** @} */
/** A value used to indicate an optional number element in a tuple that was
* not received.
*/
#define SVN_RA_SVN_UNSPECIFIED_NUMBER ~((apr_uint64_t) 0)
/** A specialized form of @c SVN_ERR to deal with errors which occur in an
* svn_ra_svn_command_handler().
*
* An error returned with this macro will be passed back to the other side
* of the connection. Use this macro when performing the requested operation;
* use the regular @c SVN_ERR when performing I/O with the client.
*/
#define SVN_CMD_ERR(expr) \
do { \
svn_error_t *svn_err__temp = (expr); \
if (svn_err__temp) \
return svn_error_create(SVN_ERR_RA_SVN_CMD_ERR, \
svn_err__temp, NULL); \
} while (0)
/** an ra_svn connection. */
typedef struct svn_ra_svn_conn_st svn_ra_svn_conn_t;
/** Command handler, used by svn_ra_svn_handle_commands(). */
typedef svn_error_t *(*svn_ra_svn_command_handler)(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
apr_array_header_t *params,
void *baton);
/** Command table, used by svn_ra_svn_handle_commands().
*
* If @c terminate is set, command-handling will cease after command is
* processed.
*/
typedef struct svn_ra_svn_cmd_entry_t
{
const char *cmdname;
svn_ra_svn_command_handler handler;
svn_boolean_t terminate;
} svn_ra_svn_cmd_entry_t;
/** Memory representation of an on-the-wire data item. */
typedef struct svn_ra_svn_item_t
{
/** Variant indicator. */
enum {
SVN_RA_SVN_NUMBER,
SVN_RA_SVN_STRING,
SVN_RA_SVN_WORD,
SVN_RA_SVN_LIST
} kind;
/** Variant data. */
union {
apr_uint64_t number;
svn_string_t *string;
const char *word;
/** Contains @c svn_ra_svn_item_t's. */
apr_array_header_t *list;
} u;
} svn_ra_svn_item_t;
typedef svn_error_t *(*svn_ra_svn_edit_callback)(void *baton);
/** Initialize a connection structure for the given socket or
* input/output files.
*
* Either @a sock or @a in_file/@a out_file must be set, not both.
*/
svn_ra_svn_conn_t *svn_ra_svn_create_conn(apr_socket_t *sock,
apr_file_t *in_file,
apr_file_t *out_file,
apr_pool_t *pool);
/** Initialize a connection's capabilities to the ones specified in
* @a list, which contains svn_ra_svn_item_t entries (which should
* be of type SVN_RA_SVN_WORD; a malformed data error will result if
* any are not). */
svn_error_t *svn_ra_svn_set_capabilities(svn_ra_svn_conn_t *conn,
apr_array_header_t *list);
/** Return @c TRUE if @a conn has the capability @a capability, or
* @c FALSE if it does not. */
svn_boolean_t svn_ra_svn_has_capability(svn_ra_svn_conn_t *conn,
const char *capability);
/** Write a number over the net.
*
* Writes will be buffered until the next read or flush.
*/
svn_error_t *svn_ra_svn_write_number(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
apr_uint64_t number);
/** Write a string over the net.
*
* Writes will be buffered until the next read or flush.
*/
svn_error_t *svn_ra_svn_write_string(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const svn_string_t *str);
/** Write a cstring over the net.
*
* Writes will be buffered until the next read or flush.
*/
svn_error_t *svn_ra_svn_write_cstring(svn_ra_svn_conn_t *conn,
apr_pool_t *pool, const char *s);
/** Write a word over the net.
*
* Writes will be buffered until the next read or flush.
*/
svn_error_t *svn_ra_svn_write_word(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *word);
/** Begin a list. Writes will be buffered until the next read or flush. */
svn_error_t *svn_ra_svn_start_list(svn_ra_svn_conn_t *conn, apr_pool_t *pool);
/** End a list. Writes will be buffered until the next read or flush. */
svn_error_t *svn_ra_svn_end_list(svn_ra_svn_conn_t *conn, apr_pool_t *pool);
/** Flush the write buffer.
*
* Normally this shouldn't be necessary, since the write buffer is flushed
* when a read is attempted.
*/
svn_error_t *svn_ra_svn_flush(svn_ra_svn_conn_t *conn, apr_pool_t *pool);
/** Write a tuple, using a printf-like interface.
*
* The format string @a fmt may contain:
*
*<pre>
* Spec Argument type Item type
* ---- -------------------- ---------
* n apr_uint64_t Number
* r svn_revnum_t Number
* s const svn_string_t * String
* c const char * String
* w const char * Word
* b svn_boolean_t Word ("true" or "false")
* ( Begin tuple
* ) End tuple
* ? Remaining elements optional
* ! (at beginning or end) Suppress opening or closing of tuple
* </pre>
*
* Inside the optional part of a tuple, 'r' values may be @c
* SVN_INVALID_REVNUM, 'n' values may be
* SVN_RA_SVN_UNSPECIFIED_NUMBER, and 's', 'c', and 'w' values may be
* @c NULL; in these cases no data will be written. 'b' and '(' may
* not appear in the optional part of a tuple. Either all or none of
* the optional values should be valid.
*
* (If we ever have a need for an optional boolean value, we should
* invent a 'B' specifier which stores a boolean into an int, using -1
* for unspecified. Right now there is no need for such a thing.)
*
* 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:
* 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));
*/
svn_error_t *svn_ra_svn_write_tuple(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *fmt, ...);
/** Read an item from the network into @a *item. */
svn_error_t *svn_ra_svn_read_item(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_ra_svn_item_t **item);
/** Scan data on @a conn until we find something which looks like the
* beginning of an svn server greeting (an open paren followed by a
* whitespace character). This function is appropriate for beginning
* a client connection opened in tunnel mode, since people's dotfiles
* sometimes write output to stdout. It may only be called at the
* beginning of a client connection.
*/
svn_error_t *svn_ra_svn_skip_leading_garbage(svn_ra_svn_conn_t *conn,
apr_pool_t *pool);
/** Parse an array of @c svn_sort__item_t structures as a tuple, using a
* printf-like interface. The format string @a fmt may contain:
*
*<pre>
* Spec Argument type Item type
* ---- -------------------- ---------
* n apr_uint64_t * Number
* r svn_revnum_t * Number
* s svn_string_t ** String
* c const char ** String
* w const char ** Word
* b svn_boolean_t * Word ("true" or "false")
* l apr_array_header_t ** List
* ( Begin tuple
* ) End tuple
* ? Tuple is allowed to end here
*</pre>
*
* Note that a tuple is only allowed to end precisely at a '?', or at
* the end of the specification. So if @a fmt is "c?cc" and @a list
* contains two elements, an error will result.
*
* If an optional part of a tuple contains no data, 'r' values will be
* set to @c SVN_INVALID_REVNUM, 'n' values will be set to
* SVN_RA_SVN_UNSPECIFIED_NUMBER, and 's', 'c', 'w', and 'l' values
* will be set to @c NULL. 'b' may not appear inside an optional
* tuple specification.
*/
svn_error_t *svn_ra_svn_parse_tuple(apr_array_header_t *list,
apr_pool_t *pool,
const char *fmt, ...);
/** Read a tuple from the network and parse it as a tuple, using the
* format string notation from svn_ra_svn_parse_tuple().
*/
svn_error_t *svn_ra_svn_read_tuple(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *fmt, ...);
/** Read a command response from the network and parse it as a tuple, using
* the format string notation from svn_ra_svn_parse_tuple().
*/
svn_error_t *svn_ra_svn_read_cmd_response(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
const char *fmt, ...);
/** Accept commands over the network and handle them according to @a
* commands. Command handlers will be passed @a conn, a subpool of @a
* pool (cleared after each command is handled), the parameters of the
* command, and @a baton. Commands will be accepted until a
* terminating command is received (a command with "terminate" set in
* the command table). If a command handler returns an error wrapped
* in SVN_RA_SVN_CMD_ERR (see the @c SVN_CMD_ERR macro), the error
* will be reported to the other side of the connection and the
* command loop will continue; any other kind of error (typically a
* network or protocol error) is passed through to the caller.
*/
svn_error_t *svn_ra_svn_handle_commands(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
const svn_ra_svn_cmd_entry_t *commands,
void *baton);
/** Write a command over the network, using the same format string notation
* as svn_ra_svn_write_tuple().
*/
svn_error_t *svn_ra_svn_write_cmd(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const char *cmdname, const char *fmt, ...);
/** Write a successful command response over the network, using the
* same format string notation as svn_ra_svn_write_tuple(). Do not use
* partial tuples with this function; if you need to use partial
* tuples, just write out the "success" and argument tuple by hand.
*/
svn_error_t *svn_ra_svn_write_cmd_response(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
const char *fmt, ...);
/** Write an unsuccessful command response over the network. */
svn_error_t *svn_ra_svn_write_cmd_failure(svn_ra_svn_conn_t *conn,
apr_pool_t *pool, svn_error_t *err);
/** Set @a *editor and @a *edit_baton to an editor which will pass editing
* operations over the network, using @a conn and @a pool.
*
* Upon successful completion of the edit, the editor will invoke @a callback
* with @a callback_baton as an argument.
*/
void svn_ra_svn_get_editor(const svn_delta_editor_t **editor,
void **edit_baton, svn_ra_svn_conn_t *conn,
apr_pool_t *pool, svn_ra_svn_edit_callback callback,
void *callback_baton);
/** Receive edit commands over the network and use them to drive @a editor
* with @a edit_baton. On return, @a *aborted will be set if the edit was
* aborted. The drive can be terminated with a finish-replay command only
* if @a for_replay is true.
*/
svn_error_t *svn_ra_svn_drive_editor2(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
const svn_delta_editor_t *editor,
void *edit_baton,
svn_boolean_t *aborted,
svn_boolean_t for_replay);
/** Like svn_ra_svn_drive_editor2, but with @a for_replay always FALSE.
*/
svn_error_t *svn_ra_svn_drive_editor(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
const svn_delta_editor_t *editor,
void *edit_baton,
svn_boolean_t *aborted);
/** This function is only intended for use by svnserve.
*
* Perform CRAM-MD5 password authentication. On success, return
* SVN_NO_ERROR with *user set to the username and *success set to
* TRUE. On an error which can be reported to the client, report the
* error and return SVN_NO_ERROR with *success set to FALSE. On
* communications failure, return an error.
*/
svn_error_t *svn_ra_svn_cram_server(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
svn_config_t *pwdb, const char **user,
svn_boolean_t *success);
/**
* Get libsvn_ra_svn version information.
* @since New in 1.1.
*/
const svn_version_t *svn_ra_svn_version(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_RA_SVN_H */
--- NEW FILE: svn_client.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_client.h
* @brief Public interface for libsvn_client.
[...2700 lines suppressed...]
*
* Use the authentication baton stored in @a ctx for authentication.
* @a *session is allocated in @a pool.
*
* @since New in 1.3.
*
* @note This function is similar to svn_ra_open2(), but the caller avoids
* having to providing its own callback functions.
*/
svn_error_t *
svn_client_open_ra_session(svn_ra_session_t **session,
const char *url,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_CLIENT_H */
--- NEW FILE: svn_dav.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_dav.h
* @brief Code related to WebDAV/DeltaV usage in Subversion.
*/
#ifndef SVN_DAV_H
#define SVN_DAV_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** This is the MIME type that Subversion uses for its "svndiff" format.
*
* This is an application type, for the "svn" vendor. The specific subtype
* is "svndiff".
*/
#define SVN_SVNDIFF_MIME_TYPE "application/vnd.svn-svndiff"
/** 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.
*/
#define SVN_DAV_DELTA_BASE_HEADER "X-SVN-VR-Base"
/** This header is used when an svn client wants to trigger specific
* svn server behaviors. Normal WebDAV or DeltaV clients won't use it.
*/
#define SVN_DAV_OPTIONS_HEADER "X-SVN-Options"
/**
* @name options-header defines
* Specific options that can appear in the options-header:
* @{
*/
#define SVN_DAV_OPTION_NO_MERGE_RESPONSE "no-merge-response"
#define SVN_DAV_OPTION_LOCK_BREAK "lock-break"
#define SVN_DAV_OPTION_LOCK_STEAL "lock-steal"
#define SVN_DAV_OPTION_RELEASE_LOCKS "release-locks"
#define SVN_DAV_OPTION_KEEP_LOCKS "keep-locks"
/** @} */
/** This header is used when an svn client wants to tell mod_dav_svn
* exactly what revision of a resource it thinks it's operating on.
* (For example, an svn server can use it to validate a DELETE request.)
* Normal WebDAV or DeltaV clients won't use it.
*/
#define SVN_DAV_VERSION_NAME_HEADER "X-SVN-Version-Name"
/** A header generated by mod_dav_svn whenever it responds
successfully to a LOCK request. Only svn clients will notice it,
and use it to fill in svn_lock_t->creation_date. */
#define SVN_DAV_CREATIONDATE_HEADER "X-SVN-Creation-Date"
/** A header generated by mod_dav_svn whenever it responds
successfully to a PROPFIND for the 'DAV:lockdiscovery' property.
Only svn clients will notice it, and use it to fill in
svn_lock_t->owner. (Remember that the DAV:owner field maps to
svn_lock_t->comment, and that there is no analogue in the DAV
universe of svn_lock_t->owner.) */
#define SVN_DAV_LOCK_OWNER_HEADER "X-SVN-Lock-Owner"
/**
* @name Fulltext MD5 headers
*
* These headers are for client and server to verify that the base
* and the result of a change transmission are the same on both
* sides, regardless of what transformations (svndiff deltification,
* gzipping, etc) the data may have gone through in between.
*
* The result md5 is always used whenever file contents are
* transferred, because every transmission has a resulting text.
*
* The base md5 is used to verify the base text against which svndiff
* data is being applied. Note that even for svndiff transmissions,
* base verification is not strictly necessary (and may therefore be
* unimplemented), as any error will be caught by the verification of
* the final result. However, if the problem is that the base text is
* corrupt, the error will be caught earlier if the base md5 is used.
*
* Normal WebDAV or DeltaV clients don't use these.
* @{
*/
#define SVN_DAV_BASE_FULLTEXT_MD5_HEADER "X-SVN-Base-Fulltext-MD5"
#define SVN_DAV_RESULT_FULLTEXT_MD5_HEADER "X-SVN-Result-Fulltext-MD5"
/** @} */
/* ### should add strings for the various XML elements in the reports
### and things. also the custom prop names. etc.
*/
/** The svn-specific object that is placed within a <D:error> response.
*
* @defgroup svn_dav_error svn_dav errors
* @{ */
/** The error object's namespace */
#define SVN_DAV_ERROR_NAMESPACE "svn:"
/** The error object's tag */
#define SVN_DAV_ERROR_TAG "error"
/** @} */
/** General property (xml) namespaces that will be used by both ra_dav
* and mod_dav_svn for marshalling properties.
*
* @defgroup svn_dav_property_xml_namespaces dav property namespaces
* @{
*/
/** A property stored in the fs and wc, begins with 'svn:', and is
* interpreted either by client or server.
*/
#define SVN_DAV_PROP_NS_SVN "http://subversion.tigris.org/xmlns/svn/"
/** A property stored in the fs and wc, but totally ignored by svn
* client and server.
*
* A property simply invented by the users.
*/
#define SVN_DAV_PROP_NS_CUSTOM "http://subversion.tigris.org/xmlns/custom/"
/** A property purely generated and consumed by the network layer, not
* seen by either fs or wc.
*/
#define SVN_DAV_PROP_NS_DAV "http://subversion.tigris.org/xmlns/dav/"
/** @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_DAV_H */
--- NEW FILE: svn_io.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_io.h
* @brief General file I/O for Subversion
[...1102 lines suppressed...]
* all allocations.
*/
svn_error_t *
svn_io_read_version_file(int *version, const char *path, apr_pool_t *pool);
/** Create (or overwrite) the file at @a path with new contents,
* formatted as a non-negative integer @a version followed by a single
* newline. On successful completion the file will be read-only. Use
* @a pool for all allocations.
*/
svn_error_t *
svn_io_write_version_file(const char *path, int version, apr_pool_t *pool);
/** @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_IO_H */
--- NEW FILE: svn_repos.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_repos.h
* @brief tools built on top of the filesystem.
[...1832 lines suppressed...]
*
* If @a path is NULL, then check whether @a user has the @a
* required_access anywhere in the repository. Set @a *access_granted
* to TRUE if at least one path is accessible with the @a
* required_access.
*
* @since New in 1.3.
*/
svn_error_t *
svn_repos_authz_check_access(svn_authz_t *authz, const char *repos_name,
const char *path, const char *user,
svn_repos_authz_access_t required_access,
svn_boolean_t *access_granted,
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_REPOS_H */
--- NEW FILE: svn_props.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_props.h
* @brief Subversion properties
*/
/* ==================================================================== */
#ifndef SVN_PROPS_H
#define SVN_PROPS_H
#include <apr_pools.h>
#include <apr_tables.h>
#include "svn_string.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** A general in-memory representation of a single property. Most of
* the time, property lists will be stored completely in hashes. But
* sometimes it's useful to have an "ordered" collection of
* properties, in which case we use an array of these structures.
*
* Also: sometimes we want a list that represents a set of property
* *changes*, and in this case, an @c apr_hash_t won't work -- there's no
* way to represent a property deletion, because we can't store a @c NULL
* value in a hash. So instead, we use these structures.
*/
typedef struct svn_prop_t
{
const char *name; /**< Property name */
const svn_string_t *value; /**< Property value */
} svn_prop_t;
/**
* Return a duplicate of @a prop, allocated in @a pool. No part of the new
* structure will be shared with @a prop.
*
* @since New in 1.3.
*/
svn_prop_t *svn_prop_dup(const svn_prop_t *prop, apr_pool_t *pool);
/**
* Duplicate an @a array of svn_prop_t items using @a pool.
*
* @since New in 1.3.
*/
apr_array_header_t *
svn_prop_array_dup(const apr_array_header_t *array, apr_pool_t *pool);
/**
* 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
* is @c svn_prop_regular_kind.
*/
typedef enum svn_prop_kind
{
/** In .svn/entries, i.e., author, date, etc. */
svn_prop_entry_kind,
/** Client-side only, stored by specific RA layer. */
svn_prop_wc_kind,
/** Seen if user does "svn proplist"; note that this includes some "svn:"
* props and all user props, i.e. ones stored in the repository fs.
*/
svn_prop_regular_kind
} svn_prop_kind_t;
/** Return the prop kind of a property named @a name, and (if @a prefix_len
* is non- at c NULL) set @a *prefix_len to the length of the prefix of @a name
* that was sufficient to distinguish its kind.
*/
svn_prop_kind_t svn_property_kind(int *prefix_len,
const char *prop_name);
/** Return @c TRUE iff @a prop_name represents the name of a Subversion
* property.
*/
svn_boolean_t svn_prop_is_svn_prop(const char *prop_name);
/** If @a propname requires that its value be stored as UTF8/LF in the
* repository, then return @c TRUE. Else return @c FALSE. This is for
* users of libsvn_client or libsvn_fs, since it their responsibility
* to do this translation in both directions. (See
* svn_subst_translate_string()/svn_subst_detranslate_string() for
* help with this task.)
*/
svn_boolean_t svn_prop_needs_translation(const char *propname);
/** Given a @a proplist array of @c svn_prop_t structures, allocate
* three new arrays in @a pool. Categorize each property and then
* create new @c svn_prop_t structures in the proper lists. Each new
* @c svn_prop_t structure's fields will point to the same data within
* @a proplist's structures.
*
* Callers may pass NULL for each of the property lists in which they
* 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,
apr_array_header_t **entry_props,
apr_array_header_t **wc_props,
apr_array_header_t **regular_props,
apr_pool_t *pool);
/** Given two property hashes (<tt>const char *name</tt> -> <tt>const
* svn_string_t *value</tt>), deduce the differences between them (from
* @a source_props -> @c target_props). Return these changes as a series of
* @c svn_prop_t structures stored in @a propdiffs, allocated from @a pool.
*
* For note, here's a quick little table describing the logic of this
* routine:
*
*<pre> basehash localhash event
* -------- --------- -----
* value = foo value = NULL Deletion occurred.
* value = foo value = bar Set occurred (modification)
* value = NULL value = baz Set occurred (creation)</pre>
*/
svn_error_t *svn_prop_diffs(apr_array_header_t **propdiffs,
apr_hash_t *target_props,
apr_hash_t *source_props,
apr_pool_t *pool);
/* Defines for reserved ("svn:") property names. */
/** All Subversion property names start with this. */
#define SVN_PROP_PREFIX "svn:"
/** Visible properties
*
* These are regular properties that are attached to ordinary files
* and dirs, and are visible (and tweakable) by svn client programs
* and users. Adding these properties causes specific effects.
*
* @note the values of these properties are always UTF8-encoded with
* LF line-endings. It is the burden of svn library users to enforce
* this. Use svn_prop_needs_translation() to discover if a
* certain property needs translation, and you can use
* svn_subst_translate_string()/svn_subst_detranslate_string()
* to do the translation.
*
* @defgroup svn_prop_visible_props Visible properties
* @{
*/
/** The mime-type of a given file. */
#define SVN_PROP_MIME_TYPE SVN_PROP_PREFIX "mime-type"
/** The ignore patterns for a given directory. */
#define SVN_PROP_IGNORE SVN_PROP_PREFIX "ignore"
/** The line ending style for a given file. */
#define SVN_PROP_EOL_STYLE SVN_PROP_PREFIX "eol-style"
/** The "activated" keywords (for keyword substitution) for a given file. */
#define SVN_PROP_KEYWORDS SVN_PROP_PREFIX "keywords"
/** Set to either TRUE or FALSE if we want a file to be executable or not. */
#define SVN_PROP_EXECUTABLE SVN_PROP_PREFIX "executable"
/** The value to force the executable property to when set */
#define SVN_PROP_EXECUTABLE_VALUE "*"
/** Set to TRUE ('*') if we want a file to be set to read-only when
* not locked. FALSE is indicated by deleting the property. */
#define SVN_PROP_NEEDS_LOCK SVN_PROP_PREFIX "needs-lock"
/** The value to force the needs-lock property to when set */
#define SVN_PROP_NEEDS_LOCK_VALUE "*"
/** Set if the file should be treated as a special file. */
#define SVN_PROP_SPECIAL SVN_PROP_PREFIX "special"
/** The value to force the special property to when set. */
#define SVN_PROP_SPECIAL_VALUE "*"
/** Describes external items to check out into this directory.
*
* The format is a series of lines, such as:
*
*<pre> 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</pre>
*
* The subdir names on the left side are relative to the directory on
* which this property is set.
*/
#define SVN_PROP_EXTERNALS SVN_PROP_PREFIX "externals"
/** @} */
/** WC props are props that are invisible to users: they're generated
* by an RA layer, and stored in secret parts of .svn/.
*
* @defgroup svn_prop_invisible_props Invisible properties
* @{
*/
/** The propname *prefix* that makes a propname a "WC property".
*
* For example, ra_dav might store a versioned-resource url as a WC
* prop like this:
*
*<pre> name = svn:wc:dav_url
* val = http://www.lyra.org/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
* when committing.
*/
#define SVN_PROP_WC_PREFIX SVN_PROP_PREFIX "wc:"
/** Another type of non-user-visible property. "Entry properties" are
* stored as fields with the administrative 'entries' file.
*/
#define SVN_PROP_ENTRY_PREFIX SVN_PROP_PREFIX "entry:"
/** The revision this entry was last committed to on. */
#define SVN_PROP_ENTRY_COMMITTED_REV SVN_PROP_ENTRY_PREFIX "committed-rev"
/** The date this entry was last committed to on. */
#define SVN_PROP_ENTRY_COMMITTED_DATE SVN_PROP_ENTRY_PREFIX "committed-date"
/** The author who last committed to this entry. */
#define SVN_PROP_ENTRY_LAST_AUTHOR SVN_PROP_ENTRY_PREFIX "last-author"
/** The UUID of this entry's repository. */
#define SVN_PROP_ENTRY_UUID SVN_PROP_ENTRY_PREFIX "uuid"
/** The lock token for this entry.
* @since New in 1.2. */
#define SVN_PROP_ENTRY_LOCK_TOKEN SVN_PROP_ENTRY_PREFIX "lock-token"
/** When custom, user-defined properties are passed over the wire, they will
* have this prefix added to their name.
*/
#define SVN_PROP_CUSTOM_PREFIX SVN_PROP_PREFIX "custom:"
/** @} */
/**
* These are reserved properties attached to a "revision" object in
* the repository filesystem. They can be queried by using
* svn_fs_revision_prop(). They are invisible to svn clients.
*
* @defgroup svn_props_revision_props Revision properties
* @{
*/
/** The fs revision property that stores a commit's author. */
#define SVN_PROP_REVISION_AUTHOR SVN_PROP_PREFIX "author"
/** The fs revision property that stores a commit's log message. */
#define SVN_PROP_REVISION_LOG SVN_PROP_PREFIX "log"
/** The fs revision property that stores a commit's date. */
#define SVN_PROP_REVISION_DATE SVN_PROP_PREFIX "date"
/** The fs revision property that stores a commit's "original" date.
*
* The svn:date property must be monotonically increasing, along with
* the revision number. In certain scenarios, this may pose a problem
* when the revision represents a commit that occurred at a time which
* does not fit within the sequencing required for svn:date. This can
* happen, for instance, when the revision represents a commit to a
* foreign version control system, or possibly when two Subversion
* repositories are combined. This property can be used to record the
* true, original date of the commit.
*/
#define SVN_PROP_REVISION_ORIG_DATE SVN_PROP_PREFIX "original-date"
/** The presence of this fs revision property indicates that the
* revision was automatically generated by the mod_dav_svn
* autoversioning feature. The value is irrelevant.
*/
#define SVN_PROP_REVISION_AUTOVERSIONED SVN_PROP_PREFIX "autoversioned"
/* More reserved revision props in the 'svn:' namespace, used by the
svnsync tool: */
/** Prefix for all svnsync custom properties. */
#define SVNSYNC_PROP_PREFIX SVN_PROP_PREFIX "sync-"
/* The following revision properties are set on revision 0 of
* destination repositories by svnsync:
*/
/** Used to enforce mutually exclusive destination repository access. */
#define SVNSYNC_PROP_LOCK SVNSYNC_PROP_PREFIX "lock"
/** Identifies the repository's source URL. */
#define SVNSYNC_PROP_FROM_URL SVNSYNC_PROP_PREFIX "from-url"
/** Identifies the repository's source UUID. */
#define SVNSYNC_PROP_FROM_UUID SVNSYNC_PROP_PREFIX "from-uuid"
/** Identifies the last completely mirrored revision. */
#define SVNSYNC_PROP_LAST_MERGED_REV SVNSYNC_PROP_PREFIX "last-merged-rev"
/** Identifies the revision currently being copied. */
#define SVNSYNC_PROP_CURRENTLY_COPYING SVNSYNC_PROP_PREFIX "currently-copying"
/**
* This is a list of all revision properties.
*/
#define SVN_PROP_REVISION_ALL_PROPS SVN_PROP_REVISION_AUTHOR, \
SVN_PROP_REVISION_LOG, \
SVN_PROP_REVISION_DATE, \
SVN_PROP_REVISION_AUTOVERSIONED, \
SVN_PROP_REVISION_ORIG_DATE, \
SVNSYNC_PROP_LOCK, \
SVNSYNC_PROP_FROM_URL, \
SVNSYNC_PROP_FROM_UUID, \
SVNSYNC_PROP_LAST_MERGED_REV, \
SVNSYNC_PROP_CURRENTLY_COPYING,
/** @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_PROPS_H */
--- NEW FILE: svn_utf.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_utf.h
* @brief UTF-8 conversion routines
*/
#ifndef SVN_UTF_H
#define SVN_UTF_H
#include <apr_xlate.h>
#include "svn_error.h"
#include "svn_string.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifndef AS400
#define SVN_APR_LOCALE_CHARSET APR_LOCALE_CHARSET
#define SVN_APR_DEFAULT_CHARSET APR_DEFAULT_CHARSET
#else
/* APR_LOCALE_CHARSET and APR_DEFAULT_CHARSET are defined as ints on
* OS400. */
#define SVN_APR_LOCALE_CHARSET (const char*)APR_LOCALE_CHARSET
#define SVN_APR_DEFAULT_CHARSET (const char*)APR_DEFAULT_CHARSET
#endif
/**
* Initialize the UTF-8 encoding/decoding routines.
* Allocate cached translation handles in a subpool of @a pool.
*
* @note It is optional to call this function, but if it is used, no other
* svn function may be in use in other threads during the call of this
* function or when @a pool is cleared or destroyed.
* Initializing the UTF-8 routines will improve performance.
*
* @since New in 1.1.
*/
void svn_utf_initialize(apr_pool_t *pool);
/** Set @a *dest to a utf8-encoded stringbuf from native stringbuf @a src;
* allocate @a *dest in @a pool.
*/
svn_error_t *svn_utf_stringbuf_to_utf8(svn_stringbuf_t **dest,
const svn_stringbuf_t *src,
apr_pool_t *pool);
/** Set @a *dest to a utf8-encoded string from native string @a src; allocate
* @a *dest in @a pool.
*/
svn_error_t *svn_utf_string_to_utf8(const svn_string_t **dest,
const svn_string_t *src,
apr_pool_t *pool);
/** Set @a *dest to a utf8-encoded C string from native C string @a src;
* allocate @a *dest in @a pool.
*/
svn_error_t *svn_utf_cstring_to_utf8(const char **dest,
const char *src,
apr_pool_t *pool);
/** Set @a *dest to a utf8 encoded C string from @a frompage encoded C
* string @a src; allocate @a *dest in @a pool.
*
* @since New in 1.4.
*/
svn_error_t *svn_utf_cstring_to_utf8_ex2(const char **dest,
const char *src,
const char *frompage,
apr_pool_t *pool);
/** Like svn_utf_cstring_to_utf8_ex2() but with @a convset_key which is
* ignored.
*
* @deprecated Provided for backward compatibility with the 1.3 API.
*/
svn_error_t *svn_utf_cstring_to_utf8_ex(const char **dest,
const char *src,
const char *frompage,
const char *convset_key,
apr_pool_t *pool);
/** Set @a *dest to a natively-encoded stringbuf from utf8 stringbuf @a src;
* allocate @a *dest in @a pool.
*/
svn_error_t *svn_utf_stringbuf_from_utf8(svn_stringbuf_t **dest,
const svn_stringbuf_t *src,
apr_pool_t *pool);
/** Set @a *dest to a natively-encoded string from utf8 string @a src;
* allocate @a *dest in @a pool.
*/
svn_error_t *svn_utf_string_from_utf8(const svn_string_t **dest,
const svn_string_t *src,
apr_pool_t *pool);
/** Set @a *dest to a natively-encoded C string from utf8 C string @a src;
* allocate @a *dest in @a pool.
*/
svn_error_t *svn_utf_cstring_from_utf8(const char **dest,
const char *src,
apr_pool_t *pool);
/** Set @a *dest to a @a topage encoded C string from utf8 encoded C string
* @a src; allocate @a *dest in @a pool.
*
* @since New in 1.4.
*/
svn_error_t *svn_utf_cstring_from_utf8_ex2(const char **dest,
const char *src,
const char *topage,
apr_pool_t *pool);
/** Like svn_utf_cstring_from_utf8_ex2() but with @a convset_key which is
* ignored.
*
* @deprecated Provided for backward compatibility with the 1.3 API.
*/
svn_error_t *svn_utf_cstring_from_utf8_ex(const char **dest,
const char *src,
const char *topage,
const char *convset_key,
apr_pool_t *pool);
/** Return a fuzzily native-encoded C string from utf8 C string @a src,
* allocated in @a pool. A fuzzy recoding leaves all 7-bit ascii
* characters the same, and substitutes "?\\XXX" for others, where XXX
* is the unsigned decimal code for that character.
*
* This function cannot error; it is guaranteed to return something.
* First it will recode as described above and then attempt to convert
* the (new) 7-bit UTF-8 string to native encoding. If that fails, it
* will return the raw fuzzily recoded string, which may or may not be
* meaningful in the client's locale, but is (presumably) better than
* nothing.
*
* ### Notes:
*
* Improvement is possible, even imminent. The original problem was
* that if you converted a UTF-8 string (say, a log message) into a
* locale that couldn't represent all the characters, you'd just get a
* static placeholder saying "[unconvertible log message]". Then
* Justin Erenkrantz pointed out how on platforms that didn't support
* conversion at all, "svn log" would still fail completely when it
* encountered unconvertible data.
*
* Now for both cases, the caller can at least fall back on this
* function, which converts the message as best it can, substituting
* "?\\XXX" escape codes for the non-ascii characters.
*
* Ultimately, some callers may prefer the iconv "//TRANSLIT" option,
* so when we can detect that at configure time, things will change.
* Also, this should (?) be moved to apr/apu eventually.
*
* See http://subversion.tigris.org/issues/show_bug.cgi?id=807 for
* details.
*/
const char *svn_utf_cstring_from_utf8_fuzzy(const char *src,
apr_pool_t *pool);
/** Set @a *dest to a natively-encoded C string from utf8 stringbuf @a src;
* allocate @a *dest in @a pool.
*/
svn_error_t *svn_utf_cstring_from_utf8_stringbuf(const char **dest,
const svn_stringbuf_t *src,
apr_pool_t *pool);
/** Set @a *dest to a natively-encoded C string from utf8 string @a src;
* allocate @a *dest in @a pool.
*/
svn_error_t *svn_utf_cstring_from_utf8_string(const char **dest,
const svn_string_t *src,
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_UTF_H */
--- NEW FILE: svn_user.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_user.h
* @brief Subversion's wrapper around APR's user information interface.
*/
#ifndef SVN_USER_H
#define SVN_USER_H
#include <apr_pools.h>
#include "svn_types.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Get the name of the current user, using @a pool for any necessary
* allocation, returning NULL on error.
*
* @since New in 1.4.
*/
const char *
svn_user_get_name(apr_pool_t *pool);
/** Get the path of the current user's home directory, using @a pool for
* any necessary allocation, returning NULL on error.
*
* @since New in 1.4.
*/
const char *
svn_user_get_homedir(apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_USER_H */
--- NEW FILE: svn_version.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_version.h
* @brief Version information.
*/
#ifndef SVN_VERSION_H
#define SVN_VERSION_H
/* Hack to prevent the resource compiler from including
apr_general.h. It doesn't resolve the include paths
correctly and blows up without this.
*/
#ifndef APR_STRINGIFY
#include <apr_general.h>
#endif
#include "svn_types.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Symbols that define the version number. */
/* Version numbers: <major>.<minor>.<micro>
*
* The version numbers in this file follow the rules established by:
*
* http://apr.apache.org/versioning.html
*/
/** Major version number.
*
* Modify when incompatible changes are made to published interfaces.
*/
#define SVN_VER_MAJOR 1
/** Minor version number.
*
* Modify when new functionality is added or new interfaces are
* defined, but all changes are backward compatible.
*/
#define SVN_VER_MINOR 4
/**
* Patch number.
*
* Modify for every released patch.
*
* @since New in 1.1.
*/
#define SVN_VER_PATCH 5
/** @deprecated Provided for backward compatibility with the 1.0 API. */
#define SVN_VER_MICRO SVN_VER_PATCH
/** @deprecated Provided for backward compatibility with the 1.0 API. */
#define SVN_VER_LIBRARY SVN_VER_MAJOR
/** Version tag: a string describing the version.
*
* This tag remains " (dev build)" in the repository so that we can
* always see from "svn --version" that the software has been built
* from the repository rather than a "blessed" distribution.
*
* When rolling a tarball, we automatically replace this text with " (r1234)"
* (where 1234 is the last revision on the branch prior to the release)
* for final releases; in prereleases, it becomes " (Alpha 1)",
* " (Beta 1)", etc., as appropriate.
*
* Always change this at the same time as SVN_VER_NUMTAG.
*/
#define SVN_VER_TAG " (r25188)"
/** Number tag: a string describing the version.
*
* This tag is used to generate a version number string to identify
* the client and server in HTTP requests, for example. It must not
* contain any spaces. This value remains "-dev" in the repository.
*
* When rolling a tarball, we automatically replace this text with ""
* for final releases; in prereleases, it becomes "-alpha1, "-beta1",
* etc., as appropriate.
*
* Always change this at the same time as SVN_VER_TAG.
*/
#define SVN_VER_NUMTAG ""
/** Revision number: The repository revision number of this release.
*
* This constant is used to generate the build number part of the Windows
* file version. Its value remains 0 in the repository.
*
* When rolling a tarball, we automatically replace it with what we
* guess to be the correct revision number.
*/
#define SVN_VER_REVISION 25188
/* Version strings composed from the above definitions. */
/** Version number */
#define SVN_VER_NUM APR_STRINGIFY(SVN_VER_MAJOR) \
"." APR_STRINGIFY(SVN_VER_MINOR) \
"." APR_STRINGIFY(SVN_VER_PATCH)
/** Version number with tag (contains no whitespace) */
#define SVN_VER_NUMBER SVN_VER_NUM SVN_VER_NUMTAG
/** Complete version string */
#define SVN_VERSION SVN_VER_NUM SVN_VER_TAG
/* Version queries and compatibility checks */
/**
* Version information. Each library contains a function called
* svn_<i>libname</i>_version() that returns a pointer to a statically
* allocated object of this type.
*
* @since New in 1.1.
*/
typedef 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
* statically allocated string.
*/
const char *tag;
} svn_version_t;
/**
* Define a static svn_version_t object.
*
* @since New in 1.1.
*/
#define SVN_VERSION_DEFINE(name) \
static const svn_version_t name = \
{ \
SVN_VER_MAJOR, \
SVN_VER_MINOR, \
SVN_VER_PATCH, \
SVN_VER_NUMTAG \
} \
/**
* Generate the implementation of a version query function.
*
* @since New in 1.1.
*/
#define SVN_VERSION_BODY \
SVN_VERSION_DEFINE(versioninfo); \
return &versioninfo
/**
* Check library version compatibility. Return #TRUE if the client's
* version, given in @a my_version, is compatible with the library
* version, provided in @a lib_version.
*
* This function checks for version compatibility as per our
* guarantees, but requires an exact match when linking to an
* unreleased library. A development client is always compatible with
* a previous released library.
*
* @since New in 1.1.
*/
svn_boolean_t svn_ver_compatible(const svn_version_t *my_version,
const svn_version_t *lib_version);
/**
* Check if @a my_version and @a lib_version encode the same version number.
*
* @since New in 1.2.
*/
svn_boolean_t svn_ver_equal(const svn_version_t *my_version,
const svn_version_t *lib_version);
/**
* An entry in the compatibility checklist.
* @see svn_ver_check_list()
*
* @since New in 1.1.
*/
typedef struct svn_version_checklist_t
{
const char *label; /**< Entry label */
/** Version query function for this entry */
const svn_version_t *(*version_query)(void);
} svn_version_checklist_t;
/**
* Perform a series of version compatibility checks. Checks if @a
* my_version is compatible with each entry in @a checklist. @a
* checklist must end with an entry whose label is @c NULL.
*
* @see svn_ver_compatible()
*
* @since New in 1.1.
*/
svn_error_t *svn_ver_check_list(const svn_version_t *my_version,
const svn_version_checklist_t *checklist);
/* libsvn_subr doesn't have an svn_subr header, so put the prototype here. */
/**
* Get libsvn_subr version information.
*
* @since New in 1.1.
*/
const svn_version_t *svn_subr_version(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_VERSION_H */
--- NEW FILE: svn_ra.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_ra.h
* @brief Repository Access
[...1556 lines suppressed...]
/**
* Return an RA vtable- at a library which can handle URL. A number of
* svn_client_* routines will call this internally, but client apps might
* use it too. $a ra_baton is a baton obtained by a call to
* svn_ra_init_ra_libs().
*
* @deprecated Provided for backward compatibility with the 1.1 API.
*/
svn_error_t *svn_ra_get_ra_library(svn_ra_plugin_t **library,
void *ra_baton,
const char *url,
apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_RA_H */
--- NEW FILE: svn_string.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_string.h
* @brief Counted-length strings for Subversion, plus some C string goodies.
*
* There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t.
* The former is a simple pointer/length pair useful for passing around
* strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is
* buffered to enable efficient appending of strings without an allocation
* and copy for each append operation.
*
* @c svn_string_t contains a <tt>const char *</tt> for its data, so it is
* most appropriate for constant data and for functions which expect constant,
* counted data. Functions should generally use <tt>const @c svn_string_t
* *</tt> as their parameter to indicate they are expecting a constant,
* counted string.
*
* @c svn_stringbuf_t uses a plain <tt>char *</tt> for its data, so it is
* most appropriate for modifiable data.
*
* <h3>Invariants</h3>
*
* 1. Null termination:
*
* Both structures maintain a significant invariant:
*
* <tt>s->data[s->len] == '\\0'</tt>
*
* The functions defined within this header file will maintain
* the invariant (which does imply that memory is
* allocated/defined as @c len+1 bytes). If code outside of the
* @c svn_string.h functions manually builds these structures,
* then they must enforce this invariant.
*
* Note that an @c svn_string(buf)_t may contain binary data,
* which means that strlen(s->data) does not have to equal @c
* s->len. The null terminator is provided to make it easier to
* pass @c s->data to C string interfaces.
*
*
* 2. Non-null input:
*
* All the functions assume their input data is non-null,
* unless otherwise documented, and may seg fault if passed
* null. The input data may *contain* null bytes, of course, just
* the data pointer itself must not be null.
*/
#ifndef SVN_STRING_H
#define SVN_STRING_H
#include <apr.h>
#include <apr_tables.h>
#include <apr_pools.h> /* APR memory pools for everyone. */
#include <apr_strings.h>
#include "svn_types.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** A simple counted string. */
typedef struct svn_string_t
{
const char *data; /**< pointer to the bytestring */
apr_size_t len; /**< length of bytestring */
} svn_string_t;
/** A buffered string, capable of appending without an allocation and copy
* for each append. */
typedef struct svn_stringbuf_t
{
/** a pool from which this string was originally allocated, and is not
* necessarily specific to this string. This is used only for allocating
* more memory from when the string needs to grow.
*/
apr_pool_t *pool;
/** pointer to the bytestring */
char *data;
/** length of bytestring */
apr_size_t len;
/** total size of buffer allocated */
apr_size_t blocksize;
} svn_stringbuf_t;
/** svn_string_t functions.
*
* @defgroup svn_string_svn_string_t svn_string_t functions
* @{
*/
/** Create a new bytestring containing a C string (null-terminated). */
svn_string_t *svn_string_create(const char *cstring,
apr_pool_t *pool);
/** Create a new bytestring containing a generic string of bytes
* (NOT null-terminated) */
svn_string_t *svn_string_ncreate(const char *bytes,
apr_size_t size,
apr_pool_t *pool);
/** Create a new string with the contents of the given stringbuf */
svn_string_t *svn_string_create_from_buf(const svn_stringbuf_t *strbuf,
apr_pool_t *pool);
/** Create a new bytestring by formatting @a cstring (null-terminated)
* from varargs, which are as appropriate for apr_psprintf().
*/
svn_string_t *svn_string_createf(apr_pool_t *pool,
const char *fmt,
...)
__attribute__ ((format(printf, 2, 3)));
/** Create a new bytestring by formatting @a cstring (null-terminated)
* from a @c va_list (see svn_stringbuf_createf()).
*/
svn_string_t *svn_string_createv(apr_pool_t *pool,
const char *fmt,
va_list ap)
__attribute__ ((format(printf, 2, 0)));
/** Return true if a bytestring is empty (has length zero). */
svn_boolean_t svn_string_isempty(const svn_string_t *str);
/** Return a duplicate of @a original_string. */
svn_string_t *svn_string_dup(const svn_string_t *original_string,
apr_pool_t *pool);
/** Return @c TRUE iff @a str1 and @c str2 have identical length and data. */
svn_boolean_t svn_string_compare(const svn_string_t *str1,
const svn_string_t *str2);
/** Return offset of first non-whitespace character in @a str, or return
* @a str->len if none.
*/
apr_size_t svn_string_first_non_whitespace(const svn_string_t *str);
/** Return position of last occurrence of @a char in @a str, or return
* @a str->len if no occurrence.
*/
apr_size_t svn_string_find_char_backward(const svn_string_t *str, char ch);
/** @} */
/** svn_stringbuf_t functions.
*
* @defgroup svn_string_svn_stringbuf_t svn_stringbuf_t functions
* @{
*/
/** 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 stringbuf with the contents of the given string */
svn_stringbuf_t *svn_stringbuf_create_from_string(const svn_string_t *str,
apr_pool_t *pool);
/** Create a new bytestring by formatting @a cstring (null-terminated)
* from varargs, which are as appropriate for apr_psprintf().
*/
svn_stringbuf_t *svn_stringbuf_createf(apr_pool_t *pool,
const char *fmt,
...)
__attribute__ ((format(printf, 2, 3)));
/** Create a new bytestring by formatting @a cstring (null-terminated)
* from a @c va_list (see svn_stringbuf_createf()).
*/
svn_stringbuf_t *svn_stringbuf_createv(apr_pool_t *pool,
const char *fmt,
va_list ap)
__attribute__ ((format(printf, 2, 0)));
/** Make sure that the string @a str has at least @a minimum_size bytes of
* space available in the memory block.
*
* (@a minimum_size should include space for the terminating null character.)
*/
void svn_stringbuf_ensure(svn_stringbuf_t *str,
apr_size_t minimum_size);
/** Set a bytestring @a str to @a value */
void svn_stringbuf_set(svn_stringbuf_t *str, const char *value);
/** Set a bytestring @a str to empty (0 length). */
void svn_stringbuf_setempty(svn_stringbuf_t *str);
/** Return @c TRUE if a bytestring is empty (has length zero). */
svn_boolean_t svn_stringbuf_isempty(const svn_stringbuf_t *str);
/** Chop @a nbytes bytes off end of @a str, but not more than @a str->len. */
void svn_stringbuf_chop(svn_stringbuf_t *str, apr_size_t bytes);
/** Fill bytestring @a str with character @a c. */
void svn_stringbuf_fillchar(svn_stringbuf_t *str, unsigned char c);
/** Append an array of bytes onto @a targetstr.
*
* reallocs if necessary. @a targetstr is affected, nothing else is.
*/
void svn_stringbuf_appendbytes(svn_stringbuf_t *targetstr,
const char *bytes,
apr_size_t count);
/** Append an @c svn_stringbuf_t onto @a targetstr.
*
* reallocs if necessary. @a targetstr is affected, nothing else is.
*/
void svn_stringbuf_appendstr(svn_stringbuf_t *targetstr,
const svn_stringbuf_t *appendstr);
/** Append a C string onto @a targetstr.
*
* reallocs if necessary. @a targetstr is affected, nothing else is.
*/
void svn_stringbuf_appendcstr(svn_stringbuf_t *targetstr,
const char *cstr);
/** Return a duplicate of @a original_string. */
svn_stringbuf_t *svn_stringbuf_dup(const svn_stringbuf_t *original_string,
apr_pool_t *pool);
/** Return @c TRUE iff @a str1 and @a str2 have identical length and data. */
svn_boolean_t svn_stringbuf_compare(const svn_stringbuf_t *str1,
const svn_stringbuf_t *str2);
/** Return offset of first non-whitespace character in @a str, or return
* @a str->len if none.
*/
apr_size_t svn_stringbuf_first_non_whitespace(const svn_stringbuf_t *str);
/** Strip whitespace from both sides of @a str (modified in place). */
void svn_stringbuf_strip_whitespace(svn_stringbuf_t *str);
/** Return position of last occurrence of @a ch in @a str, or return
* @a str->len if no occurrence.
*/
apr_size_t svn_stringbuf_find_char_backward(const svn_stringbuf_t *str,
char ch);
/** Return @c TRUE iff @a str1 and @a str2 have identical length and data. */
svn_boolean_t svn_string_compare_stringbuf(const svn_string_t *str1,
const svn_stringbuf_t *str2);
/** @} */
/** C strings.
*
* @defgroup svn_string_cstrings c string functions
* @{
*/
/** Divide @a input into substrings along @a sep_char boundaries, return an
* array of copies of those substrings, 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
* (thus, it is possible that the returned array will have length
* zero).
*
* If @a chop_whitespace is true, then remove leading and trailing
* whitespace from the returned strings.
*/
apr_array_header_t *svn_cstring_split(const char *input,
const char *sep_chars,
svn_boolean_t chop_whitespace,
apr_pool_t *pool);
/** Like svn_cstring_split(), but append to existing @a array instead of
* creating a new one. Allocate the copied substrings in @a pool
* (i.e., caller decides whether or not to pass @a array->pool as @a pool).
*/
void svn_cstring_split_append(apr_array_header_t *array,
const char *input,
const char *sep_chars,
svn_boolean_t chop_whitespace,
apr_pool_t *pool);
/** Return @c TRUE iff @a str matches any of the elements of @a list, a list
* of zero or more glob patterns.
*
* Use @a pool for temporary allocation.
*/
svn_boolean_t svn_cstring_match_glob_list(const char *str,
apr_array_header_t *list);
/**
* Return the number of line breaks in @a msg, allowing any kind of newline
* termination (CR, LF, CRLF, or LFCR), even inconsistent.
*
* @since New in 1.2.
*/
int svn_cstring_count_newlines(const char *msg);
/**
* Return a cstring which is the concatenation of @a strings (an array
* of char *) each separated by @a separator. The returned string is
* allocated from @a pool.
*
* @since New in 1.2.
*/
char *
svn_cstring_join(apr_array_header_t *strings,
const char *separator,
apr_pool_t *pool);
/** @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_STRING_H */
--- NEW FILE: svn_ctype.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_ctype.h
* @brief Character classification routines
* @since New in 1.2.
*/
#ifndef SVN_CTYPE_H
#define SVN_CTYPE_H
#include <apr.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Table of flags for character classification. */
extern const apr_uint32_t *const svn_ctype_table;
/** Check if @a c is in the character class described by @a flags.
* The @a flags is a bitwise-or combination of @c SVN_CTYPE_*
* constants. Uses #svn_ctype_table.
*/
#define svn_ctype_test(c, flags) \
(0 != (svn_ctype_table[(unsigned char)(c)] & (flags)))
/**
* @defgroup ctype_basic Basic character classification - 7-bit ASCII only
* @{
*/
/* Basic character classes */
#define SVN_CTYPE_CNTRL 0x0001 /**< Control character */
#define SVN_CTYPE_SPACE 0x0002 /**< Whitespace */
#define SVN_CTYPE_DIGIT 0x0004 /**< Decimal digit */
#define SVN_CTYPE_UPPER 0x0008 /**< Uppercase letter */
#define SVN_CTYPE_LOWER 0x0010 /**< Lowercase letter */
#define SVN_CTYPE_PUNCT 0x0020 /**< Punctuation mark */
#define SVN_CTYPE_XALPHA 0x0040 /**< Hexadecimal digits A to F */
#define SVN_CTYPE_ASCII 0x0080 /**< ASCII subset*/
/* Derived character classes */
/** ASCII letter */
#define SVN_CTYPE_ALPHA (SVN_CTYPE_LOWER | SVN_CTYPE_UPPER)
/** ASCII letter or decimal digit */
#define SVN_CTYPE_ALNUM (SVN_CTYPE_ALPHA | SVN_CTYPE_DIGIT)
/** ASCII hexadecimal digit */
#define SVN_CTYPE_XDIGIT (SVN_CTYPE_DIGIT | SVN_CTYPE_XALPHA)
/** Printable ASCII except space */
#define SVN_CTYPE_GRAPH (SVN_CTYPE_PUNCT | SVN_CTYPE_ALNUM)
/** All printable ASCII */
#define SVN_CTYPE_PRINT (SVN_CTYPE_GRAPH | SVN_CTYPE_SPACE)
/** Check if @a c is an ASCII control character. */
#define svn_ctype_iscntrl(c) svn_ctype_test((c), SVN_CTYPE_CNTRL)
/** Check if @a c is an ASCII whitespace character. */
#define svn_ctype_isspace(c) svn_ctype_test((c), SVN_CTYPE_SPACE)
/** Check if @a c is an ASCII digit. */
#define svn_ctype_isdigit(c) svn_ctype_test((c), SVN_CTYPE_DIGIT)
/** Check if @a c is an ASCII uppercase letter. */
#define svn_ctype_isupper(c) svn_ctype_test((c), SVN_CTYPE_UPPER)
/** Check if @a c is an ASCII lowercase letter. */
#define svn_ctype_islower(c) svn_ctype_test((c), SVN_CTYPE_LOWER)
/** Check if @a c is an ASCII punctuation mark. */
#define svn_ctype_ispunct(c) svn_ctype_test((c), SVN_CTYPE_PUNCT)
/** Check if @a c is an ASCII character. */
#define svn_ctype_isascii(c) svn_ctype_test((c), SVN_CTYPE_ASCII)
/** Check if @a c is an ASCII letter. */
#define svn_ctype_isalpha(c) svn_ctype_test((c), SVN_CTYPE_ALPHA)
/** Check if @a c is an ASCII letter or decimal digit. */
#define svn_ctype_isalnum(c) svn_ctype_test((c), SVN_CTYPE_ALNUM)
/** Check if @a c is an ASCII hexadecimal digit. */
#define svn_ctype_isxdigit(c) svn_ctype_test((c), SVN_CTYPE_XDIGIT)
/** Check if @a c is an ASCII graphical (visible printable) character. */
#define svn_ctype_isgraph(c) svn_ctype_test((c), SVN_CTYPE_GRAPH)
/** Check if @a c is an ASCII printable character. */
#define svn_ctype_isprint(c) svn_ctype_test((c), SVN_CTYPE_PRINT)
/** @} */
/**
* @defgroup ctype_extra Extended character classification
* @{
*/
/* Basic extended character classes */
#define SVN_CTYPE_UTF8LEAD 0x0100 /**< UTF-8 multibyte lead byte */
#define SVN_CTYPE_UTF8CONT 0x0200 /**< UTF-8 multibyte non-lead byte */
/* ### TBD
#define SVN_CTYPE_XMLNAME 0x0400
#define SVN_CTYPE_URISAFE 0x0800
*/
/* Derived extended character classes */
/** Part of a UTF-8 multibyte character. */
#define SVN_CTYPE_UTF8MBC (SVN_CTYPE_UTF8LEAD | SVN_CTYPE_UTF8CONT)
/** All valid UTF-8 bytes. */
#define SVN_CTYPE_UTF8 (SVN_CTYPE_ASCII | SVN_CTYPE_UTF8MBC)
/** Check if @a c is a UTF-8 multibyte lead byte. */
#define svn_ctype_isutf8lead(c) svn_ctype_test((c), SVN_CTYPE_UTF8LEAD)
/** Check if @a c is a UTF-8 multibyte continuation (non-lead) byte. */
#define svn_ctype_isutf8cont(c) svn_ctype_test((c), SVN_CTYLE_UTF8CONT)
/** Check if @a c is part of a UTF-8 multibyte character. */
#define svn_ctype_isutf8mbc(c) svn_ctype_test((c), SVN_CTYPE_UTF8MBC)
/** Check if @a c is valid in UTF-8. */
#define svn_ctype_isutf8(c) svn_ctype_test((c), SVN_CTYPE_UTF8)
/** @} */
/**
* @defgroup ctype_ascii ASCII character value constants
* @{
*/
#define SVN_CTYPE_ASCII_MINUS 45 /**< ASCII value of '-' */
#define SVN_CTYPE_ASCII_DOT 46 /**< ASCII value of '.' */
#define SVN_CTYPE_ASCII_COLON 58 /**< ASCII value of ':' */
#define SVN_CTYPE_ASCII_UNDERSCORE 95 /**< ASCII value of '_' */
#define SVN_CTYPE_ASCII_TAB 9 /**< ASCII value of a tab */
#define SVN_CTYPE_ASCII_LINEFEED 10 /**< ASCII value of a line feed */
#define SVN_CTYPE_ASCII_CARRIAGERETURN 13
/**< ASCII value of a carriage return */
#define SVN_CTYPE_ASCII_DELETE 127
/**< ASCII value of a delete character */
/** @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_CTYPE_H */
--- NEW FILE: svn_dso.h ---
/**
* @copyright
* ====================================================================
* Copyright (c) 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/.
* ====================================================================
* @endcopyright
*
* @file svn_dso.h
* @brief DSO loading routines
*/
#ifndef SVN_DSO_H
#define SVN_DSO_H
#include <apr_dso.h>
#include "svn_error.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* 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.
*
* @since New in 1.4.0.
*/
void svn_dso_initialize(void);
#if APR_HAS_DSO
/**
* Attempt to load @a libname, returning it in @a dso.
*
* 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
* pool, so you must be certain that there is a bounded number of
* them that will ever be loaded by the system, otherwise you will
* leak memory.
*
* @since New in 1.4.0.
*/
svn_error_t *svn_dso_load(apr_dso_handle_t **dso, const char *libname);
#endif /* APR_HAS_DSO */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_DSO_H */
--- NEW FILE: svn_path.h ---
/**
* @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/.
* ====================================================================
* @endcopyright
*
* @file svn_path.h
* @brief A path manipulation library
*
* All incoming and outgoing paths are non-null and in UTF-8, unless
* otherwise documented.
*
* No result path ever ends with a separator, no matter whether the
* path is a file or directory, because we always canonicalize() it.
*
* All paths passed to the @c svn_path_xxx functions, with the exceptions of
* the svn_path_canonicalize() and svn_path_internal_style() functions,
* must be in canonical form.
*/
#ifndef SVN_PATH_H
#define SVN_PATH_H
#include <apr_pools.h>
#include <apr_tables.h>
#include "svn_string.h"
#include "svn_error.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Convert @a path from the local style to the canonical internal style. */
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. */
const char *svn_path_local_style(const char *path, apr_pool_t *pool);
/** Join a base path (@a base) with a component (@a component), allocated in
* @a pool.
*
* 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.
*
* If the @a component is an absolute path, then it is copied and returned.
* Exactly one slash character ('/') is used to joined the components,
* accounting for any trailing slash in @a base.
*
* Note that the contents of @a base are not examined, so it is possible to
* use this function for constructing URLs, or for relative URLs or
* repository paths.
*
* This function is NOT appropriate for native (local) file
* paths. Only for "internal" canonicalized paths, since it uses '/'
* for the separator. Further, an absolute path (for @a component) is
* 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.
*/
char *svn_path_join(const char *base,
const char *component,
apr_pool_t *pool);
/** Join multiple components onto a @a base path, allocated in @a pool. The
* components are terminated by a @c NULL.
*
* If any component is the empty string, it will be ignored.
*
* If any component is an absolute path, then it resets the base and
* further components will be appended to it.
*
* See svn_path_join() for further notes about joining paths.
*/
char *svn_path_join_many(apr_pool_t *pool, const char *base, ...);
/** Get the basename of the specified canonicalized @a path. The
* basename is defined as the last component of the path (ignoring any
* trailing slashes). If the @a path is root ("/"), then that is
* returned. Otherwise, the returned value will have no slashes in
* it.
*
* Example: svn_path_basename("/foo/bar") -> "bar"
*
* The returned basename will be allocated in @a pool.
*
* @note If an empty string is passed, then an empty string will be returned.
*/
char *svn_path_basename(const char *path, apr_pool_t *pool);
/** Get the dirname of the specified canonicalized @a path, defined as
* the path with its basename removed.
*
* Get the dirname of the specified @a path, defined as the path with its
* basename removed. If @a path is root ("/"), it is returned unchanged.
*
* The returned dirname will be allocated in @a pool.
*/
char *svn_path_dirname(const char *path, apr_pool_t *pool);
/** Return the number of components in the canonicalized @a path.
*
* @since New in 1.1.
*/
apr_size_t
svn_path_component_count(const char *path);
/** Add a @a component (a null-terminated C-string) to the
* canonicalized @a path. @a component is allowed to contain
* directory separators.
*
* If @a path is non-empty, append the appropriate directory separator
* character, and then @a component. If @a path is empty, simply set it to
* @a component; don't add any separator character.
*
* If the result ends in a separator character, then remove the separator.
*/
void svn_path_add_component(svn_stringbuf_t *path,
const char *component);
/** Remove one component off the end of the canonicalized @a path. */
void svn_path_remove_component(svn_stringbuf_t *path);
/** Remove @a n components off the end of the canonicalized @a path.
* Equivalent to calling svn_path_remove_component() @a n times.
*
* @since New in 1.1.
*/
void svn_path_remove_components(svn_stringbuf_t *path, apr_size_t n);
/** Divide the canonicalized @a path 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 path's own address, but they
* may not both be the same address, or the results are undefined.
*
* If @a path 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>
*/
void svn_path_split(const char *path,
const char **dirpath,
const char **base_name,
apr_pool_t *pool);
/** Return non-zero iff @a path is empty ("") or represents the current
* directory -- that is, if prepending it as a component to an existing
* path would result in no meaningful change.
*/
int svn_path_is_empty(const char *path);
/** Return a new path (or URL) like @a path, but transformed such that
* some types of path 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 path may be statically allocated, equal to @a path, or
* allocated from @a pool.
*/
const char *svn_path_canonicalize(const char *path, apr_pool_t *pool);
/** Return an integer greater than, equal to, or less than 0, according
* as @a path1 is greater than, equal to, or less than @a path2.
*/
int svn_path_compare_paths(const char *path1, const char *path2);
/** Return the longest common path shared by two canonicalized paths,
* @a path1 and @a path2. If there's no common ancestor, return the
* empty path.
*
* @a path1 and @a path2 may be URLs. 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.
*/
char *svn_path_get_longest_ancestor(const char *path1,
const char *path2,
apr_pool_t *pool);
/** Convert @a relative canonicalized path to an absolute path and
* return the results in @a *pabsolute, allocated in @a pool.
*
* @a relative may be a URL, in which case no attempt is made to convert it,
* and a copy of the URL is returned.
*/
svn_error_t *
svn_path_get_absolute(const char **pabsolute,
const char *relative,
apr_pool_t *pool);
/** Return the path part of the canonicalized @a path in @a
* *pdirectory, and the file part in @a *pfile. If @a path is a
* 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.
*/
svn_error_t *
svn_path_split_if_file(const char *path,
const char **pdirectory,
const char **pfile,
apr_pool_t *pool);
/** Find the common prefix of the canonicalized paths in @a targets
* (an array of @a const char *'s), and remove redundant paths if @a
* remove_redundancies is true.
*
* - Set @a *pcommon to the absolute path of the path or URL common to
* all of the targets. If the targets have no common prefix, or
* are a mix of URLs and local paths, 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 paths/URLs that are
* descendants of another path/URL in @a targets. If *pcommon
* is empty, @a *pcondensed_targets will contain full URLs and/or
* absolute paths; redundancies can still be removed (from both URLs
* and paths). 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.
*
* @note There is no guarantee that @a *pcommon is within a working
* copy. */
svn_error_t *
svn_path_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 *pool);
/** Copy a list of canonicalized @a targets, one at a time, into @a
* pcondensed_targets, omitting any targets that are found earlier in
* the list, or whose ancestor is found earlier in the list. Ordering
* of targets in the original list is preserved in the condensed list
* of targets. Use @a pool for any allocations.
*
* How does this differ in functionality from svn_path_condense_targets()?
*
* Here's the short version:
*
* 1. Disclaimer: if you wish to debate the following, talk to Karl. :-)
* Order matters for updates because a multi-arg update is not
* atomic, and CVS users are used to, when doing 'cvs up targetA
* targetB' seeing targetA get updated, then targetB. I think the
* idea is that if you're in a time-sensitive or flaky-network
* situation, a user can say, "I really *need* to update
* wc/A/D/G/tau, but I might as well update my whole working copy if
* I can." So that user will do 'svn up wc/A/D/G/tau wc', and if
* something dies in the middles of the 'wc' update, at least the
* user has 'tau' up-to-date.
*
* 2. Also, we have this notion of an anchor and a target for updates
* (the anchor is where the update editor is rooted, the target is
* the actual thing we want to update). I needed a function that
* would NOT screw with my input paths so that I could tell the
* difference between someone being in A/D and saying 'svn up G' and
* being in A/D/G and saying 'svn up .' -- believe it or not, these
* two things don't mean the same thing. svn_path_condense_targets()
* plays with absolute paths (which is fine, so does
* svn_path_remove_redundancies()), but the difference is that it
* actually tweaks those targets to be relative to the "grandfather
* path" common to all the targets. Updates don't require a
* "grandfather path" at all, and even if it did, the whole
* conversion to an absolute path drops the crucial difference
* between saying "i'm in foo, update bar" and "i'm in foo/bar,
* update '.'"
*/
svn_error_t *
svn_path_remove_redundancies(apr_array_header_t **pcondensed_targets,
const apr_array_header_t *targets,
apr_pool_t *pool);
/** Decompose the canonicalized @a path into an array of <tt>const
* char *</tt> components, allocated in @a pool. If @a path is
* absolute, the first component will be a lone dir separator (the
* root directory).
*/
apr_array_header_t *svn_path_decompose(const char *path,
apr_pool_t *pool);
/** Test that @a name is a single path component, that is:
* - not @c NULL or empty.
* - not a `/'-separated directory path
* - not empty or `..'
*/
svn_boolean_t svn_path_is_single_path_component(const char *name);
/**
* Test to see if a backpath, i.e. '..', is present in @a path.
* If not, return @c FALSE.
* If so, return @c TRUE.
*
* @since New in 1.1.
*/
svn_boolean_t svn_path_is_backpath_present(const char *path);
/** Test if @a path2 is a child of @a path1.
* If not, return @c NULL.
* If so, return a copy of the remainder path, allocated in @a pool.
* (The remainder is the component which, added to @a path1, yields
* @a path2. The remainder does not begin with a dir separator.)
*
* Both paths must be in canonical form, and must either be absolute,
* or contain no ".." components.
*
* If @a path2 is the same as @a path1, it is not considered a child, so the
* result is @c NULL; an empty string is never returned.
*
* ### 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?
*/
const char *svn_path_is_child(const char *path1,
const char *path2,
apr_pool_t *pool);
/** Return true if @a path1 is an ancestor of @a path2 or the paths are equal
* and false otherwise.
*
* @since New in 1.3.
*/
svn_boolean_t
svn_path_is_ancestor(const char *path1, const char *path2);
/**
* Check whether @a path is a valid Subversion path.
*
* A valid Subversion pathname is a UTF-8 string without control
* characters. "Valid" means Subversion can store the pathname in
* a repository. There may be other, OS-specific, limitations on
* what paths can be represented in a working copy.
*
* ASSUMPTION: @a path is a valid UTF-8 string. This function does
* not check UTF-8 validity.
*
* Return @c SVN_NO_ERROR if valid and @c SVN_ERR_FS_PATH_SYNTAX if
* invalid.
*
* @since New in 1.2.
*/
svn_error_t *svn_path_check_valid(const char *path, apr_pool_t *pool);
/** URI/URL stuff
*
* @defgroup svn_path_uri_stuff URI/URL stuff
* @{
*/
/** Return @c TRUE iff @a path looks like a valid URL, @c FALSE otherwise. */
svn_boolean_t svn_path_is_url(const char *path);
/** Return @c TRUE iff @a path is URI-safe, @c FALSE otherwise. */
svn_boolean_t svn_path_is_uri_safe(const char *path);
/** Return a URI-encoded copy of @a path, allocated in @a pool. */
const char *svn_path_uri_encode(const char *path, apr_pool_t *pool);
/** Return a URI-decoded copy of @a path, allocated in @a pool. */
const char *svn_path_uri_decode(const char *path, apr_pool_t *pool);
/** Extend @a url by a single @a component, URI-encoding that @a component
* before adding it to the @a url. Return the new @a url, allocated in
* @a pool. Notes: if @a component is @c NULL, just return a copy or @a url
* allocated in @a pool; if @a component is already URI-encoded, calling
* code should just use <tt>svn_path_join (url, component, pool)</tt>. @a url
* does not need to be a canonical path, it may have trailing '/'.
*/
const char *svn_path_url_add_component(const char *url,
const char *component,
apr_pool_t *pool);
/**
* Convert @a iri (Internationalized URI) to an URI.
* The return value may be the same as @a iri if it was already
* a URI. Else, allocate the return value in @a pool.
*
* @since New in 1.1.
*/
const char *svn_path_uri_from_iri(const char *iri,
apr_pool_t *pool);
/**
* URI-encode certain characters in @a uri that are not valid in an URI, but
* doesn't have any special meaning in @a uri at their positions. If no
* characters need escaping, just return @a uri.
*
* @note Currently, this function escapes <, >, ", space, {, }, |, \, ^, and `.
* This may be extended in the future to do context-dependent escaping.
*
* @since New in 1.1.
*/
const char *svn_path_uri_autoescape(const char *uri,
apr_pool_t *pool);
/** @} */
/** Charset conversion stuff
*
* @defgroup svn_path_charset_stuff Charset conversion stuff
* @{
*/
/** Convert @a path_utf8 from UTF-8 to the internal encoding used by APR. */
svn_error_t *svn_path_cstring_from_utf8(const char **path_apr,
const char *path_utf8,
apr_pool_t *pool);
/** Convert @a path_apr from the internal encoding used by APR to UTF-8. */
svn_error_t *svn_path_cstring_to_utf8(const char **path_utf8,
const char *path_apr,
apr_pool_t *pool);
/** @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* SVN_PATH_H */
- Previous message: [GME-commit] GMESRC/GME/Include/apr-util apr_anylock.h, NONE, 1.1 apr_base64.h, NONE, 1.1 apr_buckets.h, NONE, 1.1 apr_date.h, NONE, 1.1 apr_dbm.h, NONE, 1.1 apr_hooks.h, NONE, 1.1 apr_ldap.h, NONE, 1.1 apr_ldap.h.in, NONE, 1.1 apr_ldap.hnw, NONE, 1.1 apr_ldap.hw, NONE, 1.1 apr_ldap_url.h, NONE, 1.1 apr_md4.h, NONE, 1.1 apr_md5.h, NONE, 1.1 apr_optional.h, NONE, 1.1 apr_optional_hooks.h, NONE, 1.1 apr_queue.h, NONE, 1.1 apr_reslist.h, NONE, 1.1 apr_rmm.h, NONE, 1.1 apr_sdbm.h, NONE, 1.1 apr_sha1.h, NONE, 1.1 apr_strmatch.h, NONE, 1.1 apr_uri.h, NONE, 1.1 apr_uuid.h, NONE, 1.1 apr_xlate.h, NONE, 1.1 apr_xml.h, NONE, 1.1 apu.h, NONE, 1.1 apu.h.in, NONE, 1.1 apu.hnw, NONE, 1.1 apu.hw, NONE, 1.1 apu_compat.h, NONE, 1.1 apu_version.h, NONE, 1.1 apu_want.h, NONE, 1.1 apu_want.h.in, NONE, 1.1 apu_want.hnw, NONE, 1.1 apu_want.hw, NONE, 1.1
- Next message: [GME-commit] GMESRC/GME/Lib libapr.dll, NONE, 1.1 libapr.lib, NONE, 1.1 libapr.pdb, NONE, 1.1 libaprD.dll, NONE, 1.1 libaprD.lib, NONE, 1.1 libapriconv.dll, NONE, 1.1 libapriconv.lib, NONE, 1.1 libapriconv.pdb, NONE, 1.1 libapriconvD.dll, NONE, 1.1 libapriconvD.lib, NONE, 1.1 libaprutil.dll, NONE, 1.1 libaprutil.lib, NONE, 1.1 libaprutil.pdb, NONE, 1.1 libaprutilD.dll, NONE, 1.1 libaprutilD.lib, NONE, 1.1 libeay32.dll, NONE, 1.1 libeay32.lib, NONE, 1.1 libeay32D.dll, NONE, 1.1 libeay32D.lib, NONE, 1.1 libneon.lib, NONE, 1.1 libneonD.lib, NONE, 1.1 libsvn_client-1.lib, NONE, 1.1 libsvn_client-1D.lib, NONE, 1.1 libsvn_delta-1.lib, NONE, 1.1 libsvn_delta-1D.lib, NONE, 1.1 libsvn_diff-1.lib, NONE, 1.1 libsvn_diff-1D.lib, NONE, 1.1 libsvn_fs-1.lib, NONE, 1.1 libsvn_fs-1D.lib, NONE, 1.1 libsvn_fs_fs-1.lib, NONE, 1.1 libsvn_fs_fs-1D.lib, NONE, 1.1 libsvn_ra-1.lib, NONE, 1.1 libsvn_ra-1D.lib, NONE, 1.1 libsvn_ra_dav-1.lib, NONE, 1.1 libsvn_ra_dav-1D.lib, NONE, 1.1 libsvn_ra_local-1.lib, NONE, 1.1 libsvn_ra_local-1D.lib, NONE, 1.1 libsvn_ra_svn-1.lib, NONE, 1.1 l ibsvn_ra_svn-1D.lib, NONE, 1.1 libsvn_repos-1.lib, NONE, 1.1 libsvn_repos-1D.lib, NONE, 1.1 libsvn_subr-1.lib, NONE, 1.1 libsvn_subr-1D.lib, NONE, 1.1 libsvn_wc-1.lib, NONE, 1.1 libsvn_wc-1D.lib, NONE, 1.1 serf.lib, NONE, 1.1 serfD.lib, NONE, 1.1 ssleay32.dll, NONE, 1.1 ssleay32.lib, NONE, 1.1 ssleay32D.dll, NONE, 1.1 ssleay32D.lib, NONE, 1.1 xml.lib, NONE, 1.1 xmlD.lib, NONE, 1.1 zlibstat.lib, NONE, 1.1 zlibstatD.lib, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the GME-commit
mailing list