Parent

Files

RSCM::SubversionLogEntryParser

Constants

STATES

Public Class Methods

new(url, path=nil) click to toggle source
# File lib/rscm/scm/subversion_log_parser.rb, line 49
def initialize(url, path=nil)
  super(/^------------------------------------------------------------------------/)
  @url = url
  @path = path
end

Public Instance Methods

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

  revision = super
  revision.message = revision.message[0..-2] if revision
  revision
end
relative_path(url, path_from_root) click to toggle source
# File lib/rscm/scm/subversion_log_parser.rb, line 62
def relative_path(url, path_from_root)
  path_from_root = path_from_root.chomp
  url_tokens = url.split('/')
  path_from_root_tokens = path_from_root.split('/')
  
  max_similar = path_from_root_tokens.length
  while(max_similar > 0)
    url = url_tokens[-max_similar..-1]
    path = path_from_root_tokens[0..max_similar-1]
    if(url == path)
      break
    end
    max_similar -= 1
  end

  if(max_similar == 0) 
    if(@path.nil? || @path == "")
      path_from_root
    else
      nil
    end
  else
    path_from_root_tokens[max_similar..-1].join("/")
  end
end

Protected Instance Methods

next_result() click to toggle source
# File lib/rscm/scm/subversion_log_parser.rb, line 117
def next_result
  result = @revision
  @revision = nil
  result
end
parse_line(line) click to toggle source
# File lib/rscm/scm/subversion_log_parser.rb, line 90
def parse_line(line)
  if(@revision.nil?)
    parse_header(line)
  elsif(line.strip == "")
    @parse_state = :parse_message
  elsif(line =~ /Changed paths/)
    @parse_state = :parse_files
  elsif(@parse_state == :parse_files)
    file = parse_file(line)
    if(file && file.path)
      previously_added_file = @revision[-1]
      if(previously_added_file)
        # remove previous revision_file if it's a dir

        previous_tokens = previously_added_file.path.split("/")
        current_tokens = file.path.split("/")
        current_tokens.pop
        if(previous_tokens == current_tokens)
          @revision.pop
        end
      end
      @revision.add file
    end
  elsif(@parse_state == :parse_message)
    @revision.message << line.chomp << "\n"
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.