class Envirobly::Git::Commit

def object_tree(ref: @ref, chdir: @working_dir)

def object_tree(ref: @ref, chdir: @working_dir)
  @object_tree ||= begin
    objects = {}
    objects[chdir] = []
    git(%(ls-tree -r #{ref}), chdir:).stdout.lines.each do |line|
      mode, type, object_hash, path = line.split(/\s+/)
      next if path.start_with?("#{Envirobly::Config::DIR}/")
      if type == "commit"
        objects.merge! object_tree(ref: object_hash, chdir: File.join(chdir, path))
      else
        objects[chdir] << [ mode, type, object_hash, path ]
      end
    end
    objects
  end
end