curb 0.7.16 → 0.7.17
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.
- data/Rakefile +1 -1
- data/ext/curb.c +12 -3
- data/ext/curb.h +3 -3
- data/ext/curb_easy.c +11 -9
- data/ext/curb_multi.c +37 -6
- data/ext/extconf.rb +9 -0
- data/tests/{bug_crash_on_debug.rb → bug_crash_on_progress.rb} +2 -2
- data/tests/tc_curl_easy.rb +11 -4
- metadata +44 -28
data/Rakefile
CHANGED
data/ext/curb.c
CHANGED
@@ -363,12 +363,24 @@ void Init_curb_core() {
|
|
363
363
|
CURB_DEFINE(CURLOPT_READDATA);
|
364
364
|
CURB_DEFINE(CURLOPT_IOCTLFUNCTION);
|
365
365
|
CURB_DEFINE(CURLOPT_IOCTLDATA);
|
366
|
+
#if HAVE_CURLOPT_SEEKFUNCTION
|
366
367
|
CURB_DEFINE(CURLOPT_SEEKFUNCTION);
|
368
|
+
#endif
|
369
|
+
#if HAVE_CURLOPT_SEEKDATA
|
367
370
|
CURB_DEFINE(CURLOPT_SEEKDATA);
|
371
|
+
#endif
|
372
|
+
#if HAVE_CURLOPT_SOCKOPTFUNCTION
|
368
373
|
CURB_DEFINE(CURLOPT_SOCKOPTFUNCTION);
|
374
|
+
#endif
|
375
|
+
#if HAVE_CURLOPT_SOCKOPTDATA
|
369
376
|
CURB_DEFINE(CURLOPT_SOCKOPTDATA);
|
377
|
+
#endif
|
378
|
+
#if HAVE_CURLOPT_OPENSOCKETFUNCTION
|
370
379
|
CURB_DEFINE(CURLOPT_OPENSOCKETFUNCTION);
|
380
|
+
#endif
|
381
|
+
#if HAVE_CURLOPT_OPENSOCKETDATA
|
371
382
|
CURB_DEFINE(CURLOPT_OPENSOCKETDATA);
|
383
|
+
#endif
|
372
384
|
CURB_DEFINE(CURLOPT_PROGRESSFUNCTION);
|
373
385
|
CURB_DEFINE(CURLOPT_PROGRESSDATA);
|
374
386
|
CURB_DEFINE(CURLOPT_HEADERFUNCTION);
|
@@ -838,9 +850,6 @@ void Init_curb_core() {
|
|
838
850
|
#if HAVE_CURLOPT_SSLVERSION
|
839
851
|
CURB_DEFINE(CURLOPT_SSLVERSION);
|
840
852
|
#endif
|
841
|
-
#if HAVE_CURL_SSLVERSION_DEFAULT
|
842
|
-
CURB_DEFINE(CURL_SSLVERSION_DEFAULT);
|
843
|
-
#endif
|
844
853
|
#if HAVE_CURL_SSLVERSION_TLSv1
|
845
854
|
CURB_DEFINE(CURL_SSLVERSION_TLSv1);
|
846
855
|
#endif
|
data/ext/curb.h
CHANGED
@@ -20,12 +20,12 @@
|
|
20
20
|
#include "curb_macros.h"
|
21
21
|
|
22
22
|
// These should be managed from the Rake 'release' task.
|
23
|
-
#define CURB_VERSION "0.7.
|
24
|
-
#define CURB_VER_NUM
|
23
|
+
#define CURB_VERSION "0.7.17"
|
24
|
+
#define CURB_VER_NUM 717
|
25
25
|
#define CURB_VER_MAJ 0
|
26
26
|
#define CURB_VER_MIN 7
|
27
27
|
#define CURB_VER_MIC 1
|
28
|
-
#define CURB_VER_PATCH
|
28
|
+
#define CURB_VER_PATCH 7
|
29
29
|
|
30
30
|
|
31
31
|
// Maybe not yet defined in Ruby
|
data/ext/curb_easy.c
CHANGED
@@ -54,7 +54,7 @@ static size_t read_data_handler(void *ptr,
|
|
54
54
|
/* copy read_bytes from stream into ptr */
|
55
55
|
VALUE str = rb_funcall(stream, rb_intern("read"), 1, rb_int_new(read_bytes) );
|
56
56
|
if( str != Qnil ) {
|
57
|
-
memcpy(ptr,
|
57
|
+
memcpy(ptr, StringValueCStr(str), RSTRING_LEN(str));
|
58
58
|
return RSTRING_LEN(str);
|
59
59
|
}
|
60
60
|
else {
|
@@ -71,7 +71,7 @@ static size_t read_data_handler(void *ptr,
|
|
71
71
|
str = rb_funcall(stream, rb_intern("to_s"), 0);
|
72
72
|
len = RSTRING_LEN(str);
|
73
73
|
remaining = len - rbcu->offset;
|
74
|
-
str_ptr =
|
74
|
+
str_ptr = StringValueCStr(str);
|
75
75
|
|
76
76
|
if( remaining < read_bytes ) {
|
77
77
|
if( remaining > 0 ) {
|
@@ -157,11 +157,13 @@ static int proc_debug_handler(CURL *curl,
|
|
157
157
|
char *data,
|
158
158
|
size_t data_len,
|
159
159
|
VALUE proc) {
|
160
|
+
VALUE procret;
|
160
161
|
VALUE callargs = rb_ary_new2(3);
|
161
162
|
rb_ary_store(callargs, 0, proc);
|
162
163
|
rb_ary_store(callargs, 1, INT2FIX(type));
|
163
164
|
rb_ary_store(callargs, 2, rb_str_new(data, data_len));
|
164
165
|
rb_rescue(call_debug_handler, callargs, callback_exception, Qnil);
|
166
|
+
// XXX: no way to indicate to libcurl that we should break out given an exception in the on_debug handler... this means exceptions will be swallowed
|
165
167
|
//rb_funcall(proc, idCall, 2, INT2FIX(type), rb_str_new(data, data_len));
|
166
168
|
return 0;
|
167
169
|
}
|
@@ -222,7 +224,7 @@ static void ruby_curl_easy_zero(ruby_curl_easy *rbce) {
|
|
222
224
|
rbce->proxy_tunnel = 0;
|
223
225
|
rbce->fetch_file_time = 0;
|
224
226
|
rbce->ssl_verify_peer = 1;
|
225
|
-
rbce->ssl_verify_host =
|
227
|
+
rbce->ssl_verify_host = 2;
|
226
228
|
rbce->header_in_body = 0;
|
227
229
|
rbce->use_netrc = 0;
|
228
230
|
rbce->follow_location = 0;
|
@@ -1957,12 +1959,12 @@ VALUE ruby_curl_easy_setup( ruby_curl_easy *rbce ) {
|
|
1957
1959
|
curl_easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, rbce->proxy_tunnel);
|
1958
1960
|
curl_easy_setopt(curl, CURLOPT_FILETIME, rbce->fetch_file_time);
|
1959
1961
|
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, rbce->ssl_verify_peer);
|
1960
|
-
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, rbce->
|
1962
|
+
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, rbce->ssl_verify_host);
|
1961
1963
|
|
1962
1964
|
if ((rbce->use_netrc != Qnil) && (rbce->use_netrc != Qfalse)) {
|
1963
|
-
curl_easy_setopt(curl,
|
1965
|
+
curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
|
1964
1966
|
} else {
|
1965
|
-
curl_easy_setopt(curl,
|
1967
|
+
curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_IGNORED);
|
1966
1968
|
}
|
1967
1969
|
|
1968
1970
|
curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, rbce->unrestricted_auth);
|
@@ -2233,11 +2235,11 @@ static VALUE ruby_curl_easy_perform_delete(VALUE self) {
|
|
2233
2235
|
static VALUE ruby_curl_easy_perform_verb(VALUE self, VALUE verb) {
|
2234
2236
|
VALUE str_verb;
|
2235
2237
|
if (rb_type(verb) == T_STRING) {
|
2236
|
-
return ruby_curl_easy_perform_verb_str(self,
|
2238
|
+
return ruby_curl_easy_perform_verb_str(self, StringValueCStr(verb));
|
2237
2239
|
}
|
2238
2240
|
else if (rb_respond_to(verb,rb_intern("to_s"))) {
|
2239
2241
|
str_verb = rb_funcall(verb, rb_intern("to_s"), 0);
|
2240
|
-
return ruby_curl_easy_perform_verb_str(self,
|
2242
|
+
return ruby_curl_easy_perform_verb_str(self, StringValueCStr(str_verb));
|
2241
2243
|
}
|
2242
2244
|
else {
|
2243
2245
|
rb_raise(rb_eRuntimeError, "Invalid HTTP VERB, must response to 'to_s'");
|
@@ -3106,7 +3108,7 @@ static VALUE ruby_curl_easy_inspect(VALUE self) {
|
|
3106
3108
|
size_t len = 13+((RSTRING_LEN(url) > 50) ? 50 : RSTRING_LEN(url));
|
3107
3109
|
/* "#<Net::HTTP http://www.google.com/:80 open=false>" */
|
3108
3110
|
memcpy(buf,"#<Curl::Easy ", 13);
|
3109
|
-
memcpy(buf+13,
|
3111
|
+
memcpy(buf+13,StringValueCStr(url), (len - 13));
|
3110
3112
|
buf[len++] = '>';
|
3111
3113
|
return rb_str_new(buf,len);
|
3112
3114
|
}
|
data/ext/curb_multi.c
CHANGED
@@ -332,7 +332,7 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
|
|
332
332
|
long response_code = -1;
|
333
333
|
VALUE easy;
|
334
334
|
ruby_curl_easy *rbce = NULL;
|
335
|
-
VALUE callargs;
|
335
|
+
VALUE callargs, val = Qtrue;
|
336
336
|
|
337
337
|
CURLcode ecode = curl_easy_getinfo(easy_handle, CURLINFO_PRIVATE, (char**)&easy);
|
338
338
|
|
@@ -354,7 +354,7 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
|
|
354
354
|
|
355
355
|
if (!rb_easy_nil("complete_proc")) {
|
356
356
|
callargs = rb_ary_new3(2, rb_easy_get("complete_proc"), easy);
|
357
|
-
rb_rescue(call_status_handler1, callargs, callback_exception, Qnil);
|
357
|
+
val = rb_rescue(call_status_handler1, callargs, callback_exception, Qnil);
|
358
358
|
//rb_funcall( rb_easy_get("complete_proc"), idCall, 1, easy );
|
359
359
|
}
|
360
360
|
|
@@ -363,7 +363,7 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
|
|
363
363
|
if (result != 0) {
|
364
364
|
if (!rb_easy_nil("failure_proc")) {
|
365
365
|
callargs = rb_ary_new3(3, rb_easy_get("failure_proc"), easy, rb_curl_easy_error(result));
|
366
|
-
rb_rescue(call_status_handler2, callargs, callback_exception, Qnil);
|
366
|
+
val = rb_rescue(call_status_handler2, callargs, callback_exception, Qnil);
|
367
367
|
//rb_funcall( rb_easy_get("failure_proc"), idCall, 2, easy, rb_curl_easy_error(result) );
|
368
368
|
}
|
369
369
|
}
|
@@ -371,16 +371,22 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
|
|
371
371
|
((response_code >= 200 && response_code < 300) || response_code == 0)) {
|
372
372
|
/* NOTE: we allow response_code == 0, in the case of non http requests e.g. reading from disk */
|
373
373
|
callargs = rb_ary_new3(2, rb_easy_get("success_proc"), easy);
|
374
|
-
rb_rescue(call_status_handler1, callargs, callback_exception, Qnil);
|
374
|
+
val = rb_rescue(call_status_handler1, callargs, callback_exception, Qnil);
|
375
375
|
//rb_funcall( rb_easy_get("success_proc"), idCall, 1, easy );
|
376
376
|
}
|
377
377
|
else if (!rb_easy_nil("failure_proc") &&
|
378
378
|
(response_code >= 300 && response_code <= 999)) {
|
379
379
|
callargs = rb_ary_new3(3, rb_easy_get("failure_proc"), easy, rb_curl_easy_error(result));
|
380
|
-
rb_rescue(call_status_handler2, callargs, callback_exception, Qnil);
|
380
|
+
val = rb_rescue(call_status_handler2, callargs, callback_exception, Qnil);
|
381
381
|
//rb_funcall( rb_easy_get("failure_proc"), idCall, 2, easy, rb_curl_easy_error(result) );
|
382
382
|
}
|
383
383
|
|
384
|
+
if (val == Qfalse) {
|
385
|
+
rb_warn("uncaught exception from callback");
|
386
|
+
// exception was raised?
|
387
|
+
//fprintf(stderr, "exception raised from callback\n");
|
388
|
+
}
|
389
|
+
|
384
390
|
}
|
385
391
|
|
386
392
|
static void rb_curl_multi_read_info(VALUE self, CURLM *multi_handle) {
|
@@ -443,6 +449,20 @@ void cleanup_crt_fd(fd_set *os_set, fd_set *crt_set)
|
|
443
449
|
}
|
444
450
|
#endif
|
445
451
|
|
452
|
+
#ifdef HAVE_RB_THREAD_BLOCKING_REGION
|
453
|
+
struct _select_set {
|
454
|
+
int maxfd;
|
455
|
+
fd_set *fdread, *fdwrite, *fdexcep;
|
456
|
+
struct timeval *tv;
|
457
|
+
};
|
458
|
+
|
459
|
+
static VALUE curb_select(void *args) {
|
460
|
+
struct _select_set* set = args;
|
461
|
+
int rc = select(set->maxfd, set->fdread, set->fdwrite, set->fdexcep, set->tv);
|
462
|
+
return INT2FIX(rc);
|
463
|
+
}
|
464
|
+
#endif
|
465
|
+
|
446
466
|
/*
|
447
467
|
* call-seq:
|
448
468
|
* multi = Curl::Multi.new
|
@@ -466,10 +486,12 @@ VALUE ruby_curl_multi_perform(int argc, VALUE *argv, VALUE self) {
|
|
466
486
|
#ifdef _WIN32
|
467
487
|
fd_set crt_fdread, crt_fdwrite, crt_fdexcep;
|
468
488
|
#endif
|
469
|
-
|
470
489
|
long timeout_milliseconds;
|
471
490
|
struct timeval tv = {0, 0};
|
472
491
|
VALUE block = Qnil;
|
492
|
+
#ifdef HAVE_RB_THREAD_BLOCKING_REGION
|
493
|
+
struct _select_set fdset_args;
|
494
|
+
#endif
|
473
495
|
|
474
496
|
rb_scan_args(argc, argv, "0&", &block);
|
475
497
|
|
@@ -526,7 +548,16 @@ VALUE ruby_curl_multi_perform(int argc, VALUE *argv, VALUE self) {
|
|
526
548
|
create_crt_fd(&fdexcep, &crt_fdexcep);
|
527
549
|
#endif
|
528
550
|
|
551
|
+
#ifdef HAVE_RB_THREAD_BLOCKING_REGION
|
552
|
+
fdset_args.maxfd = maxfd+1;
|
553
|
+
fdset_args.fdread = &fdread;
|
554
|
+
fdset_args.fdwrite = &fdwrite;
|
555
|
+
fdset_args.fdexcep = &fdexcep;
|
556
|
+
fdset_args.tv = &tv;
|
557
|
+
rc = rb_thread_blocking_region(curb_select, &fdset_args, RUBY_UBF_IO, 0);
|
558
|
+
#else
|
529
559
|
rc = rb_thread_select(maxfd+1, &fdread, &fdwrite, &fdexcep, &tv);
|
560
|
+
#endif
|
530
561
|
|
531
562
|
#ifdef _WIN32
|
532
563
|
cleanup_crt_fd(&fdread, &crt_fdread);
|
data/ext/extconf.rb
CHANGED
@@ -101,6 +101,13 @@ have_constant "curle_login_denied"
|
|
101
101
|
# older than 7.16.3
|
102
102
|
have_constant "curlmopt_maxconnects"
|
103
103
|
|
104
|
+
have_constant "curlopt_seekfunction"
|
105
|
+
have_constant "curlopt_seekdata"
|
106
|
+
have_constant "curlopt_sockoptfunction"
|
107
|
+
have_constant "curlopt_sockoptdata"
|
108
|
+
have_constant "curlopt_opensocketfunction"
|
109
|
+
have_constant "curlopt_opensocketdata"
|
110
|
+
|
104
111
|
# additional consts
|
105
112
|
have_constant "curle_conv_failed"
|
106
113
|
have_constant "curle_conv_reqd"
|
@@ -381,5 +388,7 @@ test_for("curl_easy_escape", "CURL_EASY_ESCAPE", %{
|
|
381
388
|
}
|
382
389
|
})
|
383
390
|
|
391
|
+
have_func('rb_thread_blocking_region')
|
392
|
+
|
384
393
|
create_header('curb_config.h')
|
385
394
|
create_makefile('curb_core')
|
@@ -20,14 +20,14 @@ class BugCrashOnDebug < Test::Unit::TestCase
|
|
20
20
|
c.on_progress do|x|
|
21
21
|
raise "error"
|
22
22
|
end
|
23
|
-
c.easy.on_debug { |type, data| puts "debug: #{type.inspect}, #{data.inspect}" }
|
24
23
|
c.perform
|
25
24
|
|
25
|
+
assert false, "should not reach this point"
|
26
|
+
|
26
27
|
rescue => e
|
27
28
|
assert_equal 'Curl::Err::AbortedByCallbackError', e.class.to_s
|
28
29
|
c.close
|
29
30
|
ensure
|
30
|
-
puts "shutdown server"
|
31
31
|
server.shutdown
|
32
32
|
end
|
33
33
|
end
|
data/tests/tc_curl_easy.rb
CHANGED
@@ -918,24 +918,31 @@ class TestCurbCurlEasy < Test::Unit::TestCase
|
|
918
918
|
assert_equal multi, easy.multi
|
919
919
|
end
|
920
920
|
|
921
|
-
def
|
921
|
+
def test_raise_on_progress
|
922
922
|
c = Curl::Easy.new($TEST_URL)
|
923
|
-
c.on_progress {|x| raise "error" }
|
923
|
+
c.on_progress {|w,x,y,z| raise "error" }
|
924
924
|
c.perform
|
925
925
|
rescue => e
|
926
926
|
assert_equal 'Curl::Err::AbortedByCallbackError', e.class.to_s
|
927
927
|
c.close
|
928
928
|
end
|
929
929
|
|
930
|
-
def
|
930
|
+
def test_raise_on_success
|
931
931
|
c = Curl::Easy.new($TEST_URL)
|
932
|
-
c.
|
932
|
+
c.on_success {|x| raise "error" }
|
933
933
|
c.perform
|
934
934
|
rescue => e
|
935
935
|
assert_equal 'Curl::Err::AbortedByCallbackError', e.class.to_s
|
936
936
|
c.close
|
937
937
|
end
|
938
938
|
|
939
|
+
def test_raise_on_debug
|
940
|
+
c = Curl::Easy.new($TEST_URL)
|
941
|
+
c.on_debug { raise "error" }
|
942
|
+
c.perform
|
943
|
+
assert true, "raise in on debug has no effect"
|
944
|
+
end
|
945
|
+
|
939
946
|
include TestServerMethods
|
940
947
|
|
941
948
|
def setup
|
metadata
CHANGED
@@ -1,28 +1,35 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: curb
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 33
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 7
|
9
|
+
- 17
|
10
|
+
version: 0.7.17
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Ross Bamford
|
9
14
|
- Todd A. Fisher
|
10
15
|
autorequire:
|
11
16
|
bindir: bin
|
12
17
|
cert_chain: []
|
13
|
-
|
18
|
+
|
19
|
+
date: 2012-01-09 00:00:00 -05:00
|
20
|
+
default_executable:
|
14
21
|
dependencies: []
|
15
|
-
|
16
|
-
|
17
|
-
libcurl live at http://curl.haxx.se/
|
22
|
+
|
23
|
+
description: Curb (probably CUrl-RuBy or something) provides Ruby-language bindings for the libcurl(3), a fully-featured client-side URL transfer library. cURL and libcurl live at http://curl.haxx.se/
|
18
24
|
email: todd.fisher@gmail.com
|
19
25
|
executables: []
|
20
|
-
|
26
|
+
|
27
|
+
extensions:
|
21
28
|
- ext/extconf.rb
|
22
|
-
extra_rdoc_files:
|
29
|
+
extra_rdoc_files:
|
23
30
|
- LICENSE
|
24
31
|
- README
|
25
|
-
files:
|
32
|
+
files:
|
26
33
|
- LICENSE
|
27
34
|
- README
|
28
35
|
- Rakefile
|
@@ -46,7 +53,7 @@ files:
|
|
46
53
|
- ext/curb_postfield.h
|
47
54
|
- ext/curb_upload.h
|
48
55
|
- tests/alltests.rb
|
49
|
-
- tests/
|
56
|
+
- tests/bug_crash_on_progress.rb
|
50
57
|
- tests/bug_curb_easy_blocks_ruby_threads.rb
|
51
58
|
- tests/bug_curb_easy_post_with_string_no_content_length_header.rb
|
52
59
|
- tests/bug_instance_post_differs_from_class_post.rb
|
@@ -66,36 +73,45 @@ files:
|
|
66
73
|
- tests/timeout.rb
|
67
74
|
- tests/timeout_server.rb
|
68
75
|
- tests/unittests.rb
|
76
|
+
has_rdoc: true
|
69
77
|
homepage: http://curb.rubyforge.org/
|
70
78
|
licenses: []
|
79
|
+
|
71
80
|
post_install_message:
|
72
|
-
rdoc_options:
|
81
|
+
rdoc_options:
|
73
82
|
- --main
|
74
83
|
- README
|
75
|
-
require_paths:
|
84
|
+
require_paths:
|
76
85
|
- lib
|
77
86
|
- ext
|
78
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
88
|
none: false
|
80
|
-
requirements:
|
81
|
-
- -
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
|
84
|
-
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 3
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
version: "0"
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
97
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
hash: 3
|
102
|
+
segments:
|
103
|
+
- 0
|
104
|
+
version: "0"
|
90
105
|
requirements: []
|
106
|
+
|
91
107
|
rubyforge_project: curb
|
92
|
-
rubygems_version: 1.
|
108
|
+
rubygems_version: 1.3.7
|
93
109
|
signing_key:
|
94
110
|
specification_version: 3
|
95
111
|
summary: Ruby libcurl bindings
|
96
|
-
test_files:
|
112
|
+
test_files:
|
97
113
|
- tests/alltests.rb
|
98
|
-
- tests/
|
114
|
+
- tests/bug_crash_on_progress.rb
|
99
115
|
- tests/bug_curb_easy_blocks_ruby_threads.rb
|
100
116
|
- tests/bug_curb_easy_post_with_string_no_content_length_header.rb
|
101
117
|
- tests/bug_instance_post_differs_from_class_post.rb
|