debugger-ruby_core_source 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,9 @@
1
+ ## 1.1.0
2
+ * Change main API method used by others to Debugger::RubyCoreSource.
3
+ * remove lib/ruby_core_source.rb
4
+ * Remove lib/contrib* and use open-uri for rake tasks
5
+ * Safety check for config key rubyhdrdir
6
+
1
7
  ## 1.0.1
2
8
  * Add 1.9.2-p138 headers
3
9
 
data/Rakefile CHANGED
@@ -1,10 +1,9 @@
1
- require 'tempfile'
2
1
  require 'tmpdir'
3
- require 'uri'
4
- require 'contrib/uri_ext'
2
+ require 'open-uri'
5
3
  require 'archive/tar/minitar'
6
4
  require 'zlib'
7
5
  require 'fileutils'
6
+ require 'rubygems/package_task'
8
7
 
9
8
  desc 'Add ruby headers under lib for a given VERSION'
10
9
  task :add_source do
@@ -13,20 +12,21 @@ task :add_source do
13
12
  uri_path = "http://ftp.ruby-lang.org/pub/ruby/1.9/#{ruby_dir}.tar.gz"
14
13
  dest_dir = File.dirname(__FILE__) + "/lib/debugger/ruby_core_source/#{ruby_dir}"
15
14
 
16
- Tempfile.open("ruby-src") do |temp|
17
- temp.binmode
18
- uri = URI.parse(uri_path)
19
- uri.download(temp)
15
+ puts "Downloading #{uri_path}..."
16
+ temp = open(uri_path)
17
+ puts "Unpacking #{uri_path}..."
18
+ tgz = Zlib::GzipReader.new(File.open(temp, "rb"))
20
19
 
21
- tgz = Zlib::GzipReader.new(File.open(temp, "rb"))
22
-
23
- FileUtils.mkdir_p(dest_dir)
24
- Dir.mktmpdir do |dir|
25
- inc_dir = dir + "/" + ruby_dir + "/*.inc"
26
- hdr_dir = dir + "/" + ruby_dir + "/*.h"
27
- Archive::Tar::Minitar.unpack(tgz, dir)
28
- FileUtils.cp(Dir.glob([ inc_dir, hdr_dir ]), dest_dir)
29
- end
20
+ FileUtils.mkdir_p(dest_dir)
21
+ Dir.mktmpdir do |dir|
22
+ inc_dir = dir + "/" + ruby_dir + "/*.inc"
23
+ hdr_dir = dir + "/" + ruby_dir + "/*.h"
24
+ Archive::Tar::Minitar.unpack(tgz, dir)
25
+ FileUtils.cp(Dir.glob([ inc_dir, hdr_dir ]), dest_dir)
30
26
  end
27
+ end
31
28
 
29
+ base_spec = eval(File.read('debugger-ruby_core_source.gemspec'), binding, 'debugger-ruby_core_source.gemspec')
30
+ Gem::PackageTask.new(base_spec) do |pkg|
31
+ pkg.need_tar = true
32
32
  end
@@ -1,7 +1,62 @@
1
- require 'ruby_core_source'
2
1
  require 'debugger/ruby_core_source/version'
2
+ require 'rbconfig'
3
3
 
4
4
  module Debugger
5
5
  module RubyCoreSource
