Sha256: d06adc48e388e59e97c1ed59f628998c6a543eeebdd8a78eb7b3d5e14c9f2bad

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

module GitObjectBrowser

  module Models

    # Parse .git/index file
    class Index < Bindata

      attr_reader :version, :entry_count, :entries, :extensions, :sha1

      def initialize(input)
        super(input)
      end

      def parse
        dirc = raw(4)
        if dirc != "DIRC"
          throw Exception.new("Illegal format.")
        end

        @version     = int
        @entry_count = int
        @entries     = parse_entries
        @extensions  = parse_extensions
        @sha1        = hex(20)

        self
      end

      def parse_entries
        entries = []
        @entry_count.times do |i|
          entries << IndexEntry.new(@in, @version)
        end
        return entries
      end

      def parse_extensions
        extensions = []
        while signature = peek(4)
          if signature == "TREE"
            extensions << IndexTreeExtension.new(@in).parse
          elsif  signature == "REUC"
            extensions << IndexReucExtension.new(@in).parse
          else
            break
          end
        end
        return extensions
      end

      def to_hash
        entries = []
        @entries.each do |entry|
          entries << entry.to_hash
        end

        extensions = []
        @extensions.each do |extension|
          extensions << extension.to_hash
        end

        return {
          :version       => @version,
          :entry_count   => @entry_count,
          :entries       => entries,
          :extensions    => extensions,
          :sha1          => @sha1,
        }
      end

      def self.path?(relpath)
        relpath == "index"
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
git-object-browser-0.0.3 lib/git-object-browser/models/index.rb