linguistics 1.0.8 → 1.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +4 -0
- data/ChangeLog +312 -484
- data/Rakefile +66 -41
- data/lib/linguistics.rb +1 -1
- data/lib/linguistics/en.rb +1 -1
- data/lib/linguistics/en/wordnet.rb +1 -1
- data/rake/documentation.rb +123 -0
- data/rake/helpers.rb +375 -307
- data/rake/hg.rb +63 -6
- data/rake/manual.rb +11 -6
- data/rake/packaging.rb +20 -35
- data/rake/publishing.rb +161 -138
- data/rake/testing.rb +53 -88
- data/tests/en/infinitive.tests.rb +1 -1
- data/tests/en/inflect.tests.rb +1 -1
- data/tests/en/lafcadio.tests.rb +1 -1
- data/tests/en/linkparser.tests.rb +1 -1
- data/tests/en/lprintf.tests.rb +1 -1
- data/tests/en/titlecase.tests.rb +1 -1
- data/tests/en/wordnet.tests.rb +1 -1
- metadata +52 -24
- metadata.gz.sig +2 -0
- data/rake/rdoc.rb +0 -30
- data/rake/win32.rb +0 -190
data/rake/hg.rb
CHANGED
@@ -22,6 +22,8 @@ unless defined?( HG_DOTDIR )
|
|
22
22
|
###
|
23
23
|
|
24
24
|
module MercurialHelpers
|
25
|
+
require './helpers.rb' unless defined?( RakefileHelpers )
|
26
|
+
include RakefileHelpers
|
25
27
|
|
26
28
|
###############
|
27
29
|
module_function
|
@@ -81,9 +83,18 @@ unless defined?( HG_DOTDIR )
|
|
81
83
|
return paths
|
82
84
|
end
|
83
85
|
|
86
|
+
### Return the list of files which are not of status 'clean'
|
87
|
+
def get_uncommitted_files
|
88
|
+
list = read_command_output( 'hg', 'status', '-n', '--color', 'never' )
|
89
|
+
list = list.split( /\n/ )
|
90
|
+
|
91
|
+
trace "Changed files: %p" % [ list ]
|
92
|
+
return list
|
93
|
+
end
|
94
|
+
|
84
95
|
### Return the list of files which are of status 'unknown'
|
85
96
|
def get_unknown_files
|
86
|
-
list = read_command_output( 'hg', 'status', '-un', '--
|
97
|
+
list = read_command_output( 'hg', 'status', '-un', '--color', 'never' )
|
87
98
|
list = list.split( /\n/ )
|
88
99
|
|
89
100
|
trace "New files: %p" % [ list ]
|
@@ -147,11 +158,21 @@ unless defined?( HG_DOTDIR )
|
|
147
158
|
|
148
159
|
desc "Prepare for a new release"
|
149
160
|
task :prep_release do
|
161
|
+
uncommitted_files = get_uncommitted_files()
|
162
|
+
unless uncommitted_files.empty?
|
163
|
+
log "Uncommitted files:\n",
|
164
|
+
*uncommitted_files.map {|fn| " #{fn}\n" }
|
165
|
+
ask_for_confirmation( "\nRelease anyway?", true ) do
|
166
|
+
log "Okay, releasing with uncommitted versions."
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
150
170
|
tags = get_tags()
|
151
171
|
rev = get_current_rev()
|
172
|
+
pkg_version_tag = "v#{PKG_VERSION}"
|
152
173
|
|
153
174
|
# Look for a tag for the current release version, and if it exists abort
|
154
|
-
if tags.include?(
|
175
|
+
if tags.include?( pkg_version_tag )
|
155
176
|
error "Version #{PKG_VERSION} already has a tag. Did you mean " +
|
156
177
|
"to increment the version in #{VERSION_FILE}?"
|
157
178
|
fail
|
@@ -162,8 +183,8 @@ unless defined?( HG_DOTDIR )
|
|
162
183
|
run 'hg', 'sign'
|
163
184
|
|
164
185
|
# Tag the current rev
|
165
|
-
log "Tagging rev #{rev} as #{
|
166
|
-
run 'hg', 'tag',
|
186
|
+
log "Tagging rev #{rev} as #{pkg_version_tag}"
|
187
|
+
run 'hg', 'tag', pkg_version_tag
|
167
188
|
|
168
189
|
# Offer to push
|
169
190
|
Rake::Task['hg:push'].invoke
|
@@ -208,8 +229,39 @@ unless defined?( HG_DOTDIR )
|
|
208
229
|
task :add => :newfiles
|
209
230
|
|
210
231
|
|
232
|
+
desc "Pull and update from the default repo"
|
233
|
+
task :pull do
|
234
|
+
paths = get_repo_paths()
|
235
|
+
if origin_url = paths['default']
|
236
|
+
ask_for_confirmation( "Pull and update from '#{origin_url}'?", false ) do
|
237
|
+
Rake::Task['hg:pull_without_confirmation'].invoke
|
238
|
+
end
|
239
|
+
else
|
240
|
+
trace "Skipping pull: No 'default' path."
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
|
245
|
+
desc "Pull and update without confirmation"
|
246
|
+
task :pull_without_confirmation do
|
247
|
+
run 'hg', 'pull', '-u'
|
248
|
+
end
|
249
|
+
|
250
|
+
|
251
|
+
desc "Update to tip"
|
252
|
+
task :update do
|
253
|
+
run 'hg', 'update'
|
254
|
+
end
|
255
|
+
|
256
|
+
|
257
|
+
desc "Clobber all changes (hg up -C)"
|
258
|
+
task :update_and_clobber do
|
259
|
+
run 'hg', 'update', '-C'
|
260
|
+
end
|
261
|
+
|
262
|
+
|
211
263
|
desc "Check the current code in if tests pass"
|
212
|
-
task :checkin => ['hg:newfiles', 'test', COMMIT_MSG_FILE] do
|
264
|
+
task :checkin => ['hg:pull', 'hg:newfiles', 'test', COMMIT_MSG_FILE] do
|
213
265
|
targets = get_target_args()
|
214
266
|
$stderr.puts '---', File.read( COMMIT_MSG_FILE ), '---'
|
215
267
|
ask_for_confirmation( "Continue with checkin?" ) do
|
@@ -228,13 +280,18 @@ unless defined?( HG_DOTDIR )
|
|
228
280
|
paths = get_repo_paths()
|
229
281
|
if origin_url = paths['default']
|
230
282
|
ask_for_confirmation( "Push to '#{origin_url}'?", false ) do
|
231
|
-
|
283
|
+
Rake::Task['hg:push_without_confirmation'].invoke
|
232
284
|
end
|
233
285
|
else
|
234
286
|
trace "Skipping push: No 'default' path."
|
235
287
|
end
|
236
288
|
end
|
237
289
|
|
290
|
+
desc "Push to the default repo without confirmation"
|
291
|
+
task :push_without_confirmation do
|
292
|
+
run 'hg', 'push'
|
293
|
+
end
|
294
|
+
|
238
295
|
end
|
239
296
|
|
240
297
|
if HG_DOTDIR.exist?
|
data/rake/manual.rb
CHANGED
@@ -147,9 +147,14 @@ module Manual
|
|
147
147
|
|
148
148
|
layout = self.config['layout'].sub( /\.page$/, '' )
|
149
149
|
templatepath = @layouts_dir + "#{layout}.page"
|
150
|
-
template =
|
151
|
-
|
150
|
+
template = nil
|
151
|
+
if Object.const_defined?( :Encoding )
|
152
|
+
template = ERB.new( templatepath.read(:encoding => 'UTF-8') )
|
153
|
+
else
|
154
|
+
template = ERB.new( templatepath.read )
|
155
|
+
end
|
152
156
|
|
157
|
+
page = self
|
153
158
|
html = template.result( binding() )
|
154
159
|
|
155
160
|
# Use Tidy to clean up the html if 'cleanup' is turned on, but remove the Tidy
|
@@ -565,7 +570,7 @@ module Manual
|
|
565
570
|
manual_pages = setup_page_conversion_tasks( sourcedir, outputdir, catalog )
|
566
571
|
|
567
572
|
desc "Build the manual"
|
568
|
-
task :build => [ :
|
573
|
+
task :build => [ :apidocs, :copy_resources, :copy_apidocs, :generate_pages ]
|
569
574
|
|
570
575
|
task :clobber do
|
571
576
|
RakeFileUtils.verbose( $verbose ) do
|
@@ -686,8 +691,8 @@ module Manual
|
|
686
691
|
end
|
687
692
|
|
688
693
|
desc "Copy API documentation to the manual output directory"
|
689
|
-
task :copy_apidocs => :
|
690
|
-
cp_r(
|
694
|
+
task :copy_apidocs => :apidocs do
|
695
|
+
cp_r( API_DOCSDIR, outputdir )
|
691
696
|
end
|
692
697
|
|
693
698
|
# Now group all the resource file tasks into a containing task
|
@@ -713,7 +718,7 @@ if MANUALDIR.exist?
|
|
713
718
|
|
714
719
|
Manual::GenTask.new do |manual|
|
715
720
|
manual.metadata.version = PKG_VERSION
|
716
|
-
manual.metadata.api_dir =
|
721
|
+
manual.metadata.api_dir = API_DOCSDIR
|
717
722
|
manual.output_dir = MANUALOUTPUTDIR
|
718
723
|
manual.base_dir = MANUALDIR
|
719
724
|
manual.source_dir = 'src'
|
data/rake/packaging.rb
CHANGED
@@ -1,17 +1,27 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
#
|
1
|
+
#####################################################################
|
2
|
+
### P A C K A G I N G T A S K S
|
3
|
+
#####################################################################
|
5
4
|
|
6
5
|
require 'rbconfig'
|
7
6
|
require 'pathname'
|
8
|
-
require '
|
9
|
-
require 'rake/gempackagetask'
|
7
|
+
require 'rubygems/package_task'
|
10
8
|
|
11
|
-
require Pathname( __FILE__ ).dirname.expand_path + 'hg.rb'
|
12
9
|
|
13
10
|
include Config
|
14
11
|
|
12
|
+
### Task: prerelease
|
13
|
+
desc "Append the package build number to package versions"
|
14
|
+
task :prerelease do
|
15
|
+
GEMSPEC.version.version << "pre#{PKG_BUILD}"
|
16
|
+
Rake::Task[:gem].clear
|
17
|
+
|
18
|
+
Gem::PackageTask.new( GEMSPEC ) do |pkg|
|
19
|
+
pkg.need_zip = true
|
20
|
+
pkg.need_tar = true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
15
25
|
### Task: gem
|
16
26
|
### Task: package
|
17
27
|
Rake::PackageTask.new( PKG_NAME, PKG_VERSION ) do |task|
|
@@ -24,34 +34,9 @@ end
|
|
24
34
|
task :package => [:gem]
|
25
35
|
|
26
36
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
desc "Build a RubyGem package (#{GEM_FILE_NAME})"
|
31
|
-
task :gem => gempath.to_s
|
32
|
-
file gempath.to_s => [PKGDIR.to_s] + GEMSPEC.files do
|
33
|
-
when_writing( "Creating GEM" ) do
|
34
|
-
Gem::Builder.new( GEMSPEC ).build
|
35
|
-
verbose( true ) do
|
36
|
-
mv GEM_FILE_NAME, gempath
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
prerelease_gempath = PKGDIR + SNAPSHOT_GEM_NAME
|
43
|
-
|
44
|
-
desc "Build a pre-release RubyGem package"
|
45
|
-
task :prerelease_gem => prerelease_gempath.to_s
|
46
|
-
file prerelease_gempath.to_s => [PKGDIR.to_s] + GEMSPEC.files do
|
47
|
-
when_writing( "Creating prerelease GEM" ) do
|
48
|
-
gemspec = GEMSPEC.clone
|
49
|
-
gemspec.version = Gem::Version.create( "%s.%s" % [GEMSPEC.version, PKG_BUILD] )
|
50
|
-
Gem::Builder.new( gemspec ).build
|
51
|
-
verbose( true ) do
|
52
|
-
mv SNAPSHOT_GEM_NAME, prerelease_gempath
|
53
|
-
end
|
54
|
-
end
|
37
|
+
Gem::PackageTask.new( GEMSPEC ) do |pkg|
|
38
|
+
pkg.need_zip = true
|
39
|
+
pkg.need_tar = true
|
55
40
|
end
|
56
41
|
|
57
42
|
|
data/rake/publishing.rb
CHANGED
@@ -5,6 +5,8 @@
|
|
5
5
|
RELEASE_NOTES_FILE = 'release.notes'
|
6
6
|
RELEASE_ANNOUNCE_FILE = 'release.ann'
|
7
7
|
|
8
|
+
GEM_PUBHOST = '' unless defined?( GEM_PUBHOST )
|
9
|
+
|
8
10
|
require 'net/smtp'
|
9
11
|
require 'net/protocol'
|
10
12
|
require 'openssl'
|
@@ -13,6 +15,7 @@ $publish_privately = false
|
|
13
15
|
|
14
16
|
### Add SSL to Net::SMTP
|
15
17
|
class Net::SMTP
|
18
|
+
|
16
19
|
def ssl_start( helo='localhost.localdomain', user=nil, secret=nil, authtype=nil )
|
17
20
|
if block_given?
|
18
21
|
begin
|
@@ -34,7 +37,13 @@ class Net::SMTP
|
|
34
37
|
|
35
38
|
def do_ssl_start( helodomain, user, secret, authtype )
|
36
39
|
raise IOError, 'SMTP session already started' if @started
|
37
|
-
|
40
|
+
if user or secret
|
41
|
+
if self.method( :check_auth_args ).arity == 3
|
42
|
+
check_auth_args( user, secret, authtype )
|
43
|
+
else
|
44
|
+
check_auth_args( user, secret )
|
45
|
+
end
|
46
|
+
end
|
38
47
|
|
39
48
|
# Open the connection
|
40
49
|
@debug_output << "opening connection to #{@address}...\n" if @debug_output
|
@@ -85,9 +94,11 @@ begin
|
|
85
94
|
require 'tmail'
|
86
95
|
require 'net/smtp'
|
87
96
|
require 'etc'
|
88
|
-
require 'rubyforge'
|
89
97
|
require 'socket'
|
90
98
|
require 'text/format'
|
99
|
+
require 'rubygems/gemcutter_utilities'
|
100
|
+
|
101
|
+
include Gem::GemcutterUtilities
|
91
102
|
|
92
103
|
### Generate a valid RFC822 message-id
|
93
104
|
def gen_message_id
|
@@ -99,6 +110,48 @@ begin
|
|
99
110
|
end
|
100
111
|
|
101
112
|
|
113
|
+
### Fetch the rubygems API token if it hasn't been already.
|
114
|
+
def sign_in_to_rubygems
|
115
|
+
return if Gem.configuration.rubygems_api_key
|
116
|
+
|
117
|
+
log "Enter your RubyGems.org credentials."
|
118
|
+
|
119
|
+
email = prompt " Email: "
|
120
|
+
password = prompt_for_password( "Password: " )
|
121
|
+
|
122
|
+
response = rubygems_api_request( :get, "api/v1/api_key" ) do |request|
|
123
|
+
request.basic_auth( email, password )
|
124
|
+
end
|
125
|
+
|
126
|
+
with_response( response ) do |resp|
|
127
|
+
log "Signed in."
|
128
|
+
Gem.configuration.rubygems_api_key = resp.body
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
### Push the gem at the specified +path+ to the rubygems server at +gemhost+.
|
134
|
+
def push_gem( path, gemhost )
|
135
|
+
ENV['RUBYGEMS_HOST'] = "http://#{gemhost}"
|
136
|
+
|
137
|
+
sign_in_to_rubygems()
|
138
|
+
|
139
|
+
response = rubygems_api_request( :post, "api/v1/gems" ) do |request|
|
140
|
+
request.body = Gem.read_binary( path )
|
141
|
+
request.add_field "Content-Length", request.body.size
|
142
|
+
request.add_field "Content-Type", "application/octet-stream"
|
143
|
+
request.add_field "Authorization", Gem.configuration.rubygems_api_key
|
144
|
+
end
|
145
|
+
|
146
|
+
case response
|
147
|
+
when Net::HTTPSuccess
|
148
|
+
log( response.body )
|
149
|
+
else
|
150
|
+
fail( response.body )
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
|
102
155
|
namespace :release do
|
103
156
|
task :default => [ :prep_release, :upload, :publish, :announce ]
|
104
157
|
|
@@ -128,168 +181,137 @@ begin
|
|
128
181
|
end
|
129
182
|
CLOBBER.include( RELEASE_NOTES_FILE )
|
130
183
|
|
184
|
+
# Only define upload tasks if there's an upload host
|
185
|
+
if PROJECT_HOST.empty?
|
186
|
+
task :no_upload_host do
|
187
|
+
log "Skipping upload: no upload host."
|
188
|
+
end
|
189
|
+
task :upload => :no_upload_host
|
190
|
+
task :upload_docs => :no_upload_host
|
191
|
+
task :upload_packages => :no_upload_host
|
192
|
+
else
|
193
|
+
desc "Upload project documentation and packages to #{PROJECT_HOST}"
|
194
|
+
task :upload => [ :upload_docs, :upload_packages ]
|
195
|
+
task :project => :upload # the old name
|
196
|
+
|
197
|
+
desc "Publish the project docs to #{PROJECT_HOST}"
|
198
|
+
task :upload_docs => [ :apidocs ] do
|
199
|
+
when_writing( "Publishing docs to #{PROJECT_SCPDOCURL}" ) do
|
200
|
+
log "Uploading API documentation to %s:%s" % [ PROJECT_HOST, PROJECT_DOCDIR ]
|
201
|
+
run 'ssh', PROJECT_HOST, "rm -rf #{PROJECT_DOCDIR}"
|
202
|
+
run 'scp', '-qCr', API_DOCSDIR, PROJECT_SCPDOCURL
|
203
|
+
end
|
204
|
+
end
|
131
205
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
run 'scp', '-qCr', RDOCDIR, PROJECT_SCPDOCURL
|
206
|
+
desc "Publish the project packages to #{PROJECT_HOST}"
|
207
|
+
task :upload_packages => [ :package ] do
|
208
|
+
when_writing( "Uploading packages") do
|
209
|
+
pkgs = Pathname.glob( PKGDIR + "#{PKG_FILE_NAME}.{gem,tar.gz,tar.bz2,zip}" )
|
210
|
+
log "Uploading %d packages to #{PROJECT_SCPPUBURL}" % [ pkgs.length ]
|
211
|
+
pkgs.each do |pkgfile|
|
212
|
+
run 'scp', '-qC', pkgfile, PROJECT_SCPPUBURL
|
213
|
+
end
|
214
|
+
end
|
142
215
|
end
|
143
216
|
end
|
144
217
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
run 'scp', '-qC', pkgfile, PROJECT_SCPPUBURL
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
218
|
+
# Only define the announcement tasks if there are addresses to announce to
|
219
|
+
if RELEASE_ANNOUNCE_ADDRESSES.empty?
|
220
|
+
task :no_announce_addresses do
|
221
|
+
log "Skipping announcement: no announce addresses"
|
222
|
+
end
|
223
|
+
task :announce => :no_announce_addresses
|
155
224
|
|
225
|
+
else
|
226
|
+
file RELEASE_ANNOUNCE_FILE => [RELEASE_NOTES_FILE] do |task|
|
227
|
+
relnotes = File.read( RELEASE_NOTES_FILE )
|
228
|
+
announce_body = %{
|
156
229
|
|
157
|
-
|
158
|
-
relnotes = File.read( RELEASE_NOTES_FILE )
|
159
|
-
announce_body = %{
|
230
|
+
Version #{PKG_VERSION} of #{PKG_NAME} has been released.
|
160
231
|
|
161
|
-
|
232
|
+
#{Text::Format.new(:first_indent => 0).format_one_paragraph(GEMSPEC.description)}
|
162
233
|
|
163
|
-
|
234
|
+
== Project Page
|
164
235
|
|
165
|
-
|
236
|
+
#{GEMSPEC.homepage}
|
166
237
|
|
167
|
-
|
238
|
+
== Installation
|
168
239
|
|
169
|
-
|
240
|
+
$ sudo gem install #{GEMSPEC.name}
|
170
241
|
|
171
|
-
|
242
|
+
== Changes
|
243
|
+
#{relnotes}
|
244
|
+
}.gsub( /^\t+/, '' )
|
172
245
|
|
173
|
-
|
246
|
+
File.open( task.name, File::WRONLY|File::TRUNC|File::CREAT ) do |fh|
|
247
|
+
fh.print( announce_body )
|
248
|
+
end
|
174
249
|
|
175
|
-
|
250
|
+
edit task.name
|
251
|
+
end
|
252
|
+
CLOBBER.include( RELEASE_ANNOUNCE_FILE )
|
176
253
|
|
177
|
-
$ wget http://deveiate.org/code/#{PKG_FILE_NAME}.tar.gz
|
178
|
-
$ tar -xzvf #{PKG_FILE_NAME}.tar.gz
|
179
|
-
$ cd #{PKG_FILE_NAME}
|
180
|
-
$ sudo rake install
|
181
254
|
|
182
|
-
|
183
|
-
|
184
|
-
|
255
|
+
desc 'Send out a release announcement'
|
256
|
+
task :announce => [RELEASE_ANNOUNCE_FILE] do
|
257
|
+
email = TMail::Mail.new
|
185
258
|
|
186
|
-
|
187
|
-
|
188
|
-
|
259
|
+
if $publish_privately || RELEASE_ANNOUNCE_ADDRESSES.empty?
|
260
|
+
trace "Sending private announce mail"
|
261
|
+
email.to = 'rubymage@gmail.com'
|
262
|
+
else
|
263
|
+
trace "Sending public announce mail"
|
264
|
+
email.to = RELEASE_ANNOUNCE_ADDRESSES
|
265
|
+
email.bcc = 'rubymage@gmail.com'
|
266
|
+
end
|
189
267
|
|
190
|
-
|
191
|
-
|
192
|
-
CLOBBER.include( RELEASE_ANNOUNCE_FILE )
|
268
|
+
from = prompt_with_default( "Send announcement as:",
|
269
|
+
'Michael Granger <ged@FaerieMUD.org>' ) or fail
|
193
270
|
|
271
|
+
email.from = from
|
272
|
+
email.subject = "[ANN] #{PKG_NAME} #{PKG_VERSION}"
|
273
|
+
email.body = File.read( RELEASE_ANNOUNCE_FILE )
|
274
|
+
email.date = Time.new
|
194
275
|
|
195
|
-
|
196
|
-
task :announce => [RELEASE_ANNOUNCE_FILE] do
|
197
|
-
email = TMail::Mail.new
|
198
|
-
if $publish_privately
|
199
|
-
trace "Sending private announce mail"
|
200
|
-
email.to = 'rubymage@gmail.com'
|
201
|
-
else
|
202
|
-
trace "Sending public announce mail"
|
203
|
-
email.to = 'Ruby-Talk List <ruby-talk@ruby-lang.org>'
|
204
|
-
email.bcc = 'rubymage@gmail.com'
|
205
|
-
end
|
206
|
-
email.from = GEMSPEC.email
|
207
|
-
email.subject = "[ANN] #{PKG_NAME} #{PKG_VERSION}"
|
208
|
-
email.body = File.read( RELEASE_ANNOUNCE_FILE )
|
209
|
-
email.date = Time.new
|
210
|
-
|
211
|
-
email.message_id = gen_message_id()
|
212
|
-
|
213
|
-
log "About to send the following email:"
|
214
|
-
puts '---',
|
215
|
-
email.to_s,
|
216
|
-
'---'
|
217
|
-
|
218
|
-
ask_for_confirmation( "Will send via #{SMTP_HOST}." ) do
|
219
|
-
pwent = Etc.getpwuid( Process.euid )
|
220
|
-
curuser = pwent ? pwent.name : 'unknown'
|
221
|
-
username = prompt_with_default( "SMTP user", curuser )
|
222
|
-
password = prompt_for_password()
|
223
|
-
|
224
|
-
trace "Creating SMTP connection to #{SMTP_HOST}:#{SMTP_PORT}"
|
225
|
-
smtp = Net::SMTP.new( SMTP_HOST, SMTP_PORT )
|
226
|
-
smtp.set_debug_output( $stdout )
|
227
|
-
smtp.esmtp = true
|
228
|
-
|
229
|
-
trace "connecting..."
|
230
|
-
smtp.ssl_start( Socket.gethostname, username, password, :plain ) do |smtp|
|
231
|
-
trace "sending message..."
|
232
|
-
smtp.send_message( email.to_s, email.from, email.to )
|
233
|
-
end
|
234
|
-
trace "done."
|
235
|
-
end
|
236
|
-
end
|
276
|
+
email.message_id = gen_message_id()
|
237
277
|
|
278
|
+
log "About to send the following email:"
|
279
|
+
puts '---',
|
280
|
+
email.to_s,
|
281
|
+
'---'
|
238
282
|
|
239
|
-
|
240
|
-
|
241
|
-
|
283
|
+
ask_for_confirmation( "Will send via #{SMTP_HOST}." ) do
|
284
|
+
pwent = Etc.getpwuid( Process.euid )
|
285
|
+
curuser = pwent ? pwent.name : 'unknown'
|
286
|
+
username = prompt_with_default( "SMTP user", curuser )
|
287
|
+
password = prompt_for_password()
|
242
288
|
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
# If this project doesn't yet exist, create it
|
254
|
-
unless rf.autoconfig['package_ids'].key?( project )
|
255
|
-
ask_for_confirmation( "Package '#{project}' doesn't exist on RubyForge. Create it?" ) do
|
256
|
-
log "Creating new package '#{project}'"
|
257
|
-
rf.create_package( group_id, project )
|
289
|
+
trace "Creating SMTP connection to #{SMTP_HOST}:#{SMTP_PORT}"
|
290
|
+
smtp = Net::SMTP.new( SMTP_HOST, SMTP_PORT )
|
291
|
+
smtp.set_debug_output( $stdout )
|
292
|
+
smtp.esmtp = true
|
293
|
+
|
294
|
+
trace "connecting..."
|
295
|
+
smtp.ssl_start( Socket.gethostname, username, password, :plain ) do |smtp|
|
296
|
+
trace "sending message..."
|
297
|
+
smtp.send_message( email.to_s, email.from, email.to )
|
258
298
|
end
|
299
|
+
trace "done."
|
259
300
|
end
|
301
|
+
end
|
302
|
+
end
|
260
303
|
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
files = FileList[ PKGDIR + GEM_FILE_NAME ]
|
274
|
-
files.include PKGDIR + "#{PKG_FILE_NAME}.tar.gz"
|
275
|
-
files.include PKGDIR + "#{PKG_FILE_NAME}.tar.bz2"
|
276
|
-
files.include PKGDIR + "#{PKG_FILE_NAME}.zip"
|
277
|
-
|
278
|
-
log "Releasing #{PKG_FILE_NAME}"
|
279
|
-
when_writing do
|
280
|
-
log "Publishing to RubyForge: \n",
|
281
|
-
"\tproject: #{RUBYFORGE_GROUP}\n",
|
282
|
-
"\tpackage: #{PKG_NAME.downcase}\n",
|
283
|
-
"\tpackage version: #{PKG_VERSION}\n",
|
284
|
-
"\tfiles: " + files.collect {|f| f.to_s }.join(', ') + "\n"
|
285
|
-
|
286
|
-
ask_for_confirmation( "Publish to RubyForge?" ) do
|
287
|
-
log 'Logging in...'
|
288
|
-
rf.login
|
289
|
-
log "Adding the new release to the '#{project}' project"
|
290
|
-
rf.add_release( group_id, package_id, PKG_VERSION, *files )
|
291
|
-
end
|
292
|
-
end
|
304
|
+
if GEM_PUBHOST.empty?
|
305
|
+
task :no_gem_host do
|
306
|
+
log "Skipping gem push: no gem publication host."
|
307
|
+
end
|
308
|
+
task :publish => :no_gem_host
|
309
|
+
else
|
310
|
+
desc 'Publish the new gem to #{GEM_PUBHOST}'
|
311
|
+
task :publish => [:clean, :gem, :notes] do |task|
|
312
|
+
ask_for_confirmation( "Publish #{GEM_FILE_NAME} to #{GEM_PUBHOST}?", false ) do
|
313
|
+
gempath = PKGDIR + GEM_FILE_NAME
|
314
|
+
push_gem( gempath, GEM_PUBHOST )
|
293
315
|
end
|
294
316
|
end
|
295
317
|
end
|
@@ -306,6 +328,7 @@ rescue LoadError => err
|
|
306
328
|
end
|
307
329
|
|
308
330
|
task :release => :no_release_tasks
|
331
|
+
task "release:rerelease" => :no_release_tasks
|
309
332
|
task "release:announce" => :no_release_tasks
|
310
333
|
task "release:publish" => :no_release_tasks
|
311
334
|
task "release:notes" => :no_release_tasks
|