6
+ REVISION_MAP = {
7
+ 24186 => 'ruby-1.9.2-preview1',
8
+ 27362 => 'ruby-1.9.2-preview3',
9
+ 28524 => 'ruby-1.9.2-rc1',
10
+ 28618 => 'ruby-1.9.2-rc2',
11
+ 32789 => 'ruby-1.9.3-preview1',
12
+ 33323 => 'ruby-1.9.3-rc1'
13
+ }
14
+
15
+ def self.create_makefile_with_core(hdrs, name)
16
+ # First, see if the gem already has the needed headers
17
+ if hdrs.call
18
+ create_makefile(name)
19
+ return true
20
+ end
21
+
22
+ ruby_dir = if RUBY_PATCHLEVEL < 0
23
+ REVISION_MAP[RUBY_REVISION] or
24
+ no_source_abort("ruby-#{RUBY_VERSION} (revision #{RUBY_REVISION})")
25
+ else
26
+ "ruby-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
27
+ end
28
+
29
+ # Check if core headers were already downloaded; if so, use them
30
+ if RbConfig::CONFIG["rubyhdrdir"]
31
+ dest_dir = RbConfig::CONFIG["rubyhdrdir"] + "/" + ruby_dir
32
+ with_cppflags("-I" + dest_dir) {
33
+ if hdrs.call
34
+ create_makefile(name)
35
+ return true
36
+ end
37
+ }
38
+ end
39
+
40
+ # Look for sources that ship with gem
41
+ dest_dir = File.dirname(__FILE__) + "/debugger/ruby_core_source/#{ruby_dir}"
42
+ no_source_abort(ruby_dir) unless File.directory?(dest_dir)
43
+
44
+ with_cppflags("-I" + dest_dir) {
45
+ if hdrs.call
46
+ create_makefile(name)
47
+ return true
48
+ end
49
+ }
50
+ return false
51
+ end
52
+
53
+ def self.no_source_abort(ruby_version)
54
+ abort <<-STR
55
+ Makefile creation failed
56
+ **************************************************************************
57
+ No source for #{ruby_version} provided with debugger-ruby_core_source gem.
58
+ **************************************************************************
59
+ STR
60
+ end
6
61
  end
7
62
  end
@@ -1,5 +1,5 @@
1
1
  module Debugger
2
2
  module RubyCoreSource
3
- VERSION = '1.0.1'
3
+ VERSION = '1.1.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: debugger-ruby_core_source
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-04-04 00:00:00.000000000Z
13
+ date: 2012-04-06 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: archive-tar-minitar
@@ -53,15 +53,12 @@ extra_rdoc_files:
53
53
  files:
54
54
  - CHANGELOG.md
55
55
  - LEGAL
56
- - LICENSE
57
56
  - LICENSE.txt
58
57
  - OLD_README
59
58
  - README.md
60
59
  - RUBY_LICENSE
61
60
  - Rakefile
62
61
  - debugger-ruby_core_source.gemspec
63
- - lib/contrib/progressbar.rb
64
- - lib/contrib/uri_ext.rb
65
62
  - lib/debugger/ruby_core_source.rb
66
63
  - lib/debugger/ruby_core_source/ruby-1.9.2-p290/debug.h
67
64
  - lib/debugger/ruby_core_source/ruby-1.9.2-p290/dln.h
@@ -204,7 +201,6 @@ files:
204
201
  - lib/debugger/ruby_core_source/ruby-1.9.3-p125/vm_opts.h
205
202
  - lib/debugger/ruby_core_source/ruby-1.9.3-p125/vmtc.inc
206
203
  - lib/debugger/ruby_core_source/version.rb
207
- - lib/ruby_core_source.rb
208
204
  homepage: http://github.com/cldwalker/debugger-ruby_core_source
209
205
  licenses: []
210
206
  post_install_message:
@@ -230,4 +226,3 @@ signing_key:
230
226
  specification_version: 3
231
227
  summary: Provide Ruby core source files
232
228
  test_files: []
