net.sf.statsvn.input

## Class SvnLogfileParser

- java.lang.Object
- - 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.

Version:
  $Id: SvnLogfileParser.java 368 2008-06-25 21:23:46Z benoitx $
Author:
  Jason Kealey <jkealey@shade.ca>, Gunter Mussbacher <gunterm@site.uottawa.ca>

### Nested Class Summary

Nested Classes
`protected class` `SvnLogfileParser.DiffTask`
`protected class` `SvnLogfileParser.PerRevDiffTask`

### Constructor Summary

Constructors
Constructor and Description
`SvnLogfileParser(RepositoryFileManager repositoryFileManager, java.io.InputStream logFile, SvnLogBuilder builder)` Default Constructor

### Method Summary

Methods
`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.

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

#### 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.

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