You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2014/09/24 18:08:19 UTC
svn commit: r1627352 - in /subversion/branches/move-tracking-2/subversion:
include/private/svn_editor3.h libsvn_delta/compat3.c libsvn_ra/ra_loader.c
libsvn_ra_local/ra_plugin.c libsvn_repos/commit.c libsvn_wc/util.c
libsvn_wc/wc.h
Author: julianfoad
Date: Wed Sep 24 16:08:18 2014
New Revision: 1627352
URL: http://svn.apache.org/r1627352
Log:
On the 'move-tracking-2' branch: Extend the editor shim 'fetch' callbacks to
support fetching a directory's children.
The facility is not yet used, but my in-progress move-tracking demo code
might want to use it.
* subversion/include/private/svn_editor3.h
(svn_editor3__shim_fetch_func_t): Add a 'children_names' output.
* subversion/libsvn_delta/compat3.c
(...everywhere...): Pass NULL for the new parameter.
* subversion/libsvn_ra_local/ra_plugin.c
(fetch_func): Implement fetching children's names.
* subversion/libsvn_ra/ra_loader.c
(fetch): Same.
* subversion/libsvn_repos/commit.c
(fetch_func): Same.
* subversion/libsvn_wc/wc.h,
subversion/libsvn_wc/util.c
(svn_wc__fetch_func): Add the new parameter, but not implemented.
Modified:
subversion/branches/move-tracking-2/subversion/include/private/svn_editor3.h
subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3.c
subversion/branches/move-tracking-2/subversion/libsvn_ra/ra_loader.c
subversion/branches/move-tracking-2/subversion/libsvn_ra_local/ra_plugin.c
subversion/branches/move-tracking-2/subversion/libsvn_repos/commit.c
subversion/branches/move-tracking-2/subversion/libsvn_wc/util.c
subversion/branches/move-tracking-2/subversion/libsvn_wc/wc.h
Modified: subversion/branches/move-tracking-2/subversion/include/private/svn_editor3.h
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/include/private/svn_editor3.h?rev=1627352&r1=1627351&r2=1627352&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/include/private/svn_editor3.h (original)
+++ subversion/branches/move-tracking-2/subversion/include/private/svn_editor3.h Wed Sep 24 16:08:18 2014
@@ -1446,6 +1446,7 @@ typedef svn_error_t *(*svn_editor3__shim
svn_node_kind_t *kind,
apr_hash_t **props,
svn_stringbuf_t **file_text,
+ apr_hash_t **children_names,
void *baton,
const char *repos_relpath,
svn_revnum_t revision,
Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3.c?rev=1627352&r1=1627351&r2=1627352&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/compat3.c Wed Sep 24 16:08:18 2014
@@ -977,7 +977,7 @@ apply_propedit(struct ev3_edit_baton *eb
Otherwise, we get the properties from BASE. */
if (copyfrom_path)
{
- SVN_ERR(eb->fetch_func(NULL, &change->props, NULL,
+ SVN_ERR(eb->fetch_func(NULL, &change->props, NULL, NULL,
eb->fetch_baton,
copyfrom_path, copyfrom_rev,
eb->edit_pool, scratch_pool));
@@ -994,7 +994,7 @@ apply_propedit(struct ev3_edit_baton *eb
if (! SVN_IS_VALID_REVNUM(base_revision))
SVN_DBG(("apply_propedit('%s@%ld') ### need to resolve to HEAD?",
relpath, base_revision));
- SVN_ERR(eb->fetch_func(NULL, &change->props, NULL,
+ SVN_ERR(eb->fetch_func(NULL, &change->props, NULL, NULL,
eb->fetch_baton,
relpath, base_revision,
eb->edit_pool, scratch_pool));
@@ -1194,7 +1194,7 @@ ev3_add_file(const char *path,
fb->eb->edit_pool);
change->copyfrom_rev = copyfrom_revision;
- SVN_ERR(fb->eb->fetch_func(NULL, NULL, &fb->delta_base_text,
+ SVN_ERR(fb->eb->fetch_func(NULL, NULL, &fb->delta_base_text, NULL,
fb->eb->fetch_baton,
change->copyfrom_path,
change->copyfrom_rev,
@@ -1250,14 +1250,14 @@ ev3_open_file(const char *path,
fb->copyfrom_relpath = copyfrom_relpath;
fb->copyfrom_rev = pb->copyfrom_rev;
- SVN_ERR(fb->eb->fetch_func(NULL, NULL, &fb->delta_base_text,
+ SVN_ERR(fb->eb->fetch_func(NULL, NULL, &fb->delta_base_text, NULL,
fb->eb->fetch_baton,
copyfrom_relpath, pb->copyfrom_rev,
result_pool, scratch_pool));
}
else
{
- SVN_ERR(fb->eb->fetch_func(NULL, NULL, &fb->delta_base_text,
+ SVN_ERR(fb->eb->fetch_func(NULL, NULL, &fb->delta_base_text, NULL,
fb->eb->fetch_baton,
relpath, base_revision,
result_pool, scratch_pool));
@@ -1864,7 +1864,7 @@ fetch_base_props(apr_hash_t **base_props
if (source_path)
{
- SVN_ERR(fetch_func(NULL, base_props, NULL,
+ SVN_ERR(fetch_func(NULL, base_props, NULL, NULL,
fetch_baton, source_path, source_rev,
result_pool, scratch_pool));
}
@@ -2257,7 +2257,7 @@ editor3_cp(void *baton,
change->copyfrom_rev = from_peg_loc.rev;
/* We need the source's kind to know whether to call add_directory()
or add_file() later on. */
- SVN_ERR(eb->fetch_func(&change->kind, NULL, NULL,
+ SVN_ERR(eb->fetch_func(&change->kind, NULL, NULL, NULL,
eb->fetch_baton,
from_peg_loc.relpath, from_peg_loc.rev,
scratch_pool, scratch_pool));
@@ -2296,7 +2296,7 @@ editor3_mv(void *baton,
already recorded a change -- an earlier move, I suppose -- then the
'kind' has already been recorded there and we could potentially
re-use it here. But we have no need yet to optimise that case.) */
- SVN_ERR(eb->fetch_func(&change->kind, NULL, NULL, eb->fetch_baton,
+ SVN_ERR(eb->fetch_func(&change->kind, NULL, NULL, NULL, eb->fetch_baton,
from_loc.relpath, from_loc.rev,
scratch_pool, scratch_pool));
Modified: subversion/branches/move-tracking-2/subversion/libsvn_ra/ra_loader.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_ra/ra_loader.c?rev=1627352&r1=1627351&r2=1627352&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_ra/ra_loader.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_ra/ra_loader.c Wed Sep 24 16:08:18 2014
@@ -768,6 +768,7 @@ static svn_error_t *
fetch(svn_node_kind_t *kind_p,
apr_hash_t **props_p,
svn_stringbuf_t **file_text,
+ apr_hash_t **children_names,
void *baton,
const char *repos_relpath,
svn_revnum_t revision,
@@ -778,6 +779,13 @@ fetch(svn_node_kind_t *kind_p,
svn_node_kind_t kind;
apr_hash_index_t *hi;
+ if (props_p)
+ *props_p = NULL;
+ if (file_text)
+ *file_text = NULL;
+ if (children_names)
+ *children_names = NULL;
+
SVN_ERR(svn_ra_check_path(fbb->session, repos_relpath, revision,
&kind, scratch_pool));
if (kind_p)
@@ -798,13 +806,17 @@ fetch(svn_node_kind_t *kind_p,
SVN_ERR(svn_stream_close(file_stream));
}
}
- else if (props_p)
+ else if (kind == svn_node_dir && (props_p || children_names))
{
- SVN_ERR(svn_ra_get_dir(fbb->session, repos_relpath, revision,
- NULL /*dirents*/, NULL, props_p, result_pool));
+ SVN_ERR(svn_ra_get_dir2(fbb->session,
+ children_names, NULL, props_p,
+ repos_relpath, revision,
+ 0 /*minimal child info*/,
+ result_pool));
}
+
/* Remove non-regular props */
- if (props_p)
+ if (props_p && *props_p)
{
for (hi = apr_hash_first(scratch_pool, *props_p); hi; hi = apr_hash_next(hi))
{
Modified: subversion/branches/move-tracking-2/subversion/libsvn_ra_local/ra_plugin.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_ra_local/ra_plugin.c?rev=1627352&r1=1627351&r2=1627352&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_ra_local/ra_plugin.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_ra_local/ra_plugin.c Wed Sep 24 16:08:18 2014
@@ -918,6 +918,7 @@ static svn_error_t *
fetch_func(svn_node_kind_t *kind_p,
apr_hash_t **props_p,
svn_stringbuf_t **file_text,
+ apr_hash_t **children_names,
void *baton,
const char *repos_relpath,
svn_revnum_t revision,
@@ -968,7 +969,7 @@ fetch_func(svn_node_kind_t *kind_p,
else if (kind == svn_node_dir && props_p)
{
SVN_ERR(svn_ra_local__get_dir(fb->session,
- NULL /*dirents*/, NULL /*fetched_rev*/,
+ children_names, NULL /*fetched_rev*/,
props_p, session_relpath, revision,
0 /*dirent_fields*/, result_pool));
}
Modified: subversion/branches/move-tracking-2/subversion/libsvn_repos/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_repos/commit.c?rev=1627352&r1=1627351&r2=1627352&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_repos/commit.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_repos/commit.c Wed Sep 24 16:08:18 2014
@@ -841,6 +841,7 @@ static svn_error_t *
fetch_func(svn_node_kind_t *kind,
apr_hash_t **props,
svn_stringbuf_t **file_text,
+ apr_hash_t **children_names,
void *baton,
const char *repos_relpath,
svn_revnum_t revision,
@@ -854,6 +855,13 @@ fetch_func(svn_node_kind_t *kind,
if (!SVN_IS_VALID_REVNUM(revision))
revision = svn_fs_txn_base_revision(eb->txn);
+ if (props)
+ *props = NULL;
+ if (file_text)
+ *file_text = NULL;
+ if (children_names)
+ *children_names = NULL;
+
SVN_ERR(svn_fs_revision_root(&fs_root, eb->fs, revision, scratch_pool));
if (kind)
@@ -891,6 +899,18 @@ fetch_func(svn_node_kind_t *kind,
SVN_ERR(svn_stringbuf_from_stream(file_text, contents, 0, result_pool));
}
+ if (children_names)
+ {
+ err = svn_fs_dir_entries(children_names, fs_root, repos_relpath,
+ scratch_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+ }
return SVN_NO_ERROR;
}
Modified: subversion/branches/move-tracking-2/subversion/libsvn_wc/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_wc/util.c?rev=1627352&r1=1627351&r2=1627352&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_wc/util.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_wc/util.c Wed Sep 24 16:08:18 2014
@@ -421,6 +421,7 @@ svn_error_t *
svn_wc__fetch_func(svn_node_kind_t *kind,
apr_hash_t **props,
svn_stringbuf_t **file_text,
+ apr_hash_t **children_names, /* ### unimplemented */
void *baton,
const char *repos_relpath,
svn_revnum_t revision,
Modified: subversion/branches/move-tracking-2/subversion/libsvn_wc/wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_wc/wc.h?rev=1627352&r1=1627351&r2=1627352&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_wc/wc.h (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_wc/wc.h Wed Sep 24 16:08:18 2014
@@ -749,6 +749,7 @@ svn_error_t *
svn_wc__fetch_func(svn_node_kind_t *kind,
apr_hash_t **props,
svn_stringbuf_t **file_text,
+ apr_hash_t **children_names,
void *baton,
const char *repos_relpath,
svn_revnum_t revision,