@@ -126,3 +126,117 @@ task :release do
126
126
puts '-' *80
127
127
end
128
128
end
129
+
130
+ desc <<-DESC
131
+ Update Rubygems versions in version.rb and *.gemspec files
132
+
133
+ Example:
134
+
135
+ $ rake update_version[5.0.0,5.0.1]
136
+ DESC
137
+ task :update_version , :old , :new do |task , args |
138
+ require 'ansi'
139
+
140
+ puts "[!!!] Required argument [old] missing" . ansi ( :red ) unless args [ :old ]
141
+ puts "[!!!] Required argument [new] missing" . ansi ( :red ) unless args [ :new ]
142
+
143
+ files = Dir [ '**/**/version.rb' , '**/**/*.gemspec' ]
144
+
145
+ longest_line = files . map { |f | f . size } . max
146
+
147
+ puts "\n " , "= FILES " . ansi ( :faint ) + ( '=' *92 ) . ansi ( :faint ) , "\n "
148
+
149
+ files . each do |file |
150
+ begin
151
+ File . open ( file , 'r+' ) do |f |
152
+ content = f . read
153
+ if content . match Regexp . new ( args [ :old ] )
154
+ content . gsub! Regexp . new ( args [ :old ] ) , args [ :new ]
155
+ puts "+ [#{ file } ]" . ansi ( :green ) . ljust ( longest_line +20 ) + " [#{ args [ :old ] } ] -> [#{ args [ :new ] } ]" . ansi ( :green , :bold )
156
+ f . rewind
157
+ f . write content
158
+ else
159
+ puts "- [#{ file } ]" . ansi ( :yellow ) . ljust ( longest_line +20 ) + " -" . ansi ( :faint , :strike )
160
+ end
161
+ end
162
+ rescue Exception => e
163
+ puts "[!!!] #{ e . class } : #{ e . message } " . ansi ( :red , :bold )
164
+ raise e
165
+ end
166
+ end
167
+
168
+ puts "\n \n " , "= CHANGELOG " . ansi ( :faint ) + ( '=' *88 ) . ansi ( :faint ) , "\n "
169
+
170
+ log = `git --no-pager log --reverse --no-color --pretty='* %s' HEAD --not v#{ args [ :old ] } elasticsearch-*` . split ( "\n " )
171
+
172
+ puts log . join ( "\n " )
173
+
174
+ log_entries = { }
175
+ log_entries [ :common ] = log . reject { |l | l =~ /^* \[ / }
176
+ log_entries [ :model ] = log . select { |l | l =~ /^* \[ MODEL\] / }
177
+ log_entries [ :store ] = log . select { |l | l =~ /^* \[ STORE\] / }
178
+ log_entries [ :rails ] = log . select { |l | l =~ /^* \[ RAILS\] / }
179
+
180
+ changelog = File . read ( File . open ( 'CHANGELOG.md' , 'r' ) )
181
+
182
+ changelog_update = ''
183
+
184
+ changelog_update << "## #{ args [ :new ] } \n \n "
185
+
186
+ unless log_entries [ :common ] . empty?
187
+ changelog_update << log_entries [ :common ]
188
+ . map { |l | "#{ l } " }
189
+ . join ( "\n " )
190
+ changelog_update << "\n \n "
191
+ end
192
+
193
+ unless log_entries [ :model ] . empty?
194
+ changelog_update << "### ActiveModel\n \n "
195
+ changelog_update << log_entries [ :model ]
196
+ . map { |l | l . gsub /\[ .+\] / , '' }
197
+ . map { |l | "#{ l } " }
198
+ . join ( "\n " )
199
+ changelog_update << "\n \n "
200
+ end
201
+
202
+ unless log_entries [ :store ] . empty?
203
+ changelog_update << "### Persistence\n \n "
204
+ changelog_update << log_entries [ :store ]
205
+ . map { |l | l . gsub /\[ .+\] / , '' }
206
+ . map { |l | "#{ l } " }
207
+ . join ( "\n " )
208
+ changelog_update << "\n \n "
209
+ end
210
+
211
+ unless log_entries [ :rails ] . empty?
212
+ changelog_update << "### Ruby on Rails\n \n "
213
+ changelog_update << log_entries [ :rails ]
214
+ . map { |l | l . gsub /\[ .+\] / , '' }
215
+ . map { |l | "#{ l } " }
216
+ . join ( "\n " )
217
+ changelog_update << "\n \n "
218
+ end
219
+
220
+ unless changelog =~ /^## #{ args [ :new ] } /
221
+ File . open ( 'CHANGELOG.md' , 'w+' ) { |f | f . write changelog_update and f . write changelog }
222
+ end
223
+
224
+ puts "\n \n " , "= DIFF " . ansi ( :faint ) + ( '=' *93 ) . ansi ( :faint )
225
+
226
+ diff = `git --no-pager diff --patch --word-diff=color --minimal elasticsearch-*` . split ( "\n " )
227
+
228
+ puts diff
229
+ . reject { |l | l =~ /^\e \[ 1mdiff \- \- git/ }
230
+ . reject { |l | l =~ /^\e \[ 1mindex [a-z0-9]{7}/ }
231
+ . reject { |l | l =~ /^\e \[ 1m\- \- \- i/ }
232
+ . reject { |l | l =~ /^\e \[ 36m@@/ }
233
+ . map { |l | l =~ /^\e \[ 1m\+ \+ \+ w/ ? "\n #{ l } " + '-' *( 104 -l . size ) : l }
234
+ . join ( "\n " )
235
+
236
+ puts "\n \n " , "= COMMIT " . ansi ( :faint ) + ( '=' *91 ) . ansi ( :faint ) , "\n "
237
+
238
+ puts "git add CHANGELOG.md elasticsearch-*" ,
239
+ "git commit --verbose --message='Release #{ args [ :new ] } ' --edit" ,
240
+ "rake release"
241
+ "\n "
242
+ end
0 commit comments