Class | Grit::Tree |
In: |
lib/grit/tree.rb
|
Parent: | Object |
id | [R] | |
mode | [R] | |
name | [R] |
Construct the contents of the tree
+repo+ is the Repo +treeish+ is the reference +paths+ is an optional Array of directory paths to restrict the tree
Returns Grit::Tree (baked)
# File lib/grit/tree.rb, line 15 def self.construct(repo, treeish, paths = []) output = repo.git.ls_tree({}, treeish, *paths) self.allocate.construct_initialize(repo, treeish, output) end
Create an unbaked Tree containing just the specified attributes
+repo+ is the Repo +atts+ is a Hash of instance variable data
Returns Grit::Tree (unbaked)
# File lib/grit/tree.rb, line 42 def self.create(repo, atts) self.allocate.create_initialize(repo, atts) end
Find the named object in this tree‘s contents
Examples
Repo.new('/path/to/grit').tree/'lib' # => #<Grit::Tree "6cc23ee138be09ff8c28b07162720018b244e95e"> Repo.new('/path/to/grit').tree/'README.txt' # => #<Grit::Blob "8b1e02c0fb554eed2ce2ef737a68bb369d7527df">
Returns Grit::Blob or Grit::Tree or nil if not found
# File lib/grit/tree.rb, line 90 def /(file) if file =~ /\// file.split("/").inject(self) { |acc, x| acc/x } rescue nil else self.contents.find { |c| c.name == file } end end
# File lib/grit/tree.rb, line 20 def construct_initialize(repo, id, text) @repo = repo @id = id @contents = [] text.split("\n").each do |line| @contents << content_from_string(repo, line) end @contents.compact! self end
Parse a content item and create the appropriate object
+repo+ is the Repo +text+ is the single line containing the items data in `git ls-tree` format
Returns Grit::Blob or Grit::Tree
# File lib/grit/tree.rb, line 65 def content_from_string(repo, text) mode, type, id, name = text.split(" ", 4) case type when "tree" Tree.create(repo, :id => id, :mode => mode, :name => name) when "blob" Blob.create(repo, :id => id, :mode => mode, :name => name) when "link" Blob.create(repo, :id => id, :mode => mode, :name => name) when "commit" Submodule.create(repo, :id => id, :mode => mode, :name => name) else raise "Invalid type: #{type}" end end
Initializer for Tree.create
+repo+ is the Repo +atts+ is a Hash of instance variable data
Returns Grit::Tree (unbaked)
# File lib/grit/tree.rb, line 51 def create_initialize(repo, atts) @repo = repo atts.each do |k, v| instance_variable_set("@#{k}", v) end self end
Pretty object inspection
# File lib/grit/tree.rb, line 103 def inspect %Q{#<Grit::Tree "#{@id}">} end