Получение капель с песком
Я использую 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 ответ
Я думаю, у вас нет файла на корневом уровне в вашем хранилище.
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, '')