Method: RubyForge#add_release

Defined in:
lib/gems/rubyforge-1.0.1/lib/rubyforge.rb

#add_release(group_id, package_id, release_name, *files) ⇒ Object



248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
# File 'lib/gems/rubyforge-1.0.1/lib/rubyforge.rb', line 248

def add_release(group_id, package_id, release_name, *files)
  userfile = files.shift
  page = "/frs/admin/qrs.php"

  group_id        = lookup "group", group_id
  package_id      = lookup "package", package_id
  userfile        = open userfile, 'rb'
  release_date    = @userconfig["release_date"]
  type_id         = @userconfig["type_id"]
  processor_id    = @userconfig["processor_id"]
  release_notes   = @userconfig["release_notes"]
  release_changes = @userconfig["release_changes"]
  preformatted    = @userconfig["preformatted"]

  release_date ||= Time.now.strftime("%Y-%m-%d %H:%M")

  type_id ||= userfile.path[%r|\.[^\./]+$|]
  type_id = (lookup "type", type_id rescue lookup "type", ".oth")

  processor_id ||= "Any"
  processor_id = lookup "processor", processor_id

  release_notes = IO::read(release_notes) if
    test(?e, release_notes) if release_notes

  release_changes = IO::read(release_changes) if
    test(?e, release_changes) if release_changes

  preformatted = preformatted ? 1 : 0

  form = {
    "group_id"        => group_id,
    "package_id"      => package_id,
    "release_name"    => release_name,
    "release_date"    => release_date,
    "type_id"         => type_id,
    "processor_id"    => processor_id,
    "release_notes"   => release_notes,
    "release_changes" => release_changes,
    "preformatted"    => preformatted,
    "userfile"        => userfile,
    "submit"          => "Release File"
  }

  boundary = Array::new(8){ "%2.2d" % rand(42) }.join('__')
  boundary = "multipart/form-data; boundary=___#{ boundary }___"

  html = run(page, form, 'content-type' => boundary)
  raise "Invalid package_id #{package_id}" if html[/Invalid package_id/]
  raise "You have already released this version." if html[/That filename already exists in this project/]

  release_id = html[/release_id=\d+/][/\d+/].to_i rescue nil

  unless release_id then
    puts html if $DEBUG
    raise "Couldn't get release_id, upload failed\?"
  end

  puts "RELEASE ID = #{release_id}" if $DEBUG

  files.each do |file|
    add_file(group_id, package_id, release_id, file)
  end

  package_name = @autoconfig["package_ids"].invert[package_id]
  raise "unknown package name for #{package_id}" if package_name.nil?
  @autoconfig["release_ids"][package_name] ||= {}
  @autoconfig["release_ids"][package_name][release_name] = release_id
  save_autoconfig

  release_id
end