Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_wc/adm_files.c view on Meta::CPAN
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. ***/
/* */
static svn_error_t *
make_adm_subdir(const char *path,
const char *subdir,
apr_pool_t *pool)
{
const char *fullpath;
fullpath = svn_wc__adm_child(path, subdir, pool);
return svn_io_dir_make(fullpath, APR_OS_DEFAULT, pool);
}
/*** Syncing files in the adm area. ***/
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)
{
svn_wc__db_status_t status;
svn_node_kind_t kind;
const svn_checksum_t *checksum;
SVN_ERR(svn_wc__db_read_pristine_info(&status, &kind, NULL, NULL, NULL, NULL,
&checksum, NULL, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
/* Sanity */
if (kind != svn_node_file)
return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
_("Can only get the pristine contents of files; "
"'%s' is not a file"),
svn_dirent_local_style(local_abspath,
scratch_pool));
if (status == svn_wc__db_status_not_present)
/* We know that the delete of this node has been committed.
This should be the same as if called on an unknown path. */
return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
_("Cannot get the pristine contents of '%s' "
"because its delete is already committed"),
svn_dirent_local_style(local_abspath,
scratch_pool));
else if (status == svn_wc__db_status_server_excluded
|| status == svn_wc__db_status_excluded
|| status == svn_wc__db_status_incomplete)
return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
_("Cannot get the pristine contents of '%s' "
"because it has an unexpected status"),
svn_dirent_local_style(local_abspath,
scratch_pool));
if (checksum == NULL)
return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
_("Node '%s' has no pristine text"),
svn_dirent_local_style(local_abspath,
scratch_pool));
SVN_ERR(svn_wc__db_pristine_get_path(result_abspath, db, local_abspath,
checksum,
result_pool, scratch_pool));
return SVN_NO_ERROR;
}
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)
{
svn_wc__db_status_t status;
svn_node_kind_t kind;
const svn_checksum_t *sha1_checksum;
if (size)
*size = SVN_INVALID_FILESIZE;
SVN_ERR(svn_wc__db_read_pristine_info(&status, &kind, NULL, NULL, NULL, NULL,
&sha1_checksum, NULL, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
/* Sanity */
if (kind != svn_node_file)
return svn_error_createf(SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
_("Can only get the pristine contents of files; "
"'%s' is not a file"),
svn_dirent_local_style(local_abspath,
scratch_pool));
if (status == svn_wc__db_status_added && !sha1_checksum)
{
/* Simply added. The pristine base does not exist. */
*contents = NULL;
return SVN_NO_ERROR;
}
else if (status == svn_wc__db_status_not_present)
/* We know that the delete of this node has been committed.
This should be the same as if called on an unknown path. */
return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
_("Cannot get the pristine contents of '%s' "
"because its delete is already committed"),
svn_dirent_local_style(local_abspath,
scratch_pool));
else if (status == svn_wc__db_status_server_excluded
|| status == svn_wc__db_status_excluded
|| status == svn_wc__db_status_incomplete)
return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
_("Cannot get the pristine contents of '%s' "
"because it has an unexpected status"),
svn_dirent_local_style(local_abspath,
scratch_pool));
if (sha1_checksum)
SVN_ERR(svn_wc__db_pristine_read(contents, size, db, local_abspath,
sha1_checksum,
result_pool, scratch_pool));
else
*contents = NULL;
return SVN_NO_ERROR;
}
/*** Opening and closing files in the adm area. ***/
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)
{
const char *local_abspath;
SVN_ERR_ASSERT(svn_dirent_is_absolute(dir_abspath));
local_abspath = svn_wc__adm_child(dir_abspath, fname, scratch_pool);
return svn_error_trace(svn_stream_open_readonly(stream, local_abspath,
result_pool, scratch_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)
{
const char *temp_dir_abspath;
SVN_ERR_ASSERT(svn_dirent_is_absolute(wri_abspath));
SVN_ERR(svn_wc__db_pristine_get_tempdir(&temp_dir_abspath, db, wri_abspath,
scratch_pool, scratch_pool));
src/subversion/subversion/libsvn_wc/adm_files.c view on Meta::CPAN
SVN_ERR(svn_io_file_create(svn_wc__adm_child(local_abspath,
SVN_WC__ADM_FORMAT,
pool),
SVN_WC__NON_ENTRIES_STRING,
pool));
return SVN_NO_ERROR;
}
svn_error_t *
svn_wc__internal_ensure_adm(svn_wc__db_t *db,
const char *local_abspath,
const char *url,
const char *repos_root_url,
const char *repos_uuid,
svn_revnum_t revision,
svn_depth_t depth,
apr_pool_t *scratch_pool)
{
int format;
const char *original_repos_relpath;
const char *original_root_url;
svn_boolean_t is_op_root;
const char *repos_relpath = svn_uri_skip_ancestor(repos_root_url, url,
scratch_pool);
svn_wc__db_status_t status;
const char *db_repos_relpath, *db_repos_root_url, *db_repos_uuid;
svn_revnum_t db_revision;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(url != NULL);
SVN_ERR_ASSERT(repos_root_url != NULL);
SVN_ERR_ASSERT(repos_uuid != NULL);
SVN_ERR_ASSERT(repos_relpath != NULL);
SVN_ERR(svn_wc__internal_check_wc(&format, db, local_abspath, TRUE,
scratch_pool));
/* Early out: we know we're not dealing with an existing wc, so
just create one. */
if (format == 0)
return svn_error_trace(init_adm(db, local_abspath,
repos_relpath, repos_root_url, repos_uuid,
revision, depth, scratch_pool));
SVN_ERR(svn_wc__db_read_info(&status, NULL,
&db_revision, &db_repos_relpath,
&db_repos_root_url, &db_repos_uuid,
NULL, NULL, NULL, NULL, NULL, NULL,
&original_repos_relpath, &original_root_url,
NULL, NULL, NULL, NULL, NULL, NULL,
NULL, &is_op_root, NULL, NULL,
NULL, NULL, NULL,
db, local_abspath, scratch_pool, scratch_pool));
/* When the directory exists and is scheduled for deletion or is not-present
* do not check the revision or the URL. The revision can be any
* arbitrary revision and the URL may differ if the add is
* being driven from a merge which will have a different URL. */
if (status != svn_wc__db_status_deleted
&& status != svn_wc__db_status_not_present)
{
/* ### Should we match copyfrom_revision? */
if (db_revision != revision)
return
svn_error_createf(SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
_("Revision %ld doesn't match existing "
"revision %ld in '%s'"),
revision, db_revision, local_abspath);
if (!db_repos_root_url)
{
if (status == svn_wc__db_status_added)
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL,
&db_repos_relpath,
&db_repos_root_url,
&db_repos_uuid,
NULL, NULL, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
else
SVN_ERR(svn_wc__db_scan_base_repos(&db_repos_relpath,
&db_repos_root_url,
&db_repos_uuid,
db, local_abspath,
scratch_pool, scratch_pool));
}
/* The caller gives us a URL which should match the entry. However,
some callers compensate for an old problem in entry->url and pass
the copyfrom_url instead. See ^/notes/api-errata/1.7/wc002.txt. As
a result, we allow the passed URL to match copyfrom_url if it
does not match the entry's primary URL. */
if (strcmp(db_repos_uuid, repos_uuid)
|| strcmp(db_repos_root_url, repos_root_url)
|| !svn_relpath_skip_ancestor(db_repos_relpath, repos_relpath))
{
if (!is_op_root /* copy_from was set on op-roots only */
|| original_root_url == NULL
|| strcmp(original_root_url, repos_root_url)
|| strcmp(original_repos_relpath, repos_relpath))
return
svn_error_createf(SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL,
_("URL '%s' (uuid: '%s') doesn't match existing "
"URL '%s' (uuid: '%s') in '%s'"),
url,
db_repos_uuid,
svn_path_url_add_component2(db_repos_root_url,
db_repos_relpath,
scratch_pool),
repos_uuid,
local_abspath);
}
}
return SVN_NO_ERROR;
}
svn_error_t *
svn_wc_ensure_adm4(svn_wc_context_t *wc_ctx,
const char *local_abspath,
( run in 3.201 seconds using v1.01-cache-2.11-cpan-524268b4103 )