Class: Git::Log

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/git/log.rb

Overview

Return the last n commits that match the specified criteria

Examples:

The last (default number) of commits

git = Git.open('.')
Git::Log.new(git) #=> Enumerable of the last 30 commits

The last n commits

Git::Log.new(git).max_commits(50) #=> Enumerable of last 50 commits

All commits returned by git log

Git::Log.new(git).max_count(:all) #=> Enumerable of all commits

All commits that match complex criteria

Git::Log.new(git)
  .max_count(:all)
  .object('README.md')
  .since('10 years ago')
  .between('v1.0.7', 'HEAD')

Instance Method Summary collapse

Constructor Details

#initialize(base, max_count = 30) ⇒ Log

Create a new Git::Log object

Examples:

git = Git.open('.')
Git::Log.new(git)

Parameters:

  • base (Git::Base)

    the git repository object

  • max_count (Integer, Symbol, nil) (defaults to: 30)

    the number of commits to return, or :all or nil to return all

    Passing max_count to #initialize is equivalent to calling #max_count on the object.



41
42
43
44
45
# File 'lib/git/log.rb', line 41

def initialize(base, max_count = 30)
  dirty_log
  @base = base
  max_count(max_count)
end

Instance Method Details

#[](index)



168
169
170
171
# File 'lib/git/log.rb', line 168

def [](index)
  check_log
  @commits[index] rescue nil
end

#allself

Adds the --all flag to the git log command

This asks for the logs of all refs (basically all commits reachable by HEAD, branches, and tags). This does not control the maximum number of commits returned. To control how many commits are returned, call #max_count.

Examples:

Return the last 50 commits reachable by all refs

git = Git.open('.')
Git::Log.new(git).max_count(50).all

Returns:

  • (self)


76
77
78
79
80
# File 'lib/git/log.rb', line 76

def all
  dirty_log
  @all = true
  self
end

#author(regex)



88
89
90
91
92
# File 'lib/git/log.rb', line 88

def author(regex)
  dirty_log
  @author = regex
  return self
end

#between(sha1, sha2 = nil)



124
125
126
127
128
# File 'lib/git/log.rb', line 124

def between(sha1, sha2 = nil)
  dirty_log
  @between = [sha1, sha2]
  return self
end

#cherry



130
131
132
133
134
# File 'lib/git/log.rb', line 130

def cherry
  dirty_log
  @cherry = true
  return self
end

#each(&block)



153
154
155
156
# File 'lib/git/log.rb', line 153

def each(&block)
  check_log
  @commits.each(&block)
end

#first



158
159
160
161
# File 'lib/git/log.rb', line 158

def first
  check_log
  @commits.first rescue nil
end

#grep(regex)



94
95
96
97
98
# File 'lib/git/log.rb', line 94

def grep(regex)
  dirty_log
  @grep = regex
  return self
end

#last



163
164
165
166
# File 'lib/git/log.rb', line 163

def last
  check_log
  @commits.last rescue nil
end

#max_count(num_or_all) ⇒ self

The maximum number of commits to return

Examples:

All commits returned by git log

git = Git.open('.')
Git::Log.new(git).max_count(:all)

Parameters:

  • num_or_all (Integer, Symbol, nil)

    the number of commits to return, or :all or nil to return all

Returns:

  • (self)


58
59
60
61
62
# File 'lib/git/log.rb', line 58

def max_count(num_or_all)
  dirty_log
  @max_count = (num_or_all == :all) ? nil : num_or_all
  self
end

#merges



136
137
138
139
140
# File 'lib/git/log.rb', line 136

def merges
  dirty_log
  @merges = true
  return self
end

#object(objectish)



82
83
84
85
86
# File 'lib/git/log.rb', line 82

def object(objectish)
  dirty_log
  @object = objectish
  return self
end

#path(path)



100
101
102
103
104
# File 'lib/git/log.rb', line 100

def path(path)
  dirty_log
  @path = path
  return self
end

#since(date)



112
113
114
115
116
# File 'lib/git/log.rb', line 112

def since(date)
  dirty_log
  @since = date
  return self
end

#size

forces git log to run



148
149
150
151
# File 'lib/git/log.rb', line 148

def size
  check_log
  @commits.size rescue nil
end

#skip(num)



106
107
108
109
110
# File 'lib/git/log.rb', line 106

def skip(num)
  dirty_log
  @skip = num
  return self
end

#to_s



142
143
144
# File 'lib/git/log.rb', line 142

def to_s
  self.map { |c| c.to_s }.join("\n")
end

#until(date)



118
119
120
121
122
# File 'lib/git/log.rb', line 118

def until(date)
  dirty_log
  @until = date
  return self
end