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 49 49: def initialize(url, path=nil) 50: super(/^------------------------------------------------------------------------/) 51: @url = url 52: @path = path 53: end
# File lib/rscm/scm/subversion_log_parser.rb, line 55 55: def parse(io, skip_line_parsing=false, &line_proc) 56: # We have to trim off the last newline - it's not meant to be part of the message 57: revision = super 58: revision.message = revision.message[0..-2] if revision 59: revision 60: end
# File lib/rscm/scm/subversion_log_parser.rb, line 62 62: def relative_path(url, path_from_root) 63: path_from_root = path_from_root.chomp 64: url_tokens = url.split('/') 65: path_from_root_tokens = path_from_root.split('/') 66: 67: max_similar = path_from_root_tokens.length 68: while(max_similar > 0) 69: url = url_tokens[-max_similar..-1] 70: path = path_from_root_tokens[0..max_similar-1] 71: if(url == path) 72: break 73: end 74: max_similar -= 1 75: end 76: 77: if(max_similar == 0) 78: if(@path.nil? || @path == "") 79: path_from_root 80: else 81: nil 82: end 83: else 84: path_from_root_tokens[max_similar..-1].join("/") 85: end 86: end
# File lib/rscm/scm/subversion_log_parser.rb, line 117 117: def next_result 118: result = @revision 119: @revision = nil 120: result 121: end
# File lib/rscm/scm/subversion_log_parser.rb, line 90 90: def parse_line(line) 91: if(@revision.nil?) 92: parse_header(line) 93: elsif(line.strip == "") 94: @parse_state = :parse_message 95: elsif(line =~ /Changed paths/) 96: @parse_state = :parse_files 97: elsif(@parse_state == :parse_files) 98: file = parse_file(line) 99: if(file && file.path) 100: previously_added_file = @revision[-1] 101: if(previously_added_file) 102: # remove previous revision_file if it's a dir 103: previous_tokens = previously_added_file.path.split("/") 104: current_tokens = file.path.split("/") 105: current_tokens.pop 106: if(previous_tokens == current_tokens) 107: @revision.pop 108: end 109: end 110: @revision.add file 111: end 112: elsif(@parse_state == :parse_message) 113: @revision.message << line.chomp << "\n" 114: end 115: end