Class: Git::ReleaseNotes

Inherits:
Object
  • Object
show all
Includes:
CLI, Commands
Defined in:
lib/git/release_notes.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Commands

#assert_is_git_repo, #get_branch, #get_tags, #is_git_repo?, #next_version, #valid_version_regexp

Methods included from CLI

#ask, #error, #stars, #warn, #wrap

Constructor Details

#initialize(options = {}) ⇒ ReleaseNotes

Returns a new instance of ReleaseNotes.



8
9
10
# File 'lib/git/release_notes.rb', line 8

def initialize(options = {})
  @options = options
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



7
8
9
# File 'lib/git/release_notes.rb', line 7

def options
  @options
end

Instance Method Details

#annotate!Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/git/release_notes.rb', line 12

def annotate!
  assert_is_git_repo
  tags = get_tags.reverse
  error "No version tags available." if tags.empty?
  
  if options[:all]
    start_index = 0
    end_index = tags.length - 1
  else
    start_tag = options[:from] || ask("Start at which tag?", tags[0], tags)
    start_index = tags.index(start_tag)   
    end_tag = options[:to] || ask("End at which tag?", tags[start_index + 1] || tags[start_index], tags)
    end_index = tags.index(end_tag) + 1 # include end tag
  end
  
  start_index.upto(end_index-1) do |i|
    start = tags[i]
    finish = tags[i+1]
    range = ''
    range << "refs/tags/#{finish}.." if finish # log until end tag if there is an end tag
    range << "refs/tags/#{start}"
    log = `git log --no-merges --pretty=format:"%h  %s" #{range}`.strip.split("\n")
    next if log.empty?
    puts "#{start}"
    puts "=" * start.length
    puts log
    puts
  end
end