You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by "C. Michael Pilato" <cm...@collab.net> on 2011/04/19 14:12:48 UTC

Re: svn commit: r1094692 - /subversion/trunk/subversion/libsvn_repos/rev_hunt.c

On 04/18/2011 02:38 PM, philip@apache.org wrote:
> Author: philip
> Date: Mon Apr 18 18:38:58 2011
> New Revision: 1094692
> 
> URL: http://svn.apache.org/viewvc?rev=1094692&view=rev
> Log:
> Make "blame -g" more efficient on the server when svn:mergeinfo is
> large.
> 
> * subversion/libsvn_repos/rev_hunt.c
>   (get_merged_mergeinfo): Use the FS path_changed API to check
>    for property changes before doing expensive svn:mergeinfo
>    manipulations, don't treat newly created paths as a merge,
>    avoid allocating some empty hashes.
> 
> Modified:
>     subversion/trunk/subversion/libsvn_repos/rev_hunt.c
> 
> Modified: subversion/trunk/subversion/libsvn_repos/rev_hunt.c

[...]

> @@ -1045,6 +1046,30 @@ get_merged_mergeinfo(apr_hash_t **merged
>    apr_pool_t *subpool = svn_pool_create(pool);
>    apr_hash_t *curr_mergeinfo, *prev_mergeinfo, *deleted, *changed;
>    svn_error_t *err;
> +  svn_fs_root_t *root;
> +  apr_hash_t *changed_paths;
> +  const char *path = old_path_rev->path;
> +
> +  /* Getting/parsing/diffing svn:mergeinfo is expensive, so only do it
> +     if there is a property change. */
> +  SVN_ERR(svn_fs_revision_root(&root, repos->fs, old_path_rev->revnum,
> +                               subpool));
> +  SVN_ERR(svn_fs_paths_changed2(&changed_paths, root, subpool));
> +  while (1)
> +    {
> +      svn_fs_path_change2_t *changed_path = apr_hash_get(changed_paths,
> +                                                         path,
> +                                                         APR_HASH_KEY_STRING);
> +      if (changed_path && changed_path->prop_mod)
> +        break;
> +      if (svn_dirent_is_root(path, strlen(path)))

I'd need to get my bearings before reviewing the meat of this change, but
this use of the wrong path API caught my eye.  These aren't dirents.  They
are probably fspaths.


-- 
C. Michael Pilato <cm...@collab.net>
CollabNet   <>   www.collab.net   <>   Distributed Development On Demand

Re: svn commit: r1094692 - /subversion/trunk/subversion/libsvn_repos/rev_hunt.c

Posted by Philip Martin <ph...@wandisco.com>.
"C. Michael Pilato" <cm...@collab.net> writes:

>> +      if (changed_path && changed_path->prop_mod)
>> +        break;
>> +      if (svn_dirent_is_root(path, strlen(path)))
>
> I'd need to get my bearings before reviewing the meat of this change, but
> this use of the wrong path API caught my eye.  These aren't dirents.  They
> are probably fspaths.

Yes, I wrote this patch in 1.6 first.  It's fixed on trunk.

-- 
Philip