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 , Gunter Mussbacher

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `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
    Modifier and Type | Method and Description
    --- | ---
    `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.