Class RSCM::SubversionLogEntryParser
In: lib/rscm/scm/subversion_log_parser.rb
Parent: Parser

Methods

Constants

STATES = {"M" => RevisionFile::MODIFIED, "A" => RevisionFile::ADDED, "D" => RevisionFile::DELETED} unless defined? STATES

Public Class methods

[Source]

    # File lib/rscm/scm/subversion_log_parser.rb, line 28
28:     def initialize(url)
29:       super(/^------------------------------------------------------------------------/)
30:       @url = url
31:     end

Public Instance methods

[Source]

    # File lib/rscm/scm/subversion_log_parser.rb, line 33
33:     def parse(io, skip_line_parsing=false, &line_proc)
34:       # We have to trim off the last newline - it's not meant to be part of the message

35:       revision = super
36:       revision.message = revision.message[0..-2] if revision
37:       revision
38:     end

[Source]

    # File lib/rscm/scm/subversion_log_parser.rb, line 40
40:     def relative_path(url, repo_path)
41:       url_tokens = url.split('/')
42:       repo_path_tokens = repo_path.split('/')
43:       
44:       max_similar = repo_path_tokens.length
45:       while(max_similar > 0)
46:         url = url_tokens[-max_similar..-1]
47:         path = repo_path_tokens[0..max_similar-1]
48:         if(url == path)
49:           break
50:         end
51:         max_similar -= 1
52:       end
53:       if(max_similar == 0) 
54:         nil
55:       else
56:         repo_path_tokens[max_similar..-1].join("/")
57:       end
58:     end

Protected Instance methods

[Source]

    # File lib/rscm/scm/subversion_log_parser.rb, line 89
89:     def next_result
90:       result = @revision
91:       @revision = nil
92:       result
93:     end

[Source]

    # File lib/rscm/scm/subversion_log_parser.rb, line 62
62:     def parse_line(line)
63:       if(@revision.nil?)
64:         parse_header(line)
65:       elsif(line.strip == "")
66:         @parse_state = :parse_message
67:       elsif(line =~ /Changed paths/)
68:         @parse_state = :parse_files
69:       elsif(@parse_state == :parse_files)
70:         file = parse_file(line)
71:         if(file)
72:           previously_added_file = @revision[-1]
73:           if(previously_added_file)
74:             # remove previous revision_file it if it's a dir

75:             previous_tokens = previously_added_file.path.split("/")
76:             current_tokens = file.path.split("/")
77:             current_tokens.pop
78:             if(previous_tokens == current_tokens)
79:               @revision.pop
80:             end
81:           end
82:           @revision << file
83:         end
84:       elsif(@parse_state == :parse_message)
85:         @revision.message << line.chomp << "\n"
86:       end
87:     end

[Validate]