Paul Burba wrote:
>> -----Original Message-----
>> From: Paul Burba [mailto:pburba@collab.net] 
>> Sent: Monday, June 25, 2007 9:26 AM
>> To: Lieven Govaerts; Mark Phippard
>> Cc: dev@subversion.tigris.org; hwright@tigris.org; Daniel Rall
>> Subject: Re: svn commit: r25510 - trunk/subversion/tests/cmdline
> 
> <snip>
> 
>> Log.c:do_merged_log() - Local variable "svn_boolean_t 
>> changed" is not initialized before being passed by reference 
>> to check_history().  Great, except that check_history doesn't 
>> always modify that arg:
>>
>> /* Set INFO->HIST to the next history for the path *if* there 
>> is history
>>  * available and INFO->HISTORY_REV is equal to or greater 
>> than CURRENT.
>>  *
>>  * *CHANGED is set to TRUE if the path has history in the 
>> CURRENT revision,
>>>>>> * otherwise it is not touched. <<<<
>>  *
>>  * If we do need to get the next history revision for the path, call
>>  * get_history to do it -- see it for details.
>>  */
> 
> Hyrum,
> 
> Just thinking out loud, but is it really wise to have functions like
> check_history() that take a predicate argument but only sometimes
> modifies it?  Doesn't seem we do that anywhere else that I can recall
> (though I haven't made an exhaustive search).
I'm not sure.  check_history() has been largely unchanged since its
introduction in r14722, so it seems that we've been doing this for quite
some time.
check_history() is used to determine if any of a group of paths has been
changed in a given revision, and is called in a loop over the paths.
The reason that check_history() doesn't modify changed if the answer is
FALSE is so that previous values of TRUE don't get overwritten.  In
effect, this implements a logical OR.
If updating the function, and introducing local variables in the path
loops seems like a more readable solution, feel free to do so.
-Hyrum
Received on Mon Jun 25 16:27:35 2007