26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/semvergen/bump.rb', line 26
def run!(options)
if @shell.git_index_dirty? && !options[:ignore_dirty]
say color("Git index dirty. Commit changes before continuing", :red, :bold)
else
say color("Cut new Quattro Release", :white, :underline, :bold)
newline
release_type = choose do ||
. = "Select release type"
.default = "1"
.select_by = :index
.choices *RELEASE_TYPES
end
new_version = next_version(@version_file.version, release_type)
newline
say "Current version: #{color(@version_file.version, :bold)}"
say "Bumped version : #{color(new_version, :bold, :green)}"
newline
say "Enter change log features (or a blank line to finish):"
features = []
while true
response = ask "* " do |q|
q.validate = lambda { |answer| features.size > 0 || answer.length > 0 }
q.responses[:not_valid] = color("Enter at least one feature", :red)
q.responses[:invalid_type] = color("Enter at least one feature", :red)
q.responses[:ask_on_error] = "* "
end
if response.length == 0
features << "\n"
break
else
features << "* #{response}"
end
end
change_log_lines = ["# #{new_version}"] + features
change_log_message = change_log_lines.join("\n")
diff_change_log = change_log_lines.map { |l| color("+++ ", :white) + color(l, :green) }.join("\n")
newline
say color("Will add the following to CHANGELOG.md", :underline)
say color(diff_change_log)
commit_message = ask("Git commit subject line: ") do |q|
q.validate = /.{10,}/
q.responses[:not_valid] = color("Message must be more than 10 chars", :red)
q.responses[:invalid_type] = color("Message must be more than 10 chars", :red)
end
newline
say color("Summary of actions:", :underline, :green, :red)
newline
say "Bumping version: #{color(@version_file.version, :yellow)} -> #{color(new_version, :green)}"
newline
say "Adding features to CHANGELOG.md:"
say color(diff_change_log, :green)
say "Staging files for commit:"
say color("* lib/quattro/version.rb", :green)
say color("* CHANGELOG.md", :green)
newline
say "Committing with message: #{color(commit_message, :green)}"
newline
if agree("Proceed? ")
@version_file.version = new_version
@change_log_file << change_log_message
@shell.commit(@version_file.path, new_version, commit_message, features)
newline
say color("To release, use semvergen release", :bold, :green)
end
end
end
|