Class: Gitlab::Git::Commit
- Inherits:
-
Object
- Object
- Gitlab::Git::Commit
- Defined in:
- lib/gitlab_git/commit.rb
Constant Summary collapse
- SERIALIZE_KEYS =
[ :id, :message, :parent_ids, :authored_date, :author_name, :author_email, :committed_date, :committer_name, :committer_email ]
Instance Attribute Summary collapse
-
#head ⇒ Object
Returns the value of attribute head.
-
#raw_commit ⇒ Object
Returns the value of attribute raw_commit.
-
#refs(repo) ⇒ Object
Get refs collection(Grit::Head or Grit::Remote or Grit::Tag).
Class Method Summary collapse
-
.between(repo, base, head) ⇒ Object
Get commits between two refs.
- .decorate(commit, ref = nil) ⇒ Object
-
.find(repo, commit_id = nil) ⇒ Object
Get single commit.
-
.find_all(repo, options = {}) ⇒ Object
Delegate Repository#find_commits.
-
.last(repo) ⇒ Object
Get last commit for HEAD.
-
.last_for_path(repo, ref, path = nil) ⇒ Object
Get last commit for specified path and ref.
-
.where(options) ⇒ Object
Get commits collection.
Instance Method Summary collapse
- #created_at ⇒ Object
- #date ⇒ Object
-
#different_committer? ⇒ Boolean
Was this commit committed by a different person than the original author?.
- #diffs ⇒ Object
- #has_zero_stats? ⇒ Boolean
-
#initialize(raw_commit, head = nil) ⇒ Commit
constructor
A new instance of Commit.
- #no_commit_message ⇒ Object
- #parent_id ⇒ Object
- #parents ⇒ Object
-
#ref_names(repo) ⇒ Object
Get ref names collection.
- #safe_message ⇒ Object
- #sha ⇒ Object
- #short_id(length = 10) ⇒ Object
- #stats ⇒ Object
-
#to_diff ⇒ Object
Shows the diff between the commit’s parent and the commit.
- #to_hash ⇒ Object
- #to_patch ⇒ Object
- #tree ⇒ Object
Constructor Details
#initialize(raw_commit, head = nil) ⇒ Commit
Returns a new instance of Commit.
93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/gitlab_git/commit.rb', line 93 def initialize(raw_commit, head = nil) raise "Nil as raw commit passed" unless raw_commit if raw_commit.is_a?(Hash) init_from_hash(raw_commit) else init_from_grit(raw_commit) end @head = head end |
Instance Attribute Details
#head ⇒ Object
Returns the value of attribute head.
7 8 9 |
# File 'lib/gitlab_git/commit.rb', line 7 def head @head end |
#raw_commit ⇒ Object
Returns the value of attribute raw_commit.
7 8 9 |
# File 'lib/gitlab_git/commit.rb', line 7 def raw_commit @raw_commit end |
#refs(repo) ⇒ Object
Get refs collection(Grit::Head or Grit::Remote or Grit::Tag)
Ex.
commit.ref(repo)
192 193 194 |
# File 'lib/gitlab_git/commit.rb', line 192 def refs @refs end |
Class Method Details
.between(repo, base, head) ⇒ Object
77 78 79 80 81 |
# File 'lib/gitlab_git/commit.rb', line 77 def between(repo, base, head) repo.commits_between(base, head).map do |commit| decorate(commit) end end |
.decorate(commit, ref = nil) ⇒ Object
88 89 90 |
# File 'lib/gitlab_git/commit.rb', line 88 def decorate(commit, ref = nil) Gitlab::Git::Commit.new(commit, ref) end |
.find(repo, commit_id = nil) ⇒ Object
42 43 44 45 |
# File 'lib/gitlab_git/commit.rb', line 42 def find(repo, commit_id = nil) commit = repo.log(ref: commit_id, limit: 1).first decorate(commit) if commit end |
.find_all(repo, options = {}) ⇒ Object
Delegate Repository#find_commits
84 85 86 |
# File 'lib/gitlab_git/commit.rb', line 84 def find_all(repo, = {}) repo.find_commits() end |
.last(repo) ⇒ Object
52 53 54 |
# File 'lib/gitlab_git/commit.rb', line 52 def last(repo) find(repo, nil) end |
.last_for_path(repo, ref, path = nil) ⇒ Object
63 64 65 66 67 68 69 70 |
# File 'lib/gitlab_git/commit.rb', line 63 def last_for_path(repo, ref, path = nil) where( repo: repo, ref: ref, path: path, limit: 1 ).first end |
.where(options) ⇒ Object
Get commits collection
Ex.
Commit.where(
repo: repo,
ref: 'master',
path: 'app/models',
limit: 10,
offset: 5,
)
28 29 30 31 32 33 |
# File 'lib/gitlab_git/commit.rb', line 28 def where() repo = .delete(:repo) raise 'Gitlab::Git::Repository is required' unless repo.respond_to?(:log) repo.log().map { |c| decorate(c) } end |
Instance Method Details
#created_at ⇒ Object
117 118 119 |
# File 'lib/gitlab_git/commit.rb', line 117 def created_at committed_date end |
#date ⇒ Object
163 164 165 |
# File 'lib/gitlab_git/commit.rb', line 163 def date committed_date end |
#different_committer? ⇒ Boolean
Was this commit committed by a different person than the original author?
122 123 124 |
# File 'lib/gitlab_git/commit.rb', line 122 def different_committer? != committer_name || != committer_email end |
#diffs ⇒ Object
167 168 169 |
# File 'lib/gitlab_git/commit.rb', line 167 def diffs raw_commit.diffs.map { |diff| Gitlab::Git::Diff.new(diff) } end |
#has_zero_stats? ⇒ Boolean
147 148 149 150 151 |
# File 'lib/gitlab_git/commit.rb', line 147 def has_zero_stats? stats.total.zero? rescue true end |
#no_commit_message ⇒ Object
153 154 155 |
# File 'lib/gitlab_git/commit.rb', line 153 def "--no commit message" end |
#parent_id ⇒ Object
126 127 128 |
# File 'lib/gitlab_git/commit.rb', line 126 def parent_id parent_ids.first end |
#parents ⇒ Object
171 172 173 |
# File 'lib/gitlab_git/commit.rb', line 171 def parents raw_commit.parents end |
#ref_names(repo) ⇒ Object
Get ref names collection
Ex.
commit.ref_names(repo)
201 202 203 |
# File 'lib/gitlab_git/commit.rb', line 201 def ref_names(repo) refs(repo).map(&:name) end |
#safe_message ⇒ Object
113 114 115 |
# File 'lib/gitlab_git/commit.rb', line 113 def @safe_message ||= end |
#sha ⇒ Object
105 106 107 |
# File 'lib/gitlab_git/commit.rb', line 105 def sha id end |
#short_id(length = 10) ⇒ Object
109 110 111 |
# File 'lib/gitlab_git/commit.rb', line 109 def short_id(length = 10) id.to_s[0..length] end |
#stats ⇒ Object
179 180 181 |
# File 'lib/gitlab_git/commit.rb', line 179 def stats raw_commit.stats end |
#to_diff ⇒ Object
Shows the diff between the commit’s parent and the commit.
Cuts out the header and stats from #to_patch and returns only the diff.
133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/gitlab_git/commit.rb', line 133 def to_diff # see Grit::Commit#show patch = to_patch # discard lines before the diff lines = patch.split("\n") while !lines.first.start_with?("diff --git") do lines.shift end lines.pop if lines.last =~ /^[\d.]+$/ # Git version lines.pop if lines.last == "-- " # end of diff lines.join("\n") end |
#to_hash ⇒ Object
157 158 159 160 161 |
# File 'lib/gitlab_git/commit.rb', line 157 def to_hash serialize_keys.map.with_object({}) do |key, hash| hash[key] = send(key) end end |
#to_patch ⇒ Object
183 184 185 |
# File 'lib/gitlab_git/commit.rb', line 183 def to_patch raw_commit.to_patch end |
#tree ⇒ Object
175 176 177 |
# File 'lib/gitlab_git/commit.rb', line 175 def tree raw_commit.tree end |