Получение капель с песком - PullRequest
1 голос
/ 07 марта 2012

Я использую Grit в своем приложении rails и создаю коммит, который, как я знаю, работает:

        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

, затем я пытаюсь получить пустые сгустки:

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

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 07 марта 2012

Я думаю, у вас нет файла на корневом уровне в вашем хранилище.

tree.blobs возвращает файлы корневого уровня, а tree.trees возвращает каталоги.Чтобы получить все файлы в хранилище, вам нужно рекурсивно пройти по дереву.

Я написал пример:

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, '')
...