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



538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
# File 'lib/svn-command/subversion.rb', line 538

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