Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_wc/upgrade.c view on Meta::CPAN
#define ADM_EMPTY_FILE "empty-file"
#define ADM_LOG "log"
#define ADM_LOCK "lock"
/* New pristine location */
#define PRISTINE_STORAGE_RELPATH "pristine"
#define PRISTINE_STORAGE_EXT ".svn-base"
/* Number of characters in a pristine file basename, in WC format <= 28. */
#define PRISTINE_BASENAME_OLD_LEN 40
#define SDB_FILE "wc.db"
/* Read the properties from the file at PROPFILE_ABSPATH, returning them
as a hash in *PROPS. If the propfile is NOT present, then NULL will
be returned in *PROPS. */
static svn_error_t *
read_propfile(apr_hash_t **props,
const char *propfile_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
svn_error_t *err;
svn_stream_t *stream;
apr_finfo_t finfo;
err = svn_io_stat(&finfo, propfile_abspath, APR_FINFO_SIZE, scratch_pool);
if (err
&& (APR_STATUS_IS_ENOENT(err->apr_err)
|| SVN__APR_STATUS_IS_ENOTDIR(err->apr_err)))
{
svn_error_clear(err);
/* The propfile was not there. Signal with a NULL. */
*props = NULL;
return SVN_NO_ERROR;
}
else
SVN_ERR(err);
/* A 0-bytes file signals an empty property list.
(mostly used for revert-props) */
if (finfo.size == 0)
{
*props = apr_hash_make(result_pool);
return SVN_NO_ERROR;
}
SVN_ERR(svn_stream_open_readonly(&stream, propfile_abspath,
scratch_pool, scratch_pool));
/* ### does this function need to be smarter? will we see zero-length
### files? see props.c::load_props(). there may be more work here.
### need a historic analysis of 1.x property storage. what will we
### actually run into? */
/* ### loggy_write_properties() and immediate_install_props() write
### zero-length files for "no props", so we should be a bit smarter
### in here. */
/* ### should we be forgiving in here? I say "no". if we can't be sure,
### then we could effectively corrupt the local working copy. */
*props = apr_hash_make(result_pool);
SVN_ERR(svn_hash_read2(*props, stream, SVN_HASH_TERMINATOR, result_pool));
return svn_error_trace(svn_stream_close(stream));
}
/* Read one proplist (allocated from RESULT_POOL) from STREAM, and place it
into ALL_WCPROPS at NAME. */
static svn_error_t *
read_one_proplist(apr_hash_t *all_wcprops,
const char *name,
svn_stream_t *stream,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
apr_hash_t *proplist;
proplist = apr_hash_make(result_pool);
SVN_ERR(svn_hash_read2(proplist, stream, SVN_HASH_TERMINATOR, result_pool));
svn_hash_sets(all_wcprops, name, proplist);
return SVN_NO_ERROR;
}
/* Read the wcprops from all the files in the admin area of DIR_ABSPATH,
returning them in *ALL_WCPROPS. Results are allocated in RESULT_POOL,
and temporary allocations are performed in SCRATCH_POOL. */
static svn_error_t *
read_many_wcprops(apr_hash_t **all_wcprops,
const char *dir_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
const char *propfile_abspath;
apr_hash_t *wcprops;
apr_hash_t *dirents;
const char *props_dir_abspath;
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
apr_hash_index_t *hi;
*all_wcprops = apr_hash_make(result_pool);
/* First, look at dir-wcprops. */
propfile_abspath = svn_wc__adm_child(dir_abspath, WCPROPS_FNAME_FOR_DIR,
scratch_pool);
SVN_ERR(read_propfile(&wcprops, propfile_abspath, result_pool, iterpool));
if (wcprops != NULL)
svn_hash_sets(*all_wcprops, SVN_WC_ENTRY_THIS_DIR, wcprops);
props_dir_abspath = svn_wc__adm_child(dir_abspath, WCPROPS_SUBDIR_FOR_FILES,
scratch_pool);
/* Now walk the wcprops directory. */
SVN_ERR(svn_io_get_dirents3(&dirents, props_dir_abspath, TRUE,
scratch_pool, scratch_pool));
( run in 0.399 second using v1.01-cache-2.11-cpan-483215c6ad5 )