class Bringit::Tree

Attributes

commit_id[RW]
id[RW]
mode[RW]
name[RW]
path[RW]
root_id[RW]
submodule_url[RW]
type[RW]

Public Class Methods

find_id_by_path(repository, root_id, path) click to toggle source

Recursive search of tree id for path

Ex.

blog/            # oid: 1a
  app/           # oid: 2a
    models/      # oid: 3a
    views/       # oid: 4a

Tree.find_id_by_path(repo, '1a', 'app/models') # => '3a'

# File lib/bringit/tree.rb, line 54
def find_id_by_path(repository, root_id, path)
  root_tree = repository.lookup(root_id)
  path = path.sub(%r{\A/*}, '')
  path_arr = path.split('/')

  entry = root_tree.find do |entry|
    entry[:name] == path_arr[0] && entry[:type] == :tree
  end

  return nil unless entry

  if path_arr.size > 1
    path_arr.shift
    find_id_by_path(repository, entry[:oid], path_arr.join('/'))
  else
    entry[:oid]
  end
end
new(options) click to toggle source
# File lib/bringit/tree.rb, line 74
def initialize(options)
  %w(id root_id name path type mode commit_id).each do |key|
    self.send("#{key}=", options[key.to_sym])
  end
end
where(repository, sha, path = nil) click to toggle source

Get list of tree objects for repository based on commit sha and path Uses rugged for raw objects

# File lib/bringit/tree.rb, line 12
def where(repository, sha, path = nil)
  path = path&.sub(%r{\A/*}, '')
  path = nil if path == '' || path == '/'

  commit = repository.lookup(sha)
  root_tree = commit.tree

  tree = if path
            id = find_id_by_path(repository, root_tree.oid, path)
            if id
              repository.lookup(id)
            else
              []
            end
          else
            root_tree
          end

  tree.map do |entry|
    new(
      id: entry[:oid],
      root_id: root_tree.oid,
      name: entry[:name],
      type: entry[:type],
      mode: entry[:filemode],
      path: path ? File.join(path, entry[:name]) : entry[:name],
      commit_id: sha,
    )
  end
end

Public Instance Methods

contributing?() click to toggle source
# File lib/bringit/tree.rb, line 100
def contributing?
  name =~ /^contributing/i
end
dir?() click to toggle source
# File lib/bringit/tree.rb, line 84
def dir?
  type == :tree
end
file?() click to toggle source
# File lib/bringit/tree.rb, line 88
def file?
  type == :blob
end
readme?() click to toggle source
# File lib/bringit/tree.rb, line 96
def readme?
  name =~ /^readme/i
end
submodule?() click to toggle source
# File lib/bringit/tree.rb, line 92
def submodule?
  type == :commit
end