Class: Gitlab::Git::Blob
- Inherits:
-
Object
- Object
- Gitlab::Git::Blob
- Includes:
- EncodingHelper, Linguist::BlobHelper
- Defined in:
- lib/gitlab_git/blob.rb
Instance Attribute Summary collapse
-
#commit_id ⇒ Object
Returns the value of attribute commit_id.
-
#data ⇒ Object
Returns the value of attribute data.
-
#id ⇒ Object
Returns the value of attribute id.
-
#mode ⇒ Object
Returns the value of attribute mode.
-
#name ⇒ Object
Returns the value of attribute name.
-
#path ⇒ Object
Returns the value of attribute path.
-
#size ⇒ Object
Returns the value of attribute size.
Class Method Summary collapse
- .find(repository, sha, path) ⇒ Object
-
.find_entry_by_path(repository, root_id, path) ⇒ Object
Recursive search of blob id by path.
- .raw(repository, sha) ⇒ Object
Instance Method Summary collapse
- #empty? ⇒ Boolean
-
#initialize(options) ⇒ Blob
constructor
A new instance of Blob.
Methods included from EncodingHelper
Constructor Details
#initialize(options) ⇒ Blob
Returns a new instance of Blob.
79 80 81 82 83 |
# File 'lib/gitlab_git/blob.rb', line 79 def initialize() %w(id name path size data mode commit_id).each do |key| self.send("#{key}=", [key.to_sym]) end end |
Instance Attribute Details
#commit_id ⇒ Object
Returns the value of attribute commit_id.
7 8 9 |
# File 'lib/gitlab_git/blob.rb', line 7 def commit_id @commit_id end |
#data ⇒ Object
Returns the value of attribute data.
7 8 9 |
# File 'lib/gitlab_git/blob.rb', line 7 def data @data end |
#id ⇒ Object
Returns the value of attribute id.
7 8 9 |
# File 'lib/gitlab_git/blob.rb', line 7 def id @id end |
#mode ⇒ Object
Returns the value of attribute mode.
7 8 9 |
# File 'lib/gitlab_git/blob.rb', line 7 def mode @mode end |
#name ⇒ Object
Returns the value of attribute name.
7 8 9 |
# File 'lib/gitlab_git/blob.rb', line 7 def name @name end |
#path ⇒ Object
Returns the value of attribute path.
7 8 9 |
# File 'lib/gitlab_git/blob.rb', line 7 def path @path end |
#size ⇒ Object
Returns the value of attribute size.
7 8 9 |
# File 'lib/gitlab_git/blob.rb', line 7 def size @size end |
Class Method Details
.find(repository, sha, path) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/gitlab_git/blob.rb', line 10 def find(repository, sha, path) commit = repository.lookup(sha) root_tree = commit.tree blob_entry = find_entry_by_path(repository, root_tree.oid, path) return nil unless blob_entry blob = repository.lookup(blob_entry[:oid]) if blob Blob.new( id: blob.oid, name: blob_entry[:name], size: blob.size, data: blob.content, mode: blob_entry[:mode], path: path, commit_id: sha, ) end end |
.find_entry_by_path(repository, root_id, path) ⇒ Object
Recursive search of blob id by path
Ex.
blog/ # oid: 1a
app/ # oid: 2a
models/ # oid: 3a
file.rb # oid: 4a
Blob.find_entry_by_path(repo, ‘1a’, ‘app/file.rb’) # => ‘4a’
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/gitlab_git/blob.rb', line 54 def find_entry_by_path(repository, root_id, path) root_tree = repository.lookup(root_id) path_arr = path.split('/') entry = root_tree.find do |entry| entry[:name] == path_arr[0] end return nil unless entry if path_arr.size > 1 return nil unless entry[:type] == :tree else return nil unless entry[:type] == :blob end if path_arr.size > 1 path_arr.shift find_entry_by_path(repository, entry[:oid], path_arr.join('/')) else entry end end |
Instance Method Details
#empty? ⇒ Boolean
85 86 87 |
# File 'lib/gitlab_git/blob.rb', line 85 def empty? !data || data == '' end |