On Mon, May 21, 2012 at 9:03 AM, <stsp_at_apache.org> wrote:
> Author: stsp
> Date: Mon May 21 14:03:46 2012
> New Revision: 1341031
>
> URL: http://svn.apache.org/viewvc?rev=1341031&view=rev
> Log:
> Make 'svn proplist' print property lists in sorted order.
> Avoids random output ordering with APR-1.4.6.
If we do this on a regular basis, it might be useful to implement a
wrapper which takes a baton and handler function and then calls the
handler with the hash key/value in sorted order. It might add some
overhead, but it also consolidates the sorting into one location,
rather than sprinkled everywhere. It doesn't matter much to me; just
a thought that arose upon review. :)
-Hyrum
> * subversion/svn/props.c
> (svn_cl__print_prop_hash, svn_cl__print_xml_prop_hash): Iterate over a sorted
> hash key array rather than iterating over the property hash table itself.
>
> Modified:
> subversion/trunk/subversion/svn/props.c
>
> Modified: subversion/trunk/subversion/svn/props.c
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/props.c?rev=1341031&r1=1341030&r2=1341031&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/svn/props.c (original)
> +++ subversion/trunk/subversion/svn/props.c Mon May 21 14:03:46 2012
> @@ -31,6 +31,7 @@
> #include "svn_cmdline.h"
> #include "svn_string.h"
> #include "svn_error.h"
> +#include "svn_sorts.h"
> #include "svn_subst.h"
> #include "svn_props.h"
> #include "svn_string.h"
> @@ -87,12 +88,16 @@ svn_cl__print_prop_hash(svn_stream_t *ou
> svn_boolean_t names_only,
> apr_pool_t *pool)
> {
> - apr_hash_index_t *hi;
> + apr_array_header_t *sorted_props;
> + int i;
>
> - for (hi = apr_hash_first(pool, prop_hash); hi; hi = apr_hash_next(hi))
> + sorted_props = svn_sort__hash(prop_hash, svn_sort_compare_items_lexically,
> + pool);
> + for (i = 0; i < sorted_props->nelts; i++)
> {
> - const char *pname = svn__apr_hash_index_key(hi);
> - svn_string_t *propval = svn__apr_hash_index_val(hi);
> + svn_sort__item_t item = APR_ARRAY_IDX(sorted_props, i, svn_sort__item_t);
> + const char *pname = item.key;
> + svn_string_t *propval = item.value;
> const char *pname_stdout;
>
> if (svn_prop_needs_translation(pname))
> @@ -150,15 +155,19 @@ svn_cl__print_xml_prop_hash(svn_stringbu
> svn_boolean_t names_only,
> apr_pool_t *pool)
> {
> - apr_hash_index_t *hi;
> + apr_array_header_t *sorted_props;
> + int i;
>
> if (*outstr == NULL)
> *outstr = svn_stringbuf_create_empty(pool);
>
> - for (hi = apr_hash_first(pool, prop_hash); hi; hi = apr_hash_next(hi))
> + sorted_props = svn_sort__hash(prop_hash, svn_sort_compare_items_lexically,
> + pool);
> + for (i = 0; i < sorted_props->nelts; i++)
> {
> - const char *pname = svn__apr_hash_index_key(hi);
> - svn_string_t *propval = svn__apr_hash_index_val(hi);
> + svn_sort__item_t item = APR_ARRAY_IDX(sorted_props, i, svn_sort__item_t);
> + const char *pname = item.key;
> + svn_string_t *propval = item.value;
>
> if (names_only)
> {
>
>
--
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com/
Received on 2012-05-21 17:06:22 CEST