Sha256: 1fa5d6b09902c10a46fafea18312a319da45275699602a1fab836558afb1b476

Contents?: true

Size: 1.6 KB

Versions: 20

Compression:

Stored size: 1.6 KB

Contents

require 'nokogiri'
require 'rim/manifest/model'

module RIM
module Manifest

# Reader for the original Google Repo manifest
class RepoReader

def read(file)
  manifest = Manifest.new
  File.open(file) do |f|
    doc = Nokogiri::XML::Document.parse(f)
    remote_by_name = {}
    defaults = nil
    doc.xpath("/manifest/default").each do |d|
      raise "duplicate default setting" if defaults
      defaults = {
        :revision => d.attr("revision"),
        :remote => d.attr("remote")
      }
    end
    doc.xpath("/manifest/remote").each do |r|
      name = r.attr("name")
      raise "remote without a name" unless name
      rem = Remote.new(
        :fetch_url => r.attr("fetch"),
        :review_url => r.attr("review")
        )
      raise "conflicting remote name #{name}" if remote_by_name[name]
      remote_by_name[name] = rem
    end
    doc.xpath("/manifest/project").each do |p|
      remote = p.attr("remote")
      remote ||= defaults[:remote]
      if remote
        raise "remote #{remote} not found" unless remote_by_name[remote]
      else
        raise "no remote specified and no default remote either"
      end
      revision = p.attr("revision")
      revision ||= defaults[:revision]
      if !revision
        raise "no revision specified and no default revision either"
      end
      mod = Module.new(
        :remote_path => p.attr("name"),
        :local_path => p.attr("path"),
        :revision => revision,
        :remote => remote_by_name[remote]
        )
      manifest.add_module(mod)
    end
  end
  manifest
end

end

end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
esr-rim-1.4.8 lib/rim/manifest/repo_reader.rb
esr-rim-1.4.7 lib/rim/manifest/repo_reader.rb
esr-rim-1.4.4 lib/rim/manifest/repo_reader.rb
esr-rim-1.4.3 lib/rim/manifest/repo_reader.rb
esr-rim-1.4.2 lib/rim/manifest/repo_reader.rb
esr-rim-1.4.0 lib/rim/manifest/repo_reader.rb
esr-rim-1.3.9 lib/rim/manifest/repo_reader.rb
esr-rim-1.3.8 lib/rim/manifest/repo_reader.rb
esr-rim-1.3.7 lib/rim/manifest/repo_reader.rb
esr-rim-1.3.6 lib/rim/manifest/repo_reader.rb
esr-rim-1.3.5 lib/rim/manifest/repo_reader.rb
esr-rim-1.3.4 lib/rim/manifest/repo_reader.rb
esr-rim-1.3.3 lib/rim/manifest/repo_reader.rb
esr-rim-1.3.2 lib/rim/manifest/repo_reader.rb
esr-rim-1.3.1 lib/rim/manifest/repo_reader.rb
esr-rim-1.3.0 lib/rim/manifest/repo_reader.rb
esr-rim-1.2.2 lib/rim/manifest/repo_reader.rb
esr-rim-1.2.1 lib/rim/manifest/repo_reader.rb
esr-rim-1.2.0 lib/rim/manifest/repo_reader.rb
esr-rim-1.1.5 lib/rim/manifest/repo_reader.rb