Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_wc/adm_files.c view on Meta::CPAN
#include <stdarg.h>
#include <apr_pools.h>
#include <apr_file_io.h>
#include <apr_strings.h>
#include "svn_types.h"
#include "svn_error.h"
#include "svn_io.h"
#include "svn_dirent_uri.h"
#include "svn_path.h"
#include "svn_hash.h"
#include "wc.h"
#include "adm_files.h"
#include "entries.h"
#include "lock.h"
#include "svn_private_config.h"
#include "private/svn_wc_private.h"
/*** File names in the adm area. ***/
/* The default name of the WC admin directory. This name is always
checked by svn_wc_is_adm_dir. */
static const char default_adm_dir_name[] = ".svn";
/* The name that is actually used for the WC admin directory. The
commonest case where this won't be the default is in Windows
ASP.NET development environments, which used to choke on ".svn". */
static const char *adm_dir_name = default_adm_dir_name;
svn_boolean_t
svn_wc_is_adm_dir(const char *name, apr_pool_t *pool)
{
return (0 == strcmp(name, adm_dir_name)
|| 0 == strcmp(name, default_adm_dir_name));
}
const char *
svn_wc_get_adm_dir(apr_pool_t *pool)
{
return adm_dir_name;
}
svn_error_t *
svn_wc_set_adm_dir(const char *name, apr_pool_t *pool)
{
/* This is the canonical list of administrative directory names.
FIXME:
An identical list is used in
libsvn_subr/opt.c:svn_opt__args_to_target_array(),
but that function can't use this list, because that use would
create a circular dependency between libsvn_wc and libsvn_subr.
Make sure changes to the lists are always synchronized! */
static const char *valid_dir_names[] = {
default_adm_dir_name,
"_svn",
NULL
};
const char **dir_name;
for (dir_name = valid_dir_names; *dir_name; ++dir_name)
if (0 == strcmp(name, *dir_name))
{
/* Use the pointer to the statically allocated string
constant, to avoid potential pool lifetime issues. */
adm_dir_name = *dir_name;
return SVN_NO_ERROR;
}
return svn_error_createf(SVN_ERR_BAD_FILENAME, NULL,
_("'%s' is not a valid administrative "
"directory name"),
svn_dirent_local_style(name, pool));
}
const char *
svn_wc__adm_child(const char *path,
const char *child,
apr_pool_t *result_pool)
{
return svn_dirent_join_many(result_pool,
path,
adm_dir_name,
child,
NULL);
}
svn_boolean_t
svn_wc__adm_area_exists(const char *adm_abspath,
apr_pool_t *pool)
{
const char *path = svn_wc__adm_child(adm_abspath, NULL, pool);
svn_node_kind_t kind;
svn_error_t *err;
err = svn_io_check_path(path, &kind, pool);
if (err)
{
svn_error_clear(err);
/* Return early, since kind is undefined in this case. */
return FALSE;
}
return kind != svn_node_none;
}
/*** Making and using files in the adm area. ***/
/* */
( run in 0.325 second using v1.01-cache-2.11-cpan-d7f47b0818f )