net.sf.statsvn.input
Class SvnLogfileParser

java.lang.Object
  extended by net.sf.statsvn.input.SvnLogfileParser

public class SvnLogfileParser
extends java.lang.Object

Parses a Subversion logfile and does post-parse processing. A Builder must be specified which does the construction work.

 

Nested Class Summary
protected  class SvnLogfileParser.DiffTask
           
protected  class SvnLogfileParser.PerRevDiffTask
           
 
Constructor Summary
SvnLogfileParser(RepositoryFileManager repositoryFileManager, java.io.InputStream logFile, SvnLogBuilder builder)
          Default Constructor
 
Method Summary
protected  void handleLineCounts(javax.xml.parsers.SAXParserFactory factory)
          Because the log file does not contain the lines added or removed in a commit, and because the logfile contains implicit actions (@link #verifyImplicitActions()), we must query the repository for line differences.
 void parse()
          Parses the logfile.
protected  javax.xml.parsers.SAXParserFactory parseSvnLog()
          Parses the svn log file.
protected  void removeDirectories()
          We have created FileBuilders for directories because we needed the information to be able to find implicit actions.
protected  void verifyImplicitActions()
          The svn log can contain deletions of directories which imply that all of its contents have been deleted.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SvnLogfileParser

public SvnLogfileParser(RepositoryFileManager repositoryFileManager,
                        java.io.InputStream logFile,
                        SvnLogBuilder builder)
Default Constructor

Parameters:
repositoryFileManager - the repository file manager
logFile - a Reader containing the SVN logfile
builder - the builder that will process the log information
Method Detail

handleLineCounts

protected void handleLineCounts(javax.xml.parsers.SAXParserFactory factory)
                         throws java.io.IOException
Because the log file does not contain the lines added or removed in a commit, and because the logfile contains implicit actions (@link #verifyImplicitActions()), we must query the repository for line differences. This method uses the (@link LineCountsBuilder) to load the persisted information and (@link SvnDiffUtils) to find new information.

Throws:
java.io.IOException
Parameters:
factory - the factory used to create SAX parsers.

parse

public void parse()
           throws net.sf.statcvs.input.LogSyntaxException,
                  java.io.IOException
Parses the logfile. After parse() has finished, the result of the parsing process can be obtained from the builder.

Throws:
net.sf.statcvs.input.LogSyntaxException - if syntax errors in log
java.io.IOException - if errors while reading from the log Reader

verifyImplicitActions

protected void verifyImplicitActions()
The svn log can contain deletions of directories which imply that all of its contents have been deleted. Furthermore, the svn log can contain entries which are copies from other directories (additions or replacements; I haven't seen modifications with this property, but am not 100% sure) meaning that all files from the other directory are copied here. We currently do not go back through copies, so we must infer what files could have been added during those copies.


removeDirectories

protected void removeDirectories()
We have created FileBuilders for directories because we needed the information to be able to find implicit actions. However, we don't want to query directories for their line counts later on. Therefore, we must remove them here. (@link SvnInfoUtils#isDirectory(String)) is used to know what files are directories. Deleted directories are assumed to have been added in (@link #verifyImplicitActions())


parseSvnLog

protected javax.xml.parsers.SAXParserFactory parseSvnLog()
                                                  throws java.io.IOException,
                                                         net.sf.statcvs.input.LogSyntaxException
Parses the svn log file.

Throws:
java.io.IOException - errors while reading file.
net.sf.statcvs.input.LogSyntaxException - invalid log syntax.
Returns:
the SaxParserFactory, so that it can be reused.