Hi Mike,
I can't seem to get the Ruby bindings tests to pass after this commit....
On Dec 20, 2007 12:19 PM, <cmpilato@tigris.org> wrote:
> Author: cmpilato
> Date: Thu Dec 20 12:19:20 2007
> New Revision: 28605
>
> Log:
> Teach svn_client_get_changelist[s]() to handle multiple changelists,
> or to report on any changelists found.
>
> * subversion/include/svn_client.h
> (svn_changelist_receiver_t): Add 'changelist' parameter.
> (svn_client_get_changelists): Was svn_client_get_changelist().
>
> * subversion/libsvn_client/changelist.c
> (struct fe_baton): Trade string 'changelist' for hash 'changelists'.
> (found_an_entry): Check against a changelists hash instead of a
> single string, and pass changelist name to the callback function.
> (svn_client_get_changelists): Was svn_client_get_changelist().
> Update use of fe_baton, building a hash of changelist names to be
> checked.
>
> * subversion/include/svn_hash.h,
> * subversion/libsvn_subr/hash.c
> (svn_hash_from_array): New.
>
> * subversion/svn/util.c
> (svn_cl__get_changelist): Update call to svn_client_get_changelists().
>
> Modified: trunk/subversion/libsvn_client/changelist.c
> URL: http://svn.collab.net/viewvc/svn/trunk/subversion/libsvn_client/changelist.c?pathrev=28605&r1=28604&r2=28605
> ==============================================================================
> --- trunk/subversion/libsvn_client/changelist.c (original)
> +++ trunk/subversion/libsvn_client/changelist.c Thu Dec 20 12:19:20 2007
> @@ -25,6 +25,7 @@
> #include "svn_client.h"
> #include "svn_wc.h"
> #include "svn_pools.h"
> +#include "svn_hash.h"
>
> #include "client.h"
>
> @@ -78,7 +79,7 @@
> {
> svn_changelist_receiver_t callback_func;
> void *callback_baton;
> - const char *changelist_name;
> + apr_hash_t *changelists;
> apr_pool_t *pool;
> };
>
> @@ -92,16 +93,19 @@
> struct fe_baton *b = (struct fe_baton *)baton;
>
> /* If the entry has a changelist, and is a file or is the "this-dir"
> - entry for directory, and the changelist matches what we're looking
> - for... */
> + entry for directory, and the changelist matches one that we're
> + looking for (or we aren't looking for any in particular)... */
> if (entry->changelist
> + && ((! b->changelists)
> + || apr_hash_get(b->changelists, entry->changelist,
> + APR_HASH_KEY_STRING))
> && ((entry->kind == svn_node_file)
> || ((entry->kind == svn_node_dir)
> - && (strcmp(entry->name, SVN_WC_ENTRY_THIS_DIR) == 0)))
> - && (strcmp(entry->changelist, b->changelist_name) == 0))
> + && (strcmp(entry->name, SVN_WC_ENTRY_THIS_DIR) == 0))))
> {
> /* ...then call the callback function. */
> - SVN_ERR(b->callback_func(b->callback_baton, path, pool));
> + SVN_ERR(b->callback_func(b->callback_baton, path,
> + entry->changelist, pool));
> }
>
> return SVN_NO_ERROR;
.... this is were the issue seems to be. The call to apr_hash_get()
above is always
returning zero. I did a little experimenting and it appears that it
only finds the key
if it is a pointer to the same string rather than a string with the
same value.
I guess this is not the expected behavior since the length is
APR_HASH_KEY_STRING.
Perhaps the problem is actually in svn_hash_from_array() where the
apr_hash_set() is
called with a length of keys->elt_size?
Maybe I'm all wet, but I could sure use some help.
--
Thanks, Joe
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Thu Dec 27 19:39:40 2007