/* * wc.h : shared stuff internal to the svn_wc library. * * ==================================================================== * 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/. * ==================================================================== */ #ifndef SVN_LIBSVN_WC_H #define SVN_LIBSVN_WC_H #include #include #include "svn_types.h" #include "svn_error.h" #include "svn_wc.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define SVN_WC__TMP_EXT ".tmp" #define SVN_WC__TEXT_REJ_EXT ".rej" #define SVN_WC__PROP_REJ_EXT ".prej" #define SVN_WC__BASE_EXT ".svn-base" /* for text and prop bases */ #define SVN_WC__WORK_EXT ".svn-work" /* for working propfiles */ #define SVN_WC__REVERT_EXT ".svn-revert" /* for reverting a replaced file */ /* We can handle this format or anything lower, and we (should) error * on anything higher. * * There is no format version 0; we started with 1. * * The change from 1 to 2 was the introduction of SVN_WC__WORK_EXT. * For example, ".svn/props/foo" became ".svn/props/foo.svn-work". * * The change from 2 to 3 was the introduction of the entry attribute * SVN_WC__ENTRY_ATTR_ABSENT. * * The change from 3 to 4 was the renaming of the magic "svn:this_dir" * entry name to "". * * The change from 4 to 5 was the addition of support for replacing files * with history. * * The change from 5 to 6 was the introduction of caching of property * modification state and certain properties in the entries file. * * The change from 6 to 7 was changing the entries file format from XML. * * The change from 7 to 8 was putting wcprops in one file per directory. * * Please document any further format changes here. */ #define SVN_WC__VERSION 8 /* A version <= this doesn't have property caching in the entries file. */ #define SVN_WC__NO_PROPCACHING_VERSION 5 /* A version <= this has the entries file in XML format. */ #define SVN_WC__XML_ENTRIES_VERSION 6 /* A version <= this has wcprops stored in one file per entry. */ #define SVN_WC__WCPROPS_MANY_FILES_VERSION 7 /*** Update traversals. ***/ struct svn_wc_traversal_info_t { /* The pool in which this structure and everything inside it is allocated. */ apr_pool_t *pool; /* The before and after values of the SVN_PROP_EXTERNALS property, * for each directory on which that property changed. These have * the same layout as those returned by svn_wc_edited_externals(). * * The hashes, their keys, and their values are allocated in the * above pool. */ apr_hash_t *externals_old; apr_hash_t *externals_new; }; /*** Timestamps. ***/ /* A special timestamp value which means "use the timestamp from the working copy". This is sometimes used in a log entry like: */ #define SVN_WC__TIMESTAMP_WC "working" /*** Names and file/dir operations in the administrative area. ***/ /** The files within the administrative subdir. **/ #define SVN_WC__ADM_FORMAT "format" #define SVN_WC__ADM_ENTRIES "entries" #define SVN_WC__ADM_LOCK "lock" #define SVN_WC__ADM_TMP "tmp" #define SVN_WC__ADM_TEXT_BASE "text-base" #define SVN_WC__ADM_PROPS "props" #define SVN_WC__ADM_PROP_BASE "prop-base" #define SVN_WC__ADM_DIR_PROPS "dir-props" #define SVN_WC__ADM_DIR_PROP_BASE "dir-prop-base" #define SVN_WC__ADM_DIR_PROP_REVERT "dir-prop-revert" #define SVN_WC__ADM_WCPROPS "wcprops" #define SVN_WC__ADM_DIR_WCPROPS "dir-wcprops" #define SVN_WC__ADM_ALL_WCPROPS "all-wcprops" #define SVN_WC__ADM_LOG "log" #define SVN_WC__ADM_KILLME "KILLME" #define SVN_WC__ADM_README "README.txt" #define SVN_WC__ADM_EMPTY_FILE "empty-file" /* The basename of the ".prej" file, if a directory ever has property conflicts. This .prej file will appear *within* the conflicted directory. */ #define SVN_WC__THIS_DIR_PREJ "dir_conflicts" /* A space separated list of properties that we cache presence/absence of. * * Note that each entry contains information about which properties are cached * in that particular entry. This constant is only used when writing entries. */ #define SVN_WC__CACHABLE_PROPS \ SVN_PROP_SPECIAL " " SVN_PROP_EXTERNALS " " SVN_PROP_NEEDS_LOCK /* A few declarations for stuff in util.c. * If this section gets big, move it all out into a new util.h file. */ /* Ensure that DIR exists. */ svn_error_t *svn_wc__ensure_directory(const char *path, apr_pool_t *pool); /* Baton for svn_wc__compat_call_notify_func below. */ typedef struct svn_wc__compat_notify_baton_t { /* Wrapped func/baton. */ svn_wc_notify_func_t func; void *baton; } svn_wc__compat_notify_baton_t; /* Implements svn_wc_notify_func2_t. Call BATON->func (BATON is of type svn_wc__compat_notify_baton_t), passing BATON->baton and the appropriate arguments from NOTIFY. */ void svn_wc__compat_call_notify_func(void *baton, const svn_wc_notify_t *notify, apr_pool_t *pool); /* Set *MODIFIED_P to non-zero if FILENAME's text is modified with * regard to the base revision, else set *MODIFIED_P to zero. * FILENAME is a path to the file, not just a basename. ADM_ACCESS * must be an access baton for @a FILENAME. * * If FORCE_COMPARISON is true, this function will not allow early * return mechanisms that avoid actual content comparison. Instead, * if there is a text base, a full byte-by-byte comparison will be * done, and the entry checksum verified as well. (This means that if * the text base is much longer than the working file, every byte of * the text base will still be examined.) * * If COMPARE_TEXTBASES is true, the comparison will be between a * detranslated version of *FILENAME and the text base, otherwise, a * translated version of the text base and *FILENAME will be compared. * * If FILENAME does not exist, consider it unmodified. If it exists * but is not under revision control (not even scheduled for * addition), return the error SVN_ERR_ENTRY_NOT_FOUND. */ svn_error_t * svn_wc__text_modified_internal_p(svn_boolean_t *modified_p, const char *filename, svn_boolean_t force_comparison, svn_wc_adm_access_t *adm_access, svn_boolean_t compare_textbases, apr_pool_t *pool); /* Merge the difference between LEFT and RIGHT into MERGE_TARGET, accumulating instructions to update the working copy into LOG_ACCUM. The merge result is stored in *MERGE_OUTCOME and merge conflicts are marked in MERGE_RESULT using LEFT_LABEL, RIGHT_LABEL and TARGET_LABEL. When DRY_RUN is true, no actual changes are made to the working copy. If DIFF3_CMD is specified, the given external diff3 tool will be used instead of our built in diff3 routines. When MERGE_OPTIONS are specified, they are used by the internal diff3 routines, or passed to the external diff3 tool. For a complete description, see svn_wc_merge2() for which this is the (loggy) implementation. */ svn_error_t * svn_wc__merge_internal(svn_stringbuf_t **log_accum, enum svn_wc_merge_outcome_t *merge_outcome, const char *left, const char *right, const char *merge_target, svn_wc_adm_access_t *adm_access, const char *left_label, const char *right_label, const char *target_label, svn_boolean_t dry_run, const char *diff3_cmd, const apr_array_header_t *merge_options, apr_pool_t *pool); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* SVN_LIBSVN_WC_H */