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)



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

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)



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

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

#first



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

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



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

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

#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



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

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



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

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