You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Joe Swatosh <jo...@gmail.com> on 2008/12/22 02:48:10 UTC
Re: svn commit: r33938 - in trunk: . notes/tree-conflicts
subversion/include subversion/include/private
subversion/libsvn_auth_kwallet subversion/libsvn_client
subversion/libsvn_subr subversion/libsvn_wc subversion/svn
subversion/tests/cmdline subver
Hi,
Is some initialization needed of the boolean out arguments in
svn_wc_conflicted_p()?
--
Joe
On Tue, Oct 28, 2008 at 8:22 AM, <sb...@tigris.org> wrote:
> Author: sbutler
> Date: Tue Oct 28 09:22:25 2008
> New Revision: 33938
>
SNIP
>
> Modified: trunk/subversion/libsvn_wc/questions.c
> URL: http://svn.collab.net/viewvc/svn/trunk/subversion/libsvn_wc/questions.c?pathrev=33938&r1=33937&r2=33938
> ==============================================================================
> --- trunk/subversion/libsvn_wc/questions.c Tue Oct 28 08:56:45 2008 (r33937)
> +++ trunk/subversion/libsvn_wc/questions.c Tue Oct 28 09:22:25 2008 (r33938)
> @@ -542,66 +542,81 @@ svn_wc_text_modified_p(svn_boolean_t *mo
> svn_error_t *
> svn_wc_conflicted_p2(svn_boolean_t *text_conflicted_p,
> svn_boolean_t *prop_conflicted_p,
> - svn_boolean_t *has_tree_conflicted_children,
> - const char *dir_path,
> - const svn_wc_entry_t *entry,
> + svn_boolean_t *tree_conflicted_p,
> + const char *path,
> + svn_wc_adm_access_t *adm_access,
> apr_pool_t *pool)
> {
> - const char *path;
> svn_node_kind_t kind;
> - apr_pool_t *subpool = svn_pool_create(pool); /* ### Why? */
> + const svn_wc_entry_t *entry;
> + const char* dir_path = svn_path_dirname(path, pool);
>
> - *text_conflicted_p = FALSE;
> - *prop_conflicted_p = FALSE;
> - *has_tree_conflicted_children = FALSE;
> -
> - /* Look for any text conflict, exercising only as much effort as
> - necessary to obtain a definitive answer. This only applies to
> - files, but we don't have to explicitly check that entry is a
> - file, since these attributes would never be set on a directory
> - anyway. A conflict file entry notation only counts if the
> - conflict file still exists on disk. */
> - if (entry->conflict_old)
> - {
> - path = svn_path_join(dir_path, entry->conflict_old, subpool);
> - SVN_ERR(svn_io_check_path(path, &kind, subpool));
> - if (kind == svn_node_file)
> - *text_conflicted_p = TRUE;
> - }
> + SVN_ERR(svn_wc_entry(&entry, path, adm_access, TRUE, pool));
>
> - if ((! *text_conflicted_p) && (entry->conflict_new))
> + if (text_conflicted_p)
> {
> - path = svn_path_join(dir_path, entry->conflict_new, subpool);
> - SVN_ERR(svn_io_check_path(path, &kind, subpool));
> - if (kind == svn_node_file)
> - *text_conflicted_p = TRUE;
> - }
> + *text_conflicted_p = FALSE;
>
> - if ((! *text_conflicted_p) && (entry->conflict_wrk))
> - {
> - path = svn_path_join(dir_path, entry->conflict_wrk, subpool);
> - SVN_ERR(svn_io_check_path(path, &kind, subpool));
> - if (kind == svn_node_file)
> - *text_conflicted_p = TRUE;
> + if (entry)
> + {
> + /* Look for any text conflict, exercising only as much effort as
> + necessary to obtain a definitive answer. This only applies to
> + files, but we don't have to explicitly check that entry is a
> + file, since these attributes would never be set on a directory
> + anyway. A conflict file entry notation only counts if the
> + conflict file still exists on disk. */
> +
> + if (entry->conflict_old)
> + {
> + path = svn_path_join(dir_path, entry->conflict_old, pool);
> + SVN_ERR(svn_io_check_path(path, &kind, pool));
> + *text_conflicted_p = (kind == svn_node_file);
> + }
> +
> + if ((! *text_conflicted_p) && (entry->conflict_new))
> + {
> + path = svn_path_join(dir_path, entry->conflict_new, pool);
> + SVN_ERR(svn_io_check_path(path, &kind, pool));
> + *text_conflicted_p = (kind == svn_node_file);
> + }
> +
> + if ((! *text_conflicted_p) && (entry->conflict_wrk))
> + {
> + path = svn_path_join(dir_path, entry->conflict_wrk, pool);
> + SVN_ERR(svn_io_check_path(path, &kind, pool));
> + *text_conflicted_p = (kind == svn_node_file);
> + }
> + }
> }
>
> /* What about prop conflicts? */
> - if (entry->prejfile)
> + if (prop_conflicted_p)
> {
> - path = svn_path_join(dir_path, entry->prejfile, subpool);
> - SVN_ERR(svn_io_check_path(path, &kind, subpool));
> - if (kind == svn_node_file)
> - *prop_conflicted_p = TRUE;
> + *prop_conflicted_p = FALSE;
> +
> + if (entry && entry->prejfile)
> + {
> + /* A dir's .prej file is _inside_ the dir. */
> + if (entry->kind == svn_node_dir)
> + path = svn_path_join(path, entry->prejfile, pool);
> + else
> + path = svn_path_join(dir_path, entry->prejfile, pool);
> +
> + SVN_ERR(svn_io_check_path(path, &kind, pool));
> + *prop_conflicted_p = (kind == svn_node_file);
> + }
> }
>
> - /* Check for tree conflicts (only "this-dir" entries have tree conflicts). */
> - if ((strcmp(entry->name, SVN_WC_ENTRY_THIS_DIR) == 0)
> - && entry->tree_conflict_data)
> + /* Find out whether it's a tree conflict victim. */
> + if (tree_conflicted_p)
> {
> - *has_tree_conflicted_children = TRUE;
> + svn_wc_conflict_description_t *conflict;
> +
> + SVN_ERR_ASSERT(adm_access != NULL);
> + SVN_ERR(svn_wc_get_tree_conflict(&conflict, path, adm_access, pool));
> + *tree_conflicted_p = (conflict != NULL);
> }
>
> - svn_pool_destroy(subpool);
> return SVN_NO_ERROR;
> }
>
> @@ -612,10 +627,38 @@ svn_wc_conflicted_p(svn_boolean_t *text_
> const svn_wc_entry_t *entry,
> apr_pool_t *pool)
> {
> - svn_boolean_t has_tree_conflicted_children;
> - return svn_wc_conflicted_p2(text_conflicted_p, prop_conflicted_p,
> - &has_tree_conflicted_children, dir_path, entry,
> - pool);
> + svn_node_kind_t kind;
> + const char *path;
> +
*text_conflicted_p = FALSE;
*prop_conflicted_p =FALSE;
> + if (entry->conflict_old)
> + {
> + path = svn_path_join(dir_path, entry->conflict_old, pool);
> + SVN_ERR(svn_io_check_path(path, &kind, pool));
> + *text_conflicted_p = (kind == svn_node_file);
> + }
> +
> + if ((! *text_conflicted_p) && (entry->conflict_new))
> + {
> + path = svn_path_join(dir_path, entry->conflict_new, pool);
> + SVN_ERR(svn_io_check_path(path, &kind, pool));
> + *text_conflicted_p = (kind == svn_node_file);
> + }
> +
> + if ((! *text_conflicted_p) && (entry->conflict_wrk))
> + {
> + path = svn_path_join(dir_path, entry->conflict_wrk, pool);
> + SVN_ERR(svn_io_check_path(path, &kind, pool));
> + *text_conflicted_p = (kind == svn_node_file);
> + }
> +
> + if (entry->prejfile)
> + {
> + path = svn_path_join(dir_path, entry->prejfile, pool);
> + SVN_ERR(svn_io_check_path(path, &kind, pool));
> + *prop_conflicted_p = (kind == svn_node_file);
> + }
> +
> + return SVN_NO_ERROR;
> }
>
SNIP
>
>
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=989339
Re: svn commit: r33938 - in trunk: . notes/tree-conflicts
subversion/include subversion/include/private
subversion/libsvn_auth_kwallet subversion/libsvn_client
subversion/libsvn_subr subversion/libsvn_wc subversion/svn
subversion/tests/cmdline subver
Posted by Julian Foad <ju...@btopenworld.com>.
Joe Swatosh wrote:
> Is some initialization needed of the boolean out arguments in
> svn_wc_conflicted_p()?
[...]
> > @@ -612,10 +627,38 @@ svn_wc_conflicted_p(svn_boolean_t *text_
> > const svn_wc_entry_t *entry,
> > apr_pool_t *pool)
> > {
> > - svn_boolean_t has_tree_conflicted_children;
> > - return svn_wc_conflicted_p2(text_conflicted_p, prop_conflicted_p,
> > - &has_tree_conflicted_children, dir_path, entry,
> > - pool);
> > + svn_node_kind_t kind;
> > + const char *path;
> > +
>
>
> *text_conflicted_p = FALSE;
> *prop_conflicted_p =FALSE;
Yes! Thank you for noticing this. Fixed in r34886.
Thanks.
- Julian
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=989953