Class | RSCM::SubversionLogEntryParser |
In: |
lib/rscm/scm/subversion_log_parser.rb
|
Parent: | Parser |
STATES | = | {"M" => RevisionFile::MODIFIED, "A" => RevisionFile::ADDED, "D" => RevisionFile::DELETED} unless defined? STATES |
# File lib/rscm/scm/subversion_log_parser.rb, line 28 28: def initialize(url) 29: super(/^------------------------------------------------------------------------/) 30: @url = url 31: end
# 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
# 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
# File lib/rscm/scm/subversion_log_parser.rb, line 89 89: def next_result 90: result = @revision 91: @revision = nil 92: result 93: end
# 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