Class: Subversion::DiffsParser

Inherits:
Object
  • Object
show all
Defined in:
lib/svn-command/subversion.rb

Defined Under Namespace

Classes: ParseError

Instance Method Summary collapse

Instance Method Details

#parseObject



552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
# File 'lib/svn-command/subversion.rb', line 552

def parse
  diffs = Diffs.new
  current_diff = nil
  @raw_diffs.each_line do |line|
    if line =~ /^Index: (.*)$/
      current_diff = Diff.new($1)
      diffs[current_diff.filename] = current_diff #unless current_diff.nil?
      @state = :immediately_after_filename
      next
    end

    if current_diff.nil?
      raise ParseError.new("The raw diff input didn't begin with 'Index:'!")
    end

    if @state == :immediately_after_filename
      if line =~ /^===================================================================$/ ||
         line =~ /^---.*\(revision \d+\)$/ ||
         line =~ /^\+\+\+.*\(revision \d+\)$/ ||
         line =~ /^@@ .* @@$/
        # Skip
        next
      else
        @state= :inside_the_actual_diff
      end
    end

    if @state == :inside_the_actual_diff
      current_diff.diff << line
    else
      raise ParseError.new("Expected to be in :inside_the_actual_diff state, but was not.")
    end
  end
  diffs.freeze
  diffs
end