On Fri, 22 Sep 2006, Kamesh Jayachandran wrote:
...
> In case of three way merge handle the fact that a svn_merge_range_t's
> "start" and "end" are inclusive.
>
> * subversion/libsvn_client/diff.c
> (grok_range_info_from_opt_revisions):
> In case of three way merge handle the fact that a svn_merge_range_t's
> "start" and "end" are inclusive.
I committed this change in r21605 to get another test passing, but I
have doubts about this approach being a permanent solution.
This leaves only 3 merge tests failing on the merge-tracking branch!
Yesterday, I made some great progress with test 17. I traced the
problem to the following call stack:
svn_wc_adm_retrieve (libsvn_wc/lock.c:962)
walker_helper (libsvn_wc/entries.c)
svn_wc_walk_entries2 (libsvn_wc/entries.c)
svn_client__get_prop_from_wc (libsvn_client/prop_commands.c)
parse_merge_info (libsvn_client/diff.c)
get_wc_target_merge_info (libsvn_client/diff.c)
The problem is that a WC directory *underneath* the directory which is
the target of the merge is missing from the WC. As
svn_wc_walk_entries2() is strolling through the WC to retrieve the
value for the "svn:mergeinfo" property from each sub-path, it attempts
to access the .svn area of a directory which doesn't exist:
From walker_helper():
if (current_entry->kind == svn_node_dir)
{
svn_wc_adm_access_t *entry_access;
SVN_ERR(svn_wc_adm_retrieve(&entry_access, adm_access, entrypath,
subpool));
From svn_wc_adm_retrieve():
if (kind == svn_node_none)
return svn_error_createf(SVN_ERR_WC_NOT_LOCKED, NULL,
_("Directory '%s' is missing"),
svn_path_local_style(path, pool));
walker_helper()'s attempt to retrieve the svn_wc_adm_access_t for the
sub-directory without a svn_io_check_path() call might be a reasonable
optimization. However, because of the generic SVN_ERR_WC_NOT_LOCKED
error thrown by svn_wc_adm_retrieve(), there doesn't seem to be way
for walker_helper() to determine that the directory is missing (at
least, not without subsequently resorting to the path check). David
James and I were thinking that this scenario should result in an error
with a different code (e.g. SVN_ERR_WC_PATH_MISSING or something),
which could be detected further up the call stack.
While this seems like a fairly reasonable approach, I'm not clear what
other implications it might have for walker_helper(). Any advice
welcome...
- Dan
- application/pgp-signature attachment: stored
Received on Fri Sep 22 19:09:25 2006