Getting blobs with Grit

229 Views Asked by At

I'm using Grit in my rails app and I'm creating a commit which i know works:

        repo = Repo.new(full_path, {:is_bare => true})
        fname = "snippet"
        File.open("#{full_path}/#{fname}", 'w') {|f| f.puts(data)}
        Dir.chdir("#{full_path}") {repo.add(fname)}
        if repo.commit_index('his amazing commit')
            logger.info "commit succeeded"
        else
            logger.info "commit failed"
        end

then, im trying to get the blobs which is showing up empty:

            tree = Tree.construct(repo, 'master')
            data = tree.blobs.map {|b| repo.blob(b.id).data}
            logger.info "data.first = #{data.first}"
            data.first

What am I doing wrong here?

1

There are 1 best solutions below

1
miaout17 On

I guess you have no file in the root level in your repository.

tree.blobs returns files of the root level, and tree.trees returns directories. To get all files in the repository, you need to traverse the tree recursively.

I wrote some example:

require 'grit'

def traverse(tree, basename)
  tree.blobs.each do |blob|
    puts "#{basename}/#{blob.basename}"
  end
  tree.trees.each do |subtree|
    traverse(subtree, "#{basename}/#{subtree.basename}")
  end
end

repo = Grit::Repo.new('.')
root = Grit::Tree.construct(repo, 'master')
traverse(root, '')