class Bundler::LockfileParser

def initialize(lockfile)

def initialize(lockfile)
  @platforms    = []
  @sources      = []
  @dependencies = {}
  @state        = nil
  @specs        = {}
  if lockfile.match?(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
    raise LockfileError, "Your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} contains merge conflicts.\n" \
      "Run `git checkout HEAD -- #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` first to get a clean lock."
  end
  lockfile.split(/(?:\r?\n)+/).each do |line|
    if SOURCE.include?(line)
      @state = :source
      parse_source(line)
    elsif line == DEPENDENCIES
      @state = :dependency
    elsif line == PLATFORMS
      @state = :platform
    elsif line == RUBY
      @state = :ruby
    elsif line == BUNDLED
      @state = :bundled_with
    elsif /^[^\s]/.match?(line)
      @state = nil
    elsif @state
      send("parse_#{@state}", line)
    end
  end
  @specs = @specs.values.sort_by(&:identifier)
rescue ArgumentError => e
  Bundler.ui.debug(e)
  raise LockfileError, "Your lockfile is unreadable. Run `rm #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` " \
    "and then `bundle install` to generate a new lockfile."
end