Class: Gitlab::Git::Blob

Inherits:
Object
  • Object
show all
Includes:
EncodingHelper, Linguist::BlobHelper
Defined in:
lib/gitlab_git/blob.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from EncodingHelper

#encode!

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(options)
  %w(id name path size data mode commit_id).each do |key|
    self.send("#{key}=", options[key.to_sym])
  end
end

Instance Attribute Details

#commit_idObject

Returns the value of attribute commit_id.



7
8
9
# File 'lib/gitlab_git/blob.rb', line 7

def commit_id
  @commit_id
end

#dataObject

Returns the value of attribute data.



7
8
9
# File 'lib/gitlab_git/blob.rb', line 7

def data
  @data
end

#idObject

Returns the value of attribute id.



7
8
9
# File 'lib/gitlab_git/blob.rb', line 7

def id
  @id
end

#modeObject

Returns the value of attribute mode.



7
8
9
# File 'lib/gitlab_git/blob.rb', line 7

def mode
  @mode
end

#nameObject

Returns the value of attribute name.



7
8
9
# File 'lib/gitlab_git/blob.rb', line 7

def name
  @name
end

#pathObject

Returns the value of attribute path.



7
8
9
# File 'lib/gitlab_git/blob.rb', line 7

def path
  @path
end

#sizeObject

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

.raw(repository, sha) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/gitlab_git/blob.rb', line 33

def raw(repository, sha)
  blob = repository.lookup(sha)

  Blob.new(
    id: blob.oid,
    size: blob.size,
    data: blob.content,
  )
end

Instance Method Details

#empty?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/gitlab_git/blob.rb', line 85

def empty?
  !data || data == ''
end