/* * adm_files.h : handles locations inside the wc adm area * (This should be the only code that actually knows * *where* things are in .svn/. If you can't get to * something via these interfaces, something's wrong.) * * ==================================================================== * 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_ADM_FILES_H #define SVN_LIBSVN_WC_ADM_FILES_H #include #include "svn_types.h" #include "props.h" #include "wc_db.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* Return a path to CHILD in the administrative area of PATH. If CHILD is NULL, then the path to the admin area is returned. The result is allocated in RESULT_POOL. */ const char *svn_wc__adm_child(const char *path, const char *child, apr_pool_t *result_pool); /* Return TRUE if the administrative area exists for this directory. */ svn_boolean_t svn_wc__adm_area_exists(const char *adm_abspath, apr_pool_t *pool); /* Set *CONTENTS to a readonly stream on the pristine text of the working * version of the file LOCAL_ABSPATH in DB. If the file is locally copied * or moved to this path, this means the pristine text of the copy source, * even if the file replaces a previously existing base node at this path. * * Set *CONTENTS to NULL if there is no pristine text because the file is * locally added (even if it replaces an existing base node). Return an * error if there is no pristine text for any other reason. * * If SIZE is not NULL, set *SIZE to the length of the pristine stream in * BYTES or to SVN_INVALID_FILESIZE if no pristine is available for this * file. * * For more detail, see the description of svn_wc_get_pristine_contents2(). */ svn_error_t * svn_wc__get_pristine_contents(svn_stream_t **contents, svn_filesize_t *size, svn_wc__db_t *db, const char *local_abspath, apr_pool_t *result_pool, apr_pool_t *scratch_pool); /* Set *RESULT_ABSPATH to the absolute path to a readable file containing the WC-1 "normal text-base" of LOCAL_ABSPATH in DB. "Normal text-base" means the same as in svn_wc__text_base_path(). ### May want to check the callers' exact requirements and replace this definition with something easier to comprehend. What the callers want: A path to a file that will remain available and unchanged as long as the caller wants it - such as for the lifetime of RESULT_POOL. What the current implementation provides: A path to the file in the pristine store. This file will be removed or replaced the next time this or another Subversion client updates the WC. If the node LOCAL_ABSPATH has no such pristine text, return an error of type SVN_ERR_WC_PATH_UNEXPECTED_STATUS. Allocate *RESULT_PATH in RESULT_POOL. */ svn_error_t * svn_wc__text_base_path_to_read(const char **result_abspath, svn_wc__db_t *db, const char *local_abspath, apr_pool_t *result_pool, apr_pool_t *scratch_pool); /*** Opening all kinds of adm files ***/ /* Open `PATH//FNAME'. */ svn_error_t *svn_wc__open_adm_stream(svn_stream_t **stream, const char *dir_abspath, const char *fname, apr_pool_t *result_pool, apr_pool_t *scratch_pool); /* Open a writable stream to a temporary (normal or revert) text base, associated with the versioned file LOCAL_ABSPATH in DB. Set *STREAM to the opened stream and *TEMP_BASE_ABSPATH to the path to the temporary file. The temporary file will have an arbitrary unique name, in contrast to the deterministic name that svn_wc__text_base_deterministic_tmp_path() returns. Arrange that, on stream closure, *MD5_CHECKSUM and *SHA1_CHECKSUM will be set to the MD-5 and SHA-1 checksums respectively of that file. MD5_CHECKSUM and/or SHA1_CHECKSUM may be NULL if not wanted. Allocate the new stream, path and checksums in RESULT_POOL. */ svn_error_t * svn_wc__open_writable_base(svn_stream_t **stream, const char **temp_base_abspath, svn_checksum_t **md5_checksum, svn_checksum_t **sha1_checksum, svn_wc__db_t *db, const char *wri_abspath, apr_pool_t *result_pool, apr_pool_t *scratch_pool); /* Blow away the admistrative directory associated with DIR_ABSPATH. For single-db this doesn't perform actual work unless the wcroot is passed. */ svn_error_t *svn_wc__adm_destroy(svn_wc__db_t *db, const char *dir_abspath, svn_cancel_func_t cancel_func, void *cancel_baton, apr_pool_t *scratch_pool); /* Cleanup the temporary storage area of the administrative directory (assuming temp and admin areas exist). */ svn_error_t * svn_wc__adm_cleanup_tmp_area(svn_wc__db_t *db, const char *adm_abspath, apr_pool_t *scratch_pool); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* SVN_LIBSVN_WC_ADM_FILES_H */