233
- has_rdoc:
data/LICENSE DELETED
@@ -1,23 +0,0 @@
1
- Copyright (C) 2011 Mark Moseley <mark@fast-software.com>
2
- All rights reserved.
3
- *
4
- Redistribution and use in source and binary forms, with or without
5
- modification, are permitted provided that the following conditions
6
- are met:
7
- 1. Redistributions of source code must retain the above copyright
8
- notice, this list of conditions and the following disclaimer.
9
- 2. Redistributions in binary form must reproduce the above copyright
10
- notice, this list of conditions and the following disclaimer in the
11
- documentation and/or other materials provided with the distribution.
12
- *
13
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
14
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
17
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23
- SUCH DAMAGE.
@@ -1,237 +0,0 @@
1
- # = progressbar.rb
2
- #
3
- # == Copyright (C) 2001 Satoru Takabayashi
4
- #
5
- # Ruby License
6
- #
7
- # This module is free software. You may use, modify, and/or redistribute this
8
- # software under the same terms as Ruby.
9
- #
10
- # This program is distributed in the hope that it will be useful, but WITHOUT
11
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12
- # FOR A PARTICULAR PURPOSE.
13
- #
14
- # == Author(s)
15
- #
16
- # * Satoru Takabayashi
17
-
18
- # Author:: Satoru Takabayashi
19
- # Copyright:: Copyright (c) 2001 Satoru Takabayashi
20
- # License:: Ruby License
21
-
22
- # = Console Progress Bar
23
- #
24
- # Console::ProgressBar is a terminal-based progress bar library.
25
- #
26
- # == Usage
27
- #
28
- # pbar = ConsoleProgressBar.new( "Demo", 100 )
29
- # 100.times { pbar.inc }
30
- # pbar.finish
31
- #
32
-
33
- module Console; end
34
-
35
- class Console::ProgressBar
36
-
37
- def initialize(title, total, out = STDERR)
38
- @title = title
39
- @total = total
40
- @out = out
41
- @bar_length = 80
42
- @bar_mark = "o"
43
- @total_overflow = true
44
- @current = 0
45
- @previous = 0
46
- @is_finished = false
47
- @start_time = Time.now
48
- @format = "%-14s %3d%% %s %s"
49
- @format_arguments = [:title, :percentage, :bar, :stat]
50
- show_progress
51
- end
52
-
53
- private
54
- def convert_bytes (bytes)
55
- if bytes < 1024
56
- sprintf("%6dB", bytes)
57
- elsif bytes < 1024 * 1000 # 1000kb
58
- sprintf("%5.1fKB", bytes.to_f / 1024)
59
- elsif bytes < 1024 * 1024 * 1000 # 1000mb
60
- sprintf("%5.1fMB", bytes.to_f / 1024 / 1024)
61
- else
62
- sprintf("%5.1fGB", bytes.to_f / 1024 / 1024 / 1024)
63
- end
64
- end
65
-
66
- def transfer_rate
67
- bytes_per_second = @current.to_f / (Time.now - @start_time)
68
- sprintf("%s/s", convert_bytes(bytes_per_second))
69
- end
70
-
71
- def bytes
72
- convert_bytes(@current)
73
- end
74
-
75
- def format_time (t)
76
- t = t.to_i
77
- sec = t % 60
78
- min = (t / 60) % 60
79
- hour = t / 3600
80
- sprintf("%02d:%02d:%02d", hour, min, sec);
81
- end
82
-
83
- # ETA stands for Estimated Time of Arrival.
84
- def eta
85
- if @current == 0
86
- "ETA: --:--:--"
87
- else
88
- elapsed = Time.now - @start_time
89
- eta = elapsed * @total / @current - elapsed;
90
- sprintf("ETA: %s", format_time(eta))
91
- end
92
- end
93
-
94
- def elapsed
95
- elapsed = Time.now - @start_time
96
- sprintf("Time: %s", format_time(elapsed))
97
- end
98
-
99
- def stat
100
- if @is_finished then elapsed else eta end
101
- end
102
-
103
- def stat_for_file_transfer
104
- if @is_finished then
105
- sprintf("%s %s %s", bytes, transfer_rate, elapsed)
106
- else
107
- sprintf("%s %s %s", bytes, transfer_rate, eta)
108
- end
109
- end
110
-
111
- def eol
112
- if @is_finished then "\n" else "\r" end
113
- end
114
-
115
- def bar
116
- len = percentage * @bar_length / 100
117
- sprintf("|%s%s|", @bar_mark * len, " " * (@bar_length - len))
118
- end
119
-
120
- def percentage
121
- if @total.zero?
122
- 100
123
- else
124
- @current * 100 / @total
125
- end
126
- end
127
-
128
- def title
129
- @title[0,13] + ":"
130
- end
131
-
132
- def get_width
133
- # FIXME: I don't know how portable it is.
134
- default_width = 80
135
- begin
136
- tiocgwinsz = 0x5413
137
- data = [0, 0, 0, 0].pack("SSSS")
138
- if @out.ioctl(tiocgwinsz, data) >= 0 then
139
- rows, cols, xpixels, ypixels = data.unpack("SSSS")
140
- if cols >= 0 then cols else default_width end
141
- else
142
- default_width
143
- end
144
- rescue Exception
145
- default_width
146
- end
147
- end
148
-
149
- def show
150
- arguments = @format_arguments.map {|method| send(method) }
151
- line = sprintf(@format, *arguments)
152
-
153
- width = get_width
154
- if line.length == width - 1
155
- @out.print(line + eol)
156
- elsif line.length >= width
157
- @bar_length = [@bar_length - (line.length - width + 1), 0].max
158
- if @bar_length == 0 then @out.print(line + eol) else show end
159
- else #line.length < width - 1
160
- @bar_length += width - line.length + 1
161
- show
162
- end
163
- end
164
-
165
- def show_progress
166
- if @total.zero?
167
- cur_percentage = 100
168
- prev_percentage = 0
169
- else
170
- cur_percentage = (@current * 100 / @total).to_i
171
- prev_percentage = (@previous * 100 / @total).to_i
172
- end
173
-
174
- if cur_percentage > prev_percentage || @is_finished
175
- show
176
- end
177
- end
178
-
179
- public
180
- def file_transfer_mode
181
- @format_arguments = [:title, :percentage, :bar, :stat_for_file_transfer]
182
- end
183
-
184
- def bar_mark= (mark)
185
- @bar_mark = String(mark)[0..0]
186
- end
187
-
188
- def total_overflow= (boolv)
189
- @total_overflow = boolv ? true : false
190
- end
191
-
192
- def format= (format)
193
- @format = format
194
- end
195
-
196
- def format_arguments= (arguments)
197
- @format_arguments = arguments
198
- end
199
-
200
- def finish
201
- @current = @total
202
- @is_finished = true
203
- show_progress
204
- end
205
-
206
- def halt
207
- @is_finished = true
208
- show_progress
209
- end
210
-
211
- def set (count)
212
- if count < 0
213
- raise "invalid count less than zero: #{count}"
214
- elsif count > @total
215
- if @total_overflow
216
- @total = count + 1
217
- else
218
- raise "invalid count greater than total: #{count}"
219
- end
220
- end
221
- @current = count
222
- show_progress
223
- @previous = @current
224
- end
225
-
226
- def inc (step = 1)
227
- @current += step
228
- @current = @total if @current > @total
229
- show_progress
230
- @previous = @current
231
- end
232
-
233
- def inspect
234
- "(ProgressBar: #{@current}/#{@total})"
235
- end
236
-
237
- end
@@ -1,289 +0,0 @@
1
- #
2
- # I've striped down dependencies on Net::SSH and Facets to
3
- # stay as simple as possible.
4
- #
5
- # Original code from Assaf Arkin, released under Apache License
6
- # (http://buildr.rubyforge.org/license.html)
7
- #
8
- require 'cgi'
9
- require 'uri'
10
- require 'net/http'
11
- require 'net/https'
12
- require 'tempfile'
13
- require 'fileutils'
14
-
15
- # show progress of download
16
- require File.join(File.dirname(__FILE__), 'progressbar')
17
-
18
- # Not quite open-uri, but similar. Provides read and write methods for the resource represented by the URI.
19
- # Currently supports reads for URI::HTTP and writes for URI::SFTP. Also provides convenience methods for
20
- # downloads and uploads.
21
- module URI
22
- # Raised when trying to read/download a resource that doesn't exist.
23
- class NotFoundError < RuntimeError; end
24
-
25
- class << self
26
- # :call-seq:
27
- # read(uri, options?) => content
28
- # read(uri, options?) { |chunk| ... }
29
- #
30
- # Reads from the resource behind this URI. The first form returns the content of the resource,
31
- # the second form yields to the block with each chunk of content (usually more than one).
32
- #
33
- # For example:
34
- # File.open "image.jpg", "w" do |file|
35
- # URI.read("http://example.com/image.jpg") { |chunk| file.write chunk }
36
- # end
37
- # Shorter version:
38
- # File.open("image.jpg", "w") { |file| file.write URI.read("http://example.com/image.jpg") }
39
- #
40
- # Supported options:
41
- # * :modified -- Only download if file modified since this timestamp. Returns nil if not modified.
42
- # * :progress -- Show the progress bar while reading.
43
- def read(uri, options = nil, &block)
44
- uri = URI.parse(uri.to_s) unless URI === uri
45
- uri.read(options, &block)
46
- end
47
-
48
- # :call-seq:
49
- # download(uri, target, options?)
50
- #
51
- # Downloads the resource to the target.
52
- #
53
- # The target may be a file name (string or task), in which case the file is created from the resource.
54
- # The target may also be any object that responds to +write+, e.g. File, StringIO, Pipe.
55
- #
56
- # Use the progress bar when running in verbose mode.
57
- def download(uri, target, options = nil)
58
- uri = URI.parse(uri.to_s) unless URI === uri
59
- uri.download(target, options)
60
- end
61
-
62
- # :call-seq:
63
- # write(uri, content, options?)
64
- # write(uri, options?) { |bytes| .. }
65
- #
66
- # Writes to the resource behind the URI. The first form writes the content from a string or an object
67
- # that responds to +read+ and optionally +size+. The second form writes the content by yielding to the
68
- # block. Each yield should return up to the specified number of bytes, the last yield returns nil.
69
- #
70
- # For example:
71
- # File.open "killer-app.jar", "rb" do |file|
72
- # write("sftp://localhost/jars/killer-app.jar") { |chunk| file.read(chunk) }
73
- # end
74
- # Or:
75
- # write "sftp://localhost/jars/killer-app.jar", File.read("killer-app.jar")
76
- #
77
- # Supported options:
78
- # * :progress -- Show the progress bar while reading.
79
- def write(uri, *args, &block)
80
- uri = URI.parse(uri.to_s) unless URI === uri
81
- uri.write(*args, &block)
82
- end
83
- end
84
-
85
- class Generic
86
-
87
- # :call-seq:
88
- # read(options?) => content
89
- # read(options?) { |chunk| ... }
90
- #
91
- # Reads from the resource behind this URI. The first form returns the content of the resource,
92
- # the second form yields to the block with each chunk of content (usually more than one).
93
- #
94
- # For options, see URI::read.
95
- def read(options = nil, &block)
96
- fail "This protocol doesn't support reading (yet, how about helping by implementing it?)"
97
- end
98
-
99
- # :call-seq:
100
- # download(target, options?)
101
- #
102
- # Downloads the resource to the target.
103
- #
104
- # The target may be a file name (string or task), in which case the file is created from the resource.
105
- # The target may also be any object that responds to +write+, e.g. File, StringIO, Pipe.
106
- #
107
- # Use the progress bar when running in verbose mode.
108
- def download(target, options = {})
109
- case target
110
- when String
111
- # If download breaks we end up with a partial file which is
112
- # worse than not having a file at all, so download to temporary
113
- # file and then move over.
114
- modified = File.stat(target).mtime if File.exist?(target)
115
- temp = nil
116
- Tempfile.open(File.basename(target)) do |tf|
117
- tf.binmode
118
- read(options.merge(:modified => modified)) { |chunk| tf.write chunk }
119
- temp = tf
120
- end
121
- FileUtils.mkpath(File.dirname(target))
122
- FileUtils.move(temp.path, target)
123
- when File
124
- read(options.merge(:modified => target.mtime)) { |chunk| target.write chunk }
125
- target.flush
126
- else
127
- raise ArgumentError, "Expecting a target that is either a file name (string, task) or object that responds to write (file, pipe)." unless target.respond_to?(:write)
128
- read(options) { |chunk| target.write chunk }
129
- target.flush
130
- end
131
- end
132
-
133
- # :call-seq:
134
- # write(content, options?)
135
- # write(options?) { |bytes| .. }
136
- #
137
- # Writes to the resource behind the URI. The first form writes the content from a string or an object
138
- # that responds to +read+ and optionally +size+. The second form writes the content by yielding to the
139
- # block. Each yield should return up to the specified number of bytes, the last yield returns nil.
140
- #
141
- # For options, see URI::write.
142
- def write(*args, &block)
143
- options = args.pop if Hash === args.last
144
- options ||= {}
145
- if String === args.first
146
- ios = StringIO.new(args.first, "r")
147
- write(options.merge(:size => args.first.size)) { |bytes| ios.read(bytes) }
148
- elsif args.first.respond_to?(:read)
149
- size = args.first.size rescue nil
150
- write({ :size => size }.merge(options)) { |bytes| args.first.read(bytes) }
151
- elsif args.empty? && block
152
- write_internal(options, &block)
153
- else
154
- raise ArgumentError, "Either give me the content, or pass me a block, otherwise what would I upload?"
155
- end
156
- end
157
-
158
- protected
159
-
160
- # :call-seq:
161
- # with_progress_bar(enable, file_name, size) { |progress| ... }
162
- #
163
- # Displays a progress bar while executing the block. The first argument must be true for the
164
- # progress bar to show (TTY output also required), as a convenient for selectively using the
165
- # progress bar from a single block.
166
- #
167
- # The second argument provides a filename to display, the third its size in bytes.
168
- #
169
- # The block is yielded with a progress object that implements a single method.
170
- # Call << for each block of bytes down/uploaded.
171
- def with_progress_bar(enable, file_name, size) #:nodoc:
172
- if enable && $stdout.isatty
173
- progress_bar = Console::ProgressBar.new(file_name, size)
174
- # Extend the progress bar so we can display count/total.
175
- class << progress_bar
176
- def total()
177
- convert_bytes(@total)
178
- end
179
- end
180
- # Squeeze the filename into 30 characters.
181
- if file_name.size > 30
182
- base, ext = File.basename(file_name), File.extname(file_name)
183
- truncated = "#{base[0..26-ext.to_s.size]}..#{ext}"
184
- else
185
- truncated = file_name
186
- end
187
- progress_bar.format = "#{CGI.unescape(truncated)}: %3d%% %s %s/%s %s"
188
- progress_bar.format_arguments = [:percentage, :bar, :bytes, :total, :stat]
189
- progress_bar.bar_mark = "o"
190
-
191
- begin
192
- class << progress_bar
193
- def <<(bytes)
194
- inc bytes.respond_to?(:size) ? bytes.size : bytes
195
- end
196
- end
197
- yield progress_bar
198
- ensure
199
- progress_bar.finish
200
- end
201
- else
202
- progress_bar = Object.new
203
- class << progress_bar
204
- def <<(bytes)
205
- end
206
- end
207
- yield progress_bar
208
- end
209
- end
210
-
211
- # :call-seq:
212
- # proxy_uri() => URI?
213
- #
214
- # Returns the proxy server to use. Obtains the proxy from the relevant environment variable (e.g. HTTP_PROXY).
215
- # Supports exclusions based on host name and port number from environment variable NO_PROXY.
216
- def proxy_uri()
217
- proxy = ENV["#{scheme.upcase}_PROXY"]
218
- proxy = URI.parse(proxy) if String === proxy
219
- excludes = (ENV["NO_PROXY"] || "").split(/\s*,\s*/).compact
220
- excludes = excludes.map { |exclude| exclude =~ /:\d+$/ ? exclude : "#{exclude}:*" }
221
- return proxy unless excludes.any? { |exclude| File.fnmatch(exclude, "#{host}:#{port}") }
222
- end
223
-
224
- def write_internal(options, &block) #:nodoc:
225
- fail "This protocol doesn't support writing (yet, how about helping by implementing it?)"
226
- end
227
- end
228
-
229
- class HTTP #:nodoc:
230
-
231
- # See URI::Generic#read
232
- def read(options = nil, &block)
233
- options ||= {}
234
- connect do |http|
235
- puts "Requesting #{self}" #if verbose
236
- headers = { 'If-Modified-Since' => CGI.rfc1123_date(options[:modified].utc) } if options[:modified]
237
- request = Net::HTTP::Get.new(request_uri.empty? ? '/' : request_uri, headers)
238
- request.basic_auth self.user, self.password if self.user
239
- http.request request do |response|
240
- case response
241
- when Net::HTTPNotModified
242
- # No modification, nothing to do.
243
- puts 'Not modified since last download' #if verbose
244
- return nil
245
- when Net::HTTPRedirection
246
- # Try to download from the new URI, handle relative redirects.
247
- puts "Redirected to #{response['Location']}" #if verbose
248
- return (self + URI.parse(response['location'])).read(options, &block)
249
- when Net::HTTPOK
250
- puts "Downloading #{self}" #if verbose
251
- result = nil
252
- with_progress_bar options[:progress], path.split('/').last, response.content_length do |progress|
253
- if block
254
- response.read_body do |chunk|
255
- block.call chunk
256
- progress << chunk
257
- end
258
- else
259
- result = ''
260
- response.read_body do |chunk|
261
- result << chunk
262
- progress << chunk
263
- end
264
- end
265
- end
266
- return result
267
- when Net::HTTPNotFound
268
- raise NotFoundError, "Looking for #{self} and all I got was a 404!"
269
- else
270
- raise RuntimeError, "Failed to download #{self}: #{response.message}"
271
- end
272
- end
273
- end
274
- end
275
-
276
- private
277
-
278
- def connect
279
- if proxy = proxy_uri
280
- proxy = URI.parse(proxy) if String === proxy
281
- http = Net::HTTP.new(host, port, proxy.host, proxy.port, proxy.user, proxy.password)
282
- else
283
- http = Net::HTTP.new(host, port)
284
- end
285
- http.use_ssl = true if self.instance_of? URI::HTTPS
286
- yield http
287
- end
288
- end
289
- end
@@ -1,62 +0,0 @@
1
- require 'rbconfig'
2
-
3
- module Ruby_core_source
4
- REVISION_MAP = {
5
- 24186 => 'ruby-1.9.2-preview1',
6
- 27362 => 'ruby-1.9.2-preview3',
7
- 28524 => 'ruby-1.9.2-rc1',
8
- 28618 => 'ruby-1.9.2-rc2',
9
- 32789 => 'ruby-1.9.3-preview1',
10
- 33323 => 'ruby-1.9.3-rc1'
11
- }
12
-
13
- def self.create_makefile_with_core(hdrs, name)
14
-
15
- #
16
- # First, see if the gem already has the needed headers
17
- #
18
- if hdrs.call
19
- create_makefile(name)
20
- return true
21
- end
22
-
23
- ruby_dir = if RUBY_PATCHLEVEL < 0
24
- REVISION_MAP[RUBY_REVISION] or
25
- no_source_abort("ruby-#{RUBY_VERSION} (revision #{RUBY_REVISION})")
26
- else
27
- "ruby-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
28
- end
29
-
30
- #
31
- # Check if core headers were already downloaded; if so, use them
32
- #
33
- dest_dir = RbConfig::CONFIG["rubyhdrdir"] + "/" + ruby_dir
34
- with_cppflags("-I" + dest_dir) {
35
- if hdrs.call
36
- create_makefile(name)
37
- return true
38
- end
39
- }
40
-
41
- # Look for sources that ship with gem
42
- dest_dir = File.dirname(__FILE__) + "/debugger/ruby_core_source/#{ruby_dir}"
43
- no_source_abort(ruby_dir) unless File.directory?(dest_dir)
44
-
45
- with_cppflags("-I" + dest_dir) {
46
- if hdrs.call
47
- create_makefile(name)
48
- return true
49
- end
50
- }
51
- return false
52
- end
53
-
54
- def self.no_source_abort(ruby_version)
55
- abort <<-STR
56
- Makefile creation failed
57
- **************************************************************************
58
- No source for #{ruby_version} provided with debugger-ruby_core_source gem.
59
- **************************************************************************
60
- STR
61
- end
62
- end