Just a quick note that log_tests.py 27 fails when I set MAX_OPEN_HISTORIES=0
(without applying the patch).

Kevin Radke wrote on Fri, Jan 28, 2011 at 07:45:40 -0600:
> On 1/28/2011 12:59 AM, Daniel Shahaf wrote:
>> Is this a fix or a work-around?  i.e., if you set MAX_OPEN_HISTORIES to,
>> say, 2, can you then reproduce the failure you saw before?
>>
>> It's just not clear to me whether MAX_OPEN_HISTORIES is in fact an
>> assumption that "no file will be 'svn mv'd more than 32 times" or
>> similar.
>
> Previous to r1028108, the check for error status was outside the whole  
> get_path_histories function.  I simply added it back in to the other  
> place in this function that can return errors.  It does appear to be  
> trying to open the wrong file name after MAX_OPEN_HISTORIES has been  
> reached.  So you are correct, this is more of a "restore to previous  
> behavior" patch instead of a true "fix"...  However, previously log -g  
> completed successfully, and currently it aborts the connection with a  
> chuck size error.  I verified the same data is now returned as old  
> 1.6.13 versions but did not validate the data was not missing any merge  
> information or if my test case merge information is corrupted somehow.
> (I do know the merge info has not been hand modified.)
>
> I did not try reducing MAX_OPEN_HISTORIES to make this easier to  
> reproduce, since I already had a complex, but always failing test case.
> Doing so may make it easier for someone more familiar to this code to  
> figure out more details if needed.
>
> Kevin R.
>
>> Kevin Radke wrote on Wed, Jan 26, 2011 at 16:59:54 -0600:
>>> This also needs a back-port to the 1.6.x branch.
>>>
>>> [[[
>>>     Fix issue #3789: Correctly ignore missing locations when a renamed file
>>>     has more than MAX_OPEN_HISTORIES.
>>>
>>>     * subversion/libsvn_repos/log.c
>>>       (get_path_histories): Ignore more bogus repository locations to 
>>> restore
>>>                             pre-1.6.15 log -g behavior.  This fixes client 
>>> chunk
>>>                             errors introduced by r1028108.
>>>     ]]]
>>>
>>>
>>> Index: subversion/libsvn_repos/log.c
>>> ===================================================================
>>> --- subversion/libsvn_repos/log.c       (revision 1063904)
>>> +++ subversion/libsvn_repos/log.c       (working copy)
>>> @@ -1052,6 +1052,7 @@
>>>   {
>>>     svn_fs_root_t *root;
>>>     apr_pool_t *iterpool;
>>> +  svn_error_t *err;
>>>     int i;
>>>
>>>     /* Create a history object for each path so we can walk through
>>> @@ -1093,7 +1094,6 @@
>>>
>>>         if (i<  MAX_OPEN_HISTORIES)
>>>           {
>>> -          svn_error_t *err;
>>>             err = svn_fs_node_history(&info->hist, root, this_path, pool);
>>>             if (err
>>>                 &&  ignore_missing_locations
>>> @@ -1115,10 +1115,20 @@
>>>             info->newpool = NULL;
>>>           }
>>>
>>> -      SVN_ERR(get_history(info, fs,
>>> -                          strict_node_history,
>>> -                          authz_read_func, authz_read_baton,
>>> -                          hist_start, pool));
>>> +      err = get_history(info, fs,
>>> +                        strict_node_history,
>>> +                        authz_read_func, authz_read_baton,
>>> +                        hist_start, pool);
>>> +      if (err
>>> +&&  ignore_missing_locations
>>> +&&  (err->apr_err == SVN_ERR_FS_NOT_FOUND ||
>>> +              err->apr_err == SVN_ERR_FS_NOT_DIRECTORY ||
>>> +              err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION))
>>> +        {
>>> +          svn_error_clear(err);
>>> +          continue;
>>> +        }
>>> +      SVN_ERR(err);
>>>         APR_ARRAY_PUSH(*histories, struct path_info *) = info;
>>>       }
>>>     svn_pool_destroy(iterpool);
>

Reply via email to