Sha256: 68dab6dd304fc2760801385692aa8c03e77a4152b6294b3e0e791efc562b237d

Contents?: true

Size: 1.51 KB

Versions: 3

Compression:

Stored size: 1.51 KB

Contents

module GitObjectBrowser

  class Dumper

    def initialize(target)
      @target = target
      @outdir = File.join(@target, "plain")
    end

    def dump
      Dir.mkdir(@outdir) unless File.exist?(@outdir)
      dump_index
      dump_objects
    end

    def dump_index
      index_file = File.join(@target, "index")
      out_file   = File.join(@outdir, "index")

      return unless File.exist?(index_file)

      STDERR << "Write: .git/plain/index\n"
      File.open(index_file) do |input|
        File.open(out_file, "w") do |output|
          dumper = GitObjectBrowser::IndexDumper.new(input, output)
          dumper.dump
        end
      end
    end

    def dump_objects
      obj_files = []
      Dir.chdir(@target) do
        Dir.glob("objects/**/*") do |path|
          obj_files << path if File.file?(path) && path =~ %r{/[a-z0-9]{38}$}
        end
      end
      return if obj_files.empty?

      obj_dir = File.join(@outdir, "objects")
      Dir.mkdir(obj_dir) unless File.exist?(obj_dir)

      obj_files.each do |path|
        outfile = File.join(@outdir, path)
        next if File.exist?(outfile)

        parent = File.dirname(outfile)
        Dir.mkdir(parent) unless File.exist?(parent)

        STDERR << "Write: .git/plain/#{path}\n"
        obj_file = File.join(@target, path)
        File.open(obj_file) do |input|
          File.open(outfile, "w") do |output|
            dumper = GitObjectBrowser::ObjectDumper.new(input, output)
            dumper.dump
          end
        end
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
git-object-browser-0.0.4 lib/git-object-browser/dumper.rb
git-object-browser-0.0.3 lib/git-object-browser/dumper.rb
git-object-browser-0.0.2 lib/git-object-browser/dumper.rb