diff options
author | Peter Wemm <peter@FreeBSD.org> | 2013-06-18 02:07:41 +0000 |
---|---|---|
committer | Peter Wemm <peter@FreeBSD.org> | 2013-06-18 02:07:41 +0000 |
commit | 32547653cc5376642e1231fb644db99933ac8db4 (patch) | |
tree | 135691142dc0e75a5e5d97b5074d03436435b8e0 /subversion/libsvn_wc/translate.h | |
download | src-32547653cc5376642e1231fb644db99933ac8db4.tar.gz src-32547653cc5376642e1231fb644db99933ac8db4.zip |
Notes
Diffstat (limited to 'subversion/libsvn_wc/translate.h')
-rw-r--r-- | subversion/libsvn_wc/translate.h | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/subversion/libsvn_wc/translate.h b/subversion/libsvn_wc/translate.h new file mode 100644 index 000000000000..c5203be42e8d --- /dev/null +++ b/subversion/libsvn_wc/translate.h @@ -0,0 +1,189 @@ +/* + * translate.h : eol and keyword translation + * + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + */ + + +#ifndef SVN_LIBSVN_WC_TRANSLATE_H +#define SVN_LIBSVN_WC_TRANSLATE_H + +#include <apr_pools.h> +#include "svn_types.h" +#include "svn_subst.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +/* Newline and keyword translation properties */ + +/* If EOL is not-NULL query the SVN_PROP_EOL_STYLE property on file + LOCAL_ABSPATH in DB. If STYLE is non-null, set *STYLE to LOCAL_ABSPATH's + eol style. Set *EOL to + + - NULL for svn_subst_eol_style_none, or + + - a null-terminated C string containing the native eol marker + for this platform, for svn_subst_eol_style_native, or + + - a null-terminated C string containing the eol marker indicated + by the property value, for svn_subst_eol_style_fixed. + + If STYLE is null on entry, ignore it. If *EOL is non-null on exit, + it is a static string not allocated in POOL. + + If KEYWORDS is not NULL Expand keywords for the file at LOCAL_ABSPATH + in DB, by parsing a whitespace-delimited list of keywords. If any keywords + are found in the list, allocate *KEYWORDS from RESULT_POOL and populate it + with mappings from (const char *) keywords to their (svn_string_t *) + values (also allocated in RESULT_POOL). + + If a keyword is in the list, but no corresponding value is + available, do not create a hash entry for it. If no keywords are + found in the list, or if there is no list, set *KEYWORDS to NULL. + + If SPECIAL is not NULL determine if the svn:special flag is set on + LOCAL_ABSPATH in DB. If so, set SPECIAL to TRUE, if not, set it to FALSE. + + If PROPS is not NULL, use PROPS instead of the properties on LOCAL_ABSPATH. + + If WRI_ABSPATH is not NULL, retrieve the information for LOCAL_ABSPATH + from the working copy identified by WRI_ABSPATH. Falling back to file + external information if the file is not present as versioned node. + + If FOR_NORMALIZATION is TRUE, just return a list of keywords instead of + calculating their intended values. + + Use SCRATCH_POOL for temporary allocation, RESULT_POOL for allocating + *STYLE and *EOL. +*/ +svn_error_t * +svn_wc__get_translate_info(svn_subst_eol_style_t *style, + const char **eol, + apr_hash_t **keywords, + svn_boolean_t *special, + svn_wc__db_t *db, + const char *local_abspath, + apr_hash_t *props, + svn_boolean_t for_normalization, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + +/* Reverse parser. Given a real EOL string ("\n", "\r", or "\r\n"), + return an encoded *VALUE ("LF", "CR", "CRLF") that one might see in + the property value. */ +void svn_wc__eol_value_from_string(const char **value, + const char *eol); + +/* Expand keywords for the file at LOCAL_ABSPATH in DB, by parsing a + whitespace-delimited list of keywords KEYWORD_LIST. If any keywords + are found in the list, allocate *KEYWORDS from RESULT_POOL and populate + it with mappings from (const char *) keywords to their (svn_string_t *) + values (also allocated in RESULT_POOL). + + If a keyword is in the list, but no corresponding value is + available, do not create a hash entry for it. If no keywords are + found in the list, or if there is no list, set *KEYWORDS to NULL. + ### THIS LOOKS WRONG -- it creates a hash entry for every recognized kw + and expands each missing value as an empty string or "-1" or similar. + + Use LOCAL_ABSPATH to expand keyword values. + + If WRI_ABSPATH is not NULL, retrieve the information for LOCAL_ABSPATH + from the working copy identified by WRI_ABSPATH. Falling back to file + external information if the file is not present as versioned node. + ### THIS IS NOT IMPLEMENTED -- WRI_ABSPATH is ignored + + If FOR_NORMALIZATION is TRUE, just return a list of keywords instead of + calculating their intended values. + ### This would be better done by a separate API, since in this case + only the KEYWORD_LIST input parameter is needed. (And there is no + need to print "-1" as the revision value.) + + Use SCRATCH_POOL for any temporary allocations. +*/ +svn_error_t * +svn_wc__expand_keywords(apr_hash_t **keywords, + svn_wc__db_t *db, + const char *local_abspath, + const char *wri_abspath, + const char *keyword_list, + svn_boolean_t for_normalization, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + +/* Sync the write and execute bit for LOCAL_ABSPATH with what is currently + indicated by the properties in the database: + + * If the SVN_PROP_NEEDS_LOCK property is present and there is no + lock token for the file in the working copy, set LOCAL_ABSPATH to + read-only. + * If the SVN_PROP_EXECUTABLE property is present at all, then set + LOCAL_ABSPATH executable. + + If DID_SET is non-null, then liberally set *DID_SET to TRUE if we might + have change the permissions on LOCAL_ABSPATH. (A TRUE value in *DID_SET + does not guarantee that we changed the permissions, simply that more + investigation is warrented.) + + This function looks at the current values of the above properties, + including any scheduled-but-not-yet-committed changes. + + If LOCAL_ABSPATH is a directory, this function is a no-op. + + Use SCRATCH_POOL for any temporary allocations. + */ +svn_error_t * +svn_wc__sync_flags_with_props(svn_boolean_t *did_set, + svn_wc__db_t *db, + const char *local_abspath, + apr_pool_t *scratch_pool); + +/* Internal version of svn_wc_translated_stream2(), which see. */ +svn_error_t * +svn_wc__internal_translated_stream(svn_stream_t **stream, + svn_wc__db_t *db, + const char *local_abspath, + const char *versioned_abspath, + apr_uint32_t flags, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + +/* Like svn_wc_translated_file2(), except the working copy database + * is used directly and the function assumes abspaths. */ +svn_error_t * +svn_wc__internal_translated_file(const char **xlated_abspath, + const char *src_abspath, + svn_wc__db_t *db, + const char *versioned_abspath, + apr_uint32_t flags, + svn_cancel_func_t cancel_func, + void *cancel_baton, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* SVN_LIBSVN_WC_TRANSLATE_H */ |