You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@subversion.apache.org by Kevin Longfellow <kl...@yahoo.com> on 2010/03/10 20:49:27 UTC

svn log question

Hi,

I'm setting up monitoring hourly commits on several repositories and thought something like this would work:

#!/bin/sh
OneHourAgo=`date -d '1 hour ago' +'%F %T'`
DateNow=`date +'%F %T'`
em_result=`svn log -r "{${OneHourAgo}}:{${DateNow}}" file:///${SvnBase}/${1} | egrep "^r.*line|^r.*lines"$ | wc -l`

There likely is an easier or more accurate way to do this but the above will always report a value of 1 even when the HEAD revision does not fall within the specified date as shown below.

svn log -r "{2010-03-10 11:42:20}:{2010-03-10 12:42:20}" file:///misc_sourcectrl01/svnrepositories/svnrepos1
------------------------------------------------------------------------
r12138 | user | 2009-07-09 07:41:21 -0700 (Thu, 09 Jul 2009) | 1 line

add the source
------------------------------------------------------------------------

It's not a big deal but it does make unused repositories look like there is some activity.  Any ideas on a better way to do this or why the command always returns the HEAD revision?

Thanks for any help with this,

Kevin


      

Re: svn log question

Posted by Ryan Schmidt <su...@ryandesign.com>.
On Mar 10, 2010, at 14:49, Kevin Longfellow wrote:

> I'm setting up monitoring hourly commits on several repositories and thought something like this would work:
> 
> #!/bin/sh
> OneHourAgo=`date -d '1 hour ago' +'%F %T'`
> DateNow=`date +'%F %T'`
> em_result=`svn log -r "{${OneHourAgo}}:{${DateNow}}" file:///${SvnBase}/${1} | egrep "^r.*line|^r.*lines"$ | wc -l`
> 
> There likely is an easier or more accurate way to do this but the above will always report a value of 1 even when the HEAD revision does not fall within the specified date as shown below.
> 
> svn log -r "{2010-03-10 11:42:20}:{2010-03-10 12:42:20}" file:///misc_sourcectrl01/svnrepositories/svnrepos1
> ------------------------------------------------------------------------
> r12138 | user | 2009-07-09 07:41:21 -0700 (Thu, 09 Jul 2009) | 1 line
> 
> add the source
> ------------------------------------------------------------------------
> 
> It's not a big deal but it does make unused repositories look like there is some activity.  Any ideas on a better way to do this or why the command always returns the HEAD revision?


Subversion will always return one more result than you expect, so you can just discard it. See the box labeled "Is Subversion a Day Early?" on this page:

http://svnbook.red-bean.com/en/1.5/svn.tour.revs.specifiers.html#svn.tour.revs.dates


I'd recommend making this script analyze the log messages in the prior full hour period, not the hour preceding the time that you run the script, since even if you schedule it to run via cron, it might not run at exactly the same time every hour, especially if you're analyzing several repositories one after another.

StartDate=`date -d '1 hour ago' +'%F %H:00:00'`
EndDate=`date +'%F %H:00:00'`


You also will want to use the -q switch to svn log to save some bandwidth; since you're already using egrep to discard the log messages anyway you may as well not transfer them from the server. You wouldn't even need to use egrep then, really, since you could just take the number of lines of the quiet log output, subtract 3 (to remove the dividing line, the extra log message, and another dividing line), and divide by 2 (to remove the remaining dividing lines), to get the number of changes in this time period.

count_log_lines=`svn log -q -r "{${StartDate}}:{${EndDate}}" file:///${SvnBase}/${1} | wc -l`
em_result=$((($count_log_lines - 3) / 2))