[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: issue #406 patch 1

From: Karl Fogel <kfogel_at_newton.ch.collab.net>
Date: 2001-10-25 23:20:31 CEST

Matt Kraai <kraai@alumni.carnegiemellon.edu> writes:
> The following patch addresses one part of issue #406, the
> svn_fs_{node,txn,revision}_proplist functions. Earlier, I tried
> doing the whole thing in one patch but it was unmanageable. The
> following patch passed `make check', though the python tests were
> skipped as I don't have a sufficiently recent version installed.

I hate to do this to you, but the python tests *are* the test suite,
to a first approximation. If you didn't run them, then no significant
automated testing happened.

I just upgraded Python from source (www.python.org) at home yesterday
for this, it was a breeze. Strongly recommended... :-)

Can you do that and let us know if the full test suite passes with
this patch (or post a new patch if not)? Thanks,

-K

> * subversion/include/svn_string.h
>
> (svn_string_compare_stringbuf): New.
>
> * subversion/include/svn_fs.h
>
> (svn_fs_node_proplist, svn_fs_txn_proplist, svn_fs_revision_proplist):
> Note that the hash table contains pointers to svn_string_t objects.
>
> * subversion/libsvn_fs/this-branch.txt
>
> (svn_fs_node_proplist): Note that the hash table contains pointers to
> svn_string_t objects.
>
> * subversion/libsvn_fs/proplist.c
>
> (svn_fs__make_prop_hash): Insert svn_string_t * into the hash table.
>
> * subversion/libsvn_fs_proplist.h
>
> (svn_fs__make_prop_hash): Note that the hash table contains pointers
> to svn_string_t objects.
>
> * subversion/libsvn_subr/svn_string.c
>
> (svn_string_compare_stringbuf): New.
>
> * subversion/libsvn_ra_local/checkout.c
>
> (set_any_props): Construct svn_stringbuf_t.
>
> * subversion/tests/libsvn_fs/fs-test.c
>
> (revision_props, transaction_props, node_props): Use svn_string_t.
>
> * subversion/libsvn_repos/delta.c
>
> (delta_proplists): Construct svn_stringbuf_t, use
> svn_string_compare_stringbuf, and remove unused svn_stringbuf_t.
>
> Index: ./subversion/include/svn_string.h
> ===================================================================
> --- ./subversion/include/.svn/text-base/svn_string.h Thu Oct 25 10:57:47 2001
> +++ ./subversion/include/svn_string.h Thu Oct 25 12:18:54 2001
> @@ -225,6 +225,10 @@
> chopped, so if no such CHAR in STR, chops nothing and returns 0. */
> apr_size_t svn_stringbuf_chop_back_to_char (svn_stringbuf_t *str, char ch);
>
> +/* Return TRUE iff STR1 and STR2 have identical length and data. */
> +svn_boolean_t svn_string_compare_stringbuf (const svn_string_t *str1,
> + const svn_stringbuf_t *str2);
> +
> #ifdef __cplusplus
> }
> #endif /* __cplusplus */
> Index: ./subversion/include/svn_fs.h
> ===================================================================
> --- ./subversion/include/.svn/text-base/svn_fs.h Thu Oct 25 10:57:46 2001
> +++ ./subversion/include/svn_fs.h Thu Oct 25 12:02:38 2001
> @@ -528,7 +528,7 @@
>
> /* Set *TABLE_P to the entire property list of transaction TXN in
> filesystem FS, as an APR hash table allocated in POOL. The
> - resulting table maps property names to pointers to svn_stringbuf_t
> + resulting table maps property names to pointers to svn_string_t
> objects containing the property value. */
> svn_error_t *svn_fs_txn_proplist (apr_hash_t **table_p,
> svn_fs_txn_t *txn,
> @@ -728,7 +728,7 @@
>
> /* Set *TABLE_P to the entire property list of PATH in ROOT, as an APR
> hash table allocated in POOL. The resulting table maps property
> - names to pointers to svn_stringbuf_t objects containing the property
> + names to pointers to svn_string_t objects containing the property
> value. */
> svn_error_t *svn_fs_node_proplist (apr_hash_t **table_p,
> svn_fs_root_t *root,
> @@ -1127,10 +1127,8 @@
>
> /* Set *TABLE_P to the entire property list of revision REV in
> filesystem FS, as an APR hash table allocated in POOL. The table
> - maps char * property names to svn_stringbuf_t * values; the names
> - and values are allocated in POOL.
> -
> - ### todo (issue #406): map to svn_string_t, not svn_stringbuf_t. */
> + maps char * property names to svn_string_t * values; the names
> + and values are allocated in POOL. */
> svn_error_t *svn_fs_revision_proplist (apr_hash_t **table_p,
> svn_fs_t *fs,
> svn_revnum_t rev,
> Index: ./subversion/libsvn_fs/this-branch.txt
> ===================================================================
> --- ./subversion/libsvn_fs/.svn/text-base/this-branch.txt Thu Oct 25 10:57:34 2001
> +++ ./subversion/libsvn_fs/this-branch.txt Thu Oct 25 12:09:37 2001
> @@ -81,7 +81,7 @@
>
> /* Set *TABLE_P to the entire property list of PATH in ROOT, as an APR
> hash table allocated in POOL. The resulting table maps property
> - names to pointers to svn_stringbuf_t objects containing the property
> + names to pointers to svn_string_t objects containing the property
> value. */
> svn_error_t *svn_fs_node_proplist (apr_hash_t **table_p,
> svn_fs_root_t *root,
> Index: ./subversion/libsvn_fs/proplist.c
> ===================================================================
> --- ./subversion/libsvn_fs/.svn/text-base/proplist.c Thu Oct 25 10:57:33 2001
> +++ ./subversion/libsvn_fs/proplist.c Thu Oct 25 12:29:17 2001
> @@ -84,7 +84,7 @@
> apr_hash_set (table,
> apr_pstrndup(pool, this_name->data, this_name->len),
> this_name->len,
> - svn_stringbuf_ncreate (this_value->data,
> + svn_string_ncreate (this_value->data,
> this_value->len,
> pool));
> }
> Index: ./subversion/libsvn_fs/proplist.h
> ===================================================================
> --- ./subversion/libsvn_fs/.svn/text-base/proplist.h Thu Oct 25 10:57:32 2001
> +++ ./subversion/libsvn_fs/proplist.h Thu Oct 25 12:31:58 2001
> @@ -36,18 +36,9 @@
> const svn_string_t *name,
> apr_pool_t *pool);
>
> -/* Set *PROP_HASH to a hash table mapping char * names to
> +/* Set *PROP_HASH to a hash table mapping const char * names to
> svn_stringbuf_t * values, based on PROPLIST. The hash table and
> - its name/value pairs are all allocated in POOL.
> -
> - ### todo (issue #406): first of all, the hash should be mapping
> - names to svn_string_t's, not svn_stringbuf_t. Second, the fact
> - that the keys are char *'s is inconsistent with other interfaces by
> - which we set property names, which all take an svn_string_t or
> - svn_stringbuf_t right now (usually the former). Probably using
> - const char * is best -- I mean, who really wants binary property
> - names? -- but we need to be consistent about it. This change would
> - affect a lot of functions, not just here. */
> + its name/value pairs are all allocated in POOL. */
> svn_error_t *svn_fs__make_prop_hash (apr_hash_t **prop_hash,
> skel_t *proplist,
> apr_pool_t *pool);
> Index: ./subversion/libsvn_subr/svn_string.c
> ===================================================================
> --- ./subversion/libsvn_subr/.svn/text-base/svn_string.c Thu Oct 25 10:57:21 2001
> +++ ./subversion/libsvn_subr/svn_string.c Thu Oct 25 12:27:18 2001
> @@ -504,6 +504,23 @@
> }
>
>
> +svn_boolean_t
> +svn_string_compare_stringbuf (const svn_string_t *str1,
> + const svn_stringbuf_t *str2)
> +{
> + /* easy way out :) */
> + if (str1->len != str2->len)
> + return FALSE;
> +
> + /* now that we know they have identical lengths... */
> +
> + if (memcmp (str1->data, str2->data, str1->len))
> + return FALSE;
> + else
> + return TRUE;
> +}
> +
> +
>
> /* --------------------------------------------------------------
> * local variables:
> Index: ./subversion/libsvn_ra_local/checkout.c
> ===================================================================
> --- ./subversion/libsvn_ra_local/.svn/text-base/checkout.c Thu Oct 25 10:57:15 2001
> +++ ./subversion/libsvn_ra_local/checkout.c Thu Oct 25 12:08:36 2001
> @@ -93,8 +93,8 @@
> svn_stringbuf_t *name, *value;
>
> apr_hash_this (hi, &key, &klen, &val);
> - value = (svn_stringbuf_t *) val;
> name = svn_stringbuf_ncreate (key, klen, pool);
> + value = svn_stringbuf_create_from_string ((svn_string_t *) val, pool);
>
> if (is_dir)
> SVN_ERR (editor->change_dir_prop (object_baton, name, value));
> Index: ./subversion/tests/libsvn_fs/fs-test.c
> ===================================================================
> --- ./subversion/tests/libsvn_fs/.svn/text-base/fs-test.c Thu Oct 25 10:58:12 2001
> +++ ./subversion/tests/libsvn_fs/fs-test.c Thu Oct 25 12:22:55 2001
> @@ -737,7 +737,7 @@
> the expected values. */
> SVN_ERR (svn_fs_revision_proplist (&proplist, fs, 0, pool));
> {
> - svn_stringbuf_t *prop_value;
> + svn_string_t *prop_value;
>
> if (apr_hash_count (proplist) < 4 )
> return svn_error_createf
> @@ -850,7 +850,7 @@
> the expected values. */
> SVN_ERR (svn_fs_txn_proplist (&proplist, txn, pool));
> {
> - svn_stringbuf_t *prop_value;
> + svn_string_t *prop_value;
>
> /* All transactions get a datestamp property at their inception,
> so we expect *5*, not 4 properties. */
> @@ -900,7 +900,7 @@
> existed on the transaction just prior to its being committed. */
> SVN_ERR (svn_fs_revision_proplist (&proplist, fs, after_rev, pool));
> {
> - svn_stringbuf_t *prop_value;
> + svn_string_t *prop_value;
>
> if (apr_hash_count (proplist) < 5 )
> return svn_error_createf
> @@ -1018,7 +1018,7 @@
> the expected values. */
> SVN_ERR (svn_fs_node_proplist (&proplist, txn_root, "music.txt", pool));
> {
> - svn_stringbuf_t *prop_value;
> + svn_string_t *prop_value;
>
> if (apr_hash_count (proplist) != 4 )
> return svn_error_createf
> Index: ./subversion/libsvn_repos/delta.c
> ===================================================================
> --- ./subversion/libsvn_repos/.svn/text-base/delta.c Thu Oct 25 10:58:00 2001
> +++ ./subversion/libsvn_repos/delta.c Thu Oct 25 12:20:05 2001
> @@ -453,7 +453,8 @@
>
> for (hi = apr_hash_first (subpool, t_props); hi; hi = apr_hash_next (hi))
> {
> - svn_stringbuf_t *s_value, *t_value, *t_name;
> + svn_string_t *s_value;
> + svn_stringbuf_t *t_value, *t_name;
> const void *key;
> void *val;
> apr_size_t klen;
> @@ -461,7 +462,8 @@
> /* KEY is property name in target, VAL the value */
> apr_hash_this (hi, &key, &klen, &val);
> t_name = svn_stringbuf_ncreate (key, klen, subpool);
> - t_value = val;
> + t_value = svn_stringbuf_create_from_string ((svn_string_t *) val,
> + subpool);
>
> /* See if this property existed in the source. If so, and if
> the values in source and target differ, replace the value in
> @@ -469,7 +471,7 @@
> if (s_props
> && ((s_value = apr_hash_get (s_props, key, klen)) != 0))
> {
> - if (svn_stringbuf_compare (s_value, t_value))
> + if (svn_string_compare_stringbuf (s_value, t_value))
> SVN_ERR (change_fn (c, object, t_name, t_value, subpool));
>
> /* Remove the property from source list so we can track
> @@ -490,7 +492,7 @@
> {
> for (hi = apr_hash_first (subpool, s_props); hi; hi = apr_hash_next (hi))
> {
> - svn_stringbuf_t *s_value, *s_name;
> + svn_stringbuf_t *s_name;
> const void *key;
> void *val;
> apr_size_t klen;
> @@ -498,7 +500,6 @@
> /* KEY is property name in target, VAL the value */
> apr_hash_this (hi, &key, &klen, &val);
> s_name = svn_stringbuf_ncreate (key, klen, subpool);
> - s_value = val;
>
> SVN_ERR (change_fn (c, object, s_name, NULL, subpool));
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
> For additional commands, e-mail: dev-help@subversion.tigris.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sat Oct 21 14:36:45 2006

This is an archived mail posted to the Subversion Dev mailing list.