io-wait 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e443d24e34f86142b3d27ca1a774e3828b63f445b00f94bd79273bb5583e4699
4
- data.tar.gz: 5766517962c90389a10199460414a7088b8316edaa7f0854c98ebbdfd65ec4ba
3
+ metadata.gz: 630936f8af6e2cf9265ebff0794cab1daf10048933460b71306486aecb92a85a
4
+ data.tar.gz: 153bc0301fdb8fce6f4983d45879364509bb6534a81775d98e5f61b5ffe1923e
5
5
  SHA512:
6
- metadata.gz: 526b1f255ac3a9999f9965a5ee35b4c43d32d0493bfaf2cb32e2ad8e4978f57c579574649986f6dfd77a5a2a058f7c5b2f8eaf2b83d8f31a9deac5fc24ffd55f
7
- data.tar.gz: 0424cf27d9a11aeb5dc142963073b9624e9102465cd5358d5f92b9e1cb258b2b60f224d0ef43c1d49d6156d04c0f6a8e26dcb6d339adcfab1400d7c53bd5b1b7
6
+ metadata.gz: 07e0a9997d9e8dd84368feb0fdcd681282d7c583aea8d03d90abf031d6474224aa7a6f61050de11a03750cc0e20ba5759ac4eca28aae07891a778ef82cef24c6
7
+ data.tar.gz: 7294e823b4536cded39faead19916b437e4a8a4d398e35917c81e84d4618d5f99bd414aa9f6989cfad4bfb8bf0721fb7934b083a72576a7e95a60d7fcf35e853
data/Gemfile CHANGED
@@ -2,3 +2,10 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in io-wait.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem "rake"
8
+ gem "rake-compiler"
9
+ gem "test-unit"
10
+ gem 'ruby-maven', :platforms => :jruby
11
+ end
@@ -1,20 +1,24 @@
1
1
  # frozen_string_literal: false
2
2
  require 'mkmf'
3
- target = "io/wait"
4
3
 
5
- have_func("rb_io_wait")
6
- unless macro_defined?("DOSISH", "#include <ruby.h>")
7
- have_header(ioctl_h = "sys/ioctl.h") or ioctl_h = nil
8
- fionread = %w[sys/ioctl.h sys/filio.h sys/socket.h].find do |h|
9
- have_macro("FIONREAD", [h, ioctl_h].compact)
10
- end
11
- if fionread
12
- $defs << "-DFIONREAD_HEADER=\"<#{fionread}>\""
13
- create_makefile(target)
14
- end
4
+ if RUBY_VERSION < "2.6"
5
+ File.write("Makefile", dummy_makefile($srcdir).join(""))
15
6
  else
16
- if have_func("rb_w32_ioctlsocket", "ruby.h")
17
- have_func("rb_w32_is_socket", "ruby.h")
18
- create_makefile(target)
7
+ target = "io/wait"
8
+ have_func("rb_io_wait")
9
+ unless macro_defined?("DOSISH", "#include <ruby.h>")
10
+ have_header(ioctl_h = "sys/ioctl.h") or ioctl_h = nil
11
+ fionread = %w[sys/ioctl.h sys/filio.h sys/socket.h].find do |h|
12
+ have_macro("FIONREAD", [h, ioctl_h].compact)
13
+ end
14
+ if fionread
15
+ $defs << "-DFIONREAD_HEADER=\"<#{fionread}>\""
16
+ create_makefile(target)
17
+ end
18
+ else
19
+ if have_func("rb_w32_ioctlsocket", "ruby.h")
20
+ have_func("rb_w32_is_socket", "ruby.h")
21
+ create_makefile(target)
22
+ end
19
23
  end
20
24
  end
data/ext/io/wait/wait.c CHANGED
@@ -41,22 +41,17 @@
41
41
  #endif
42
42
 
43
43
  #ifndef HAVE_RB_IO_WAIT
44
- static VALUE io_ready_p _((VALUE io));
45
- static VALUE io_wait_readable _((int argc, VALUE *argv, VALUE io));
46
- static VALUE io_wait_writable _((int argc, VALUE *argv, VALUE io));
47
- void Init_wait _((void));
48
-
49
44
  static struct timeval *
50
45
  get_timeout(int argc, VALUE *argv, struct timeval *timerec)
51
46
  {
52
47
  VALUE timeout = Qnil;
53
48
  rb_check_arity(argc, 0, 1);
54
49
  if (!argc || NIL_P(timeout = argv[0])) {
55
- return NULL;
50
+ return NULL;
56
51
  }
57
52
  else {
58
- *timerec = rb_time_interval(timeout);
59
- return timerec;
53
+ *timerec = rb_time_interval(timeout);
54
+ return timerec;
60
55
  }
61
56
  }
62
57
 
@@ -65,7 +60,7 @@ wait_for_single_fd(rb_io_t *fptr, int events, struct timeval *tv)
65
60
  {
66
61
  int i = rb_wait_for_single_fd(fptr->fd, events, tv);
67
62
  if (i < 0)
68
- rb_sys_fail(0);
63
+ rb_sys_fail(0);
69
64
  rb_io_check_closed(fptr);
70
65
  return (i & events);
71
66
  }
@@ -77,6 +72,8 @@ wait_for_single_fd(rb_io_t *fptr, int events, struct timeval *tv)
77
72
  *
78
73
  * Returns number of bytes that can be read without blocking.
79
74
  * Returns zero if no information available.
75
+ *
76
+ * You must require 'io/wait' to use this method.
80
77
  */
81
78
 
82
79
  static VALUE
@@ -98,30 +95,36 @@ io_nread(VALUE io)
98
95
 
99
96
  #ifdef HAVE_RB_IO_WAIT
100
97
  static VALUE
101
- io_wait_event(VALUE io, int event, VALUE timeout)
98
+ io_wait_event(VALUE io, int event, VALUE timeout, int return_io)
102
99
  {
103
100
  VALUE result = rb_io_wait(io, RB_INT2NUM(event), timeout);
104
101
 
105
102
  if (!RB_TEST(result)) {
106
- return Qnil;
103
+ return Qnil;
107
104
  }
108
105
 
109
106
  int mask = RB_NUM2INT(result);
110
107
 
111
108
  if (mask & event) {
112
- return io;
109
+ if (return_io)
110
+ return io;
111
+ else
112
+ return result;
113
113
  }
114
114
  else {
115
- return Qfalse;
115
+ return Qfalse;
116
116
  }
117
117
  }
118
118
  #endif
119
119
 
120
120
  /*
121
121
  * call-seq:
122
- * io.ready? -> true or false
122
+ * io.ready? -> truthy or falsy
123
+ *
124
+ * Returns a truthy value if input available without blocking, or a
125
+ * falsy value.
123
126
  *
124
- * Returns +true+ if input available without blocking, or +false+.
127
+ * You must require 'io/wait' to use this method.
125
128
  */
126
129
 
127
130
  static VALUE
@@ -137,23 +140,25 @@ io_ready_p(VALUE io)
137
140
  if (rb_io_read_pending(fptr)) return Qtrue;
138
141
 
139
142
  #ifndef HAVE_RB_IO_WAIT
140
- if (wait_for_single_fd(fptr, RB_WAITFD_IN, &tv))
141
- return Qtrue;
143
+ return wait_for_single_fd(fptr, RB_WAITFD_IN, &tv) ? Qtrue : Qfalse;
142
144
  #else
143
- if (RTEST(io_wait_event(io, RUBY_IO_READABLE, RB_INT2NUM(0))))
144
- return Qtrue;
145
+ return io_wait_event(io, RUBY_IO_READABLE, RB_INT2NUM(0), 1);
145
146
  #endif
146
- return Qfalse;
147
147
  }
148
148
 
149
+ /* Ruby 3.2+ can define these methods. This macro indicates that case. */
150
+ #ifndef RUBY_IO_WAIT_METHODS
151
+
149
152
  /*
150
153
  * call-seq:
151
- * io.wait_readable -> true or false
152
- * io.wait_readable(timeout) -> true or false
154
+ * io.wait_readable -> truthy or falsy
155
+ * io.wait_readable(timeout) -> truthy or falsy
156
+ *
157
+ * Waits until IO is readable and returns a truthy value, or a falsy
158
+ * value when times out. Returns a truthy value immediately when
159
+ * buffered data is available.
153
160
  *
154
- * Waits until IO is readable and returns +true+, or
155
- * +false+ when times out.
156
- * Returns +true+ immediately when buffered data is available.
161
+ * You must require 'io/wait' to use this method.
157
162
  */
158
163
 
159
164
  static VALUE
@@ -175,24 +180,26 @@ io_wait_readable(int argc, VALUE *argv, VALUE io)
175
180
 
176
181
  #ifndef HAVE_RB_IO_WAIT
177
182
  if (wait_for_single_fd(fptr, RB_WAITFD_IN, tv)) {
178
- return io;
183
+ return io;
179
184
  }
180
185
  return Qnil;
181
186
  #else
182
187
  rb_check_arity(argc, 0, 1);
183
188
  VALUE timeout = (argc == 1 ? argv[0] : Qnil);
184
189
 
185
- return io_wait_event(io, RUBY_IO_READABLE, timeout);
190
+ return io_wait_event(io, RUBY_IO_READABLE, timeout, 1);
186
191
  #endif
187
192
  }
188
193
 
189
194
  /*
190
195
  * call-seq:
191
- * io.wait_writable -> true or false
192
- * io.wait_writable(timeout) -> true or false
196
+ * io.wait_writable -> truthy or falsy
197
+ * io.wait_writable(timeout) -> truthy or falsy
193
198
  *
194
- * Waits until IO is writable and returns +true+ or
195
- * +false+ when times out.
199
+ * Waits until IO is writable and returns a truthy value or a falsy
200
+ * value when times out.
201
+ *
202
+ * You must require 'io/wait' to use this method.
196
203
  */
197
204
  static VALUE
198
205
  io_wait_writable(int argc, VALUE *argv, VALUE io)
@@ -209,25 +216,28 @@ io_wait_writable(int argc, VALUE *argv, VALUE io)
209
216
  #ifndef HAVE_RB_IO_WAIT
210
217
  tv = get_timeout(argc, argv, &timerec);
211
218
  if (wait_for_single_fd(fptr, RB_WAITFD_OUT, tv)) {
212
- return io;
219
+ return io;
213
220
  }
214
221
  return Qnil;
215
222
  #else
216
223
  rb_check_arity(argc, 0, 1);
217
224
  VALUE timeout = (argc == 1 ? argv[0] : Qnil);
218
225
 
219
- return io_wait_event(io, RUBY_IO_WRITABLE, timeout);
226
+ return io_wait_event(io, RUBY_IO_WRITABLE, timeout, 1);
220
227
  #endif
221
228
  }
222
229
 
223
230
  #ifdef HAVE_RB_IO_WAIT
224
231
  /*
225
232
  * call-seq:
226
- * io.wait_priority -> true or false
227
- * io.wait_priority(timeout) -> true or false
233
+ * io.wait_priority -> truthy or falsy
234
+ * io.wait_priority(timeout) -> truthy or falsy
235
+ *
236
+ * Waits until IO is priority and returns a truthy value or a falsy
237
+ * value when times out. Priority data is sent and received using
238
+ * the Socket::MSG_OOB flag and is typically limited to streams.
228
239
  *
229
- * Waits until IO is priority and returns +true+ or
230
- * +false+ when times out.
240
+ * You must require 'io/wait' to use this method.
231
241
  */
232
242
  static VALUE
233
243
  io_wait_priority(int argc, VALUE *argv, VALUE io)
@@ -242,7 +252,7 @@ io_wait_priority(int argc, VALUE *argv, VALUE io)
242
252
  rb_check_arity(argc, 0, 1);
243
253
  VALUE timeout = argc == 1 ? argv[0] : Qnil;
244
254
 
245
- return io_wait_event(io, RUBY_IO_PRIORITY, timeout);
255
+ return io_wait_event(io, RUBY_IO_PRIORITY, timeout, 1);
246
256
  }
247
257
  #endif
248
258
 
@@ -250,51 +260,65 @@ static int
250
260
  wait_mode_sym(VALUE mode)
251
261
  {
252
262
  if (mode == ID2SYM(rb_intern("r"))) {
253
- return RB_WAITFD_IN;
263
+ return RB_WAITFD_IN;
254
264
  }
255
265
  if (mode == ID2SYM(rb_intern("read"))) {
256
- return RB_WAITFD_IN;
266
+ return RB_WAITFD_IN;
257
267
  }
258
268
  if (mode == ID2SYM(rb_intern("readable"))) {
259
- return RB_WAITFD_IN;
269
+ return RB_WAITFD_IN;
260
270
  }
261
271
  if (mode == ID2SYM(rb_intern("w"))) {
262
- return RB_WAITFD_OUT;
272
+ return RB_WAITFD_OUT;
263
273
  }
264
274
  if (mode == ID2SYM(rb_intern("write"))) {
265
- return RB_WAITFD_OUT;
275
+ return RB_WAITFD_OUT;
266
276
  }
267
277
  if (mode == ID2SYM(rb_intern("writable"))) {
268
- return RB_WAITFD_OUT;
278
+ return RB_WAITFD_OUT;
269
279
  }
270
280
  if (mode == ID2SYM(rb_intern("rw"))) {
271
- return RB_WAITFD_IN|RB_WAITFD_OUT;
281
+ return RB_WAITFD_IN|RB_WAITFD_OUT;
272
282
  }
273
283
  if (mode == ID2SYM(rb_intern("read_write"))) {
274
- return RB_WAITFD_IN|RB_WAITFD_OUT;
284
+ return RB_WAITFD_IN|RB_WAITFD_OUT;
275
285
  }
276
286
  if (mode == ID2SYM(rb_intern("readable_writable"))) {
277
- return RB_WAITFD_IN|RB_WAITFD_OUT;
287
+ return RB_WAITFD_IN|RB_WAITFD_OUT;
278
288
  }
279
289
  rb_raise(rb_eArgError, "unsupported mode: %"PRIsVALUE, mode);
280
290
  return 0;
281
291
  }
282
292
 
293
+ #ifdef HAVE_RB_IO_WAIT
294
+ static inline rb_io_event_t
295
+ io_event_from_value(VALUE value)
296
+ {
297
+ int events = RB_NUM2INT(value);
298
+
299
+ if (events <= 0) rb_raise(rb_eArgError, "Events must be positive integer!");
300
+
301
+ return events;
302
+ }
303
+ #endif
304
+
283
305
  /*
284
306
  * call-seq:
285
- * io.wait(events, timeout) -> event mask or false.
286
- * io.wait(timeout = nil, mode = :read) -> event mask or false.
307
+ * io.wait(events, timeout) -> event mask, false or nil
308
+ * io.wait(timeout = nil, mode = :read) -> self, true, or false
287
309
  *
288
310
  * Waits until the IO becomes ready for the specified events and returns the
289
- * subset of events that become ready, or +false+ when times out.
311
+ * subset of events that become ready, or a falsy value when times out.
290
312
  *
291
313
  * The events can be a bit mask of +IO::READABLE+, +IO::WRITABLE+ or
292
314
  * +IO::PRIORITY+.
293
315
  *
294
- * Returns +true+ immediately when buffered data is available.
316
+ * Returns a truthy value immediately when buffered data is available.
295
317
  *
296
318
  * Optional parameter +mode+ is one of +:read+, +:write+, or
297
319
  * +:read_write+.
320
+ *
321
+ * You must require 'io/wait' to use this method.
298
322
  */
299
323
 
300
324
  static VALUE
@@ -309,61 +333,77 @@ io_wait(int argc, VALUE *argv, VALUE io)
309
333
 
310
334
  GetOpenFile(io, fptr);
311
335
  for (i = 0; i < argc; ++i) {
312
- if (SYMBOL_P(argv[i])) {
313
- event |= wait_mode_sym(argv[i]);
314
- }
315
- else {
316
- *(tv = &timerec) = rb_time_interval(argv[i]);
317
- }
336
+ if (SYMBOL_P(argv[i])) {
337
+ event |= wait_mode_sym(argv[i]);
338
+ }
339
+ else {
340
+ *(tv = &timerec) = rb_time_interval(argv[i]);
341
+ }
318
342
  }
319
343
  /* rb_time_interval() and might_mode() might convert the argument */
320
344
  rb_io_check_closed(fptr);
321
345
  if (!event) event = RB_WAITFD_IN;
322
346
  if ((event & RB_WAITFD_IN) && rb_io_read_pending(fptr))
323
- return Qtrue;
347
+ return Qtrue;
324
348
  if (wait_for_single_fd(fptr, event, tv))
325
- return io;
349
+ return io;
326
350
  return Qnil;
327
351
  #else
328
352
  VALUE timeout = Qundef;
329
353
  rb_io_event_t events = 0;
354
+ int i, return_io = 0;
330
355
 
356
+ /* The documented signature for this method is actually incorrect.
357
+ * A single timeout is allowed in any position, and multiple symbols can be given.
358
+ * Whether this is intentional or not, I don't know, and as such I consider this to
359
+ * be a legacy/slow path. */
331
360
  if (argc != 2 || (RB_SYMBOL_P(argv[0]) || RB_SYMBOL_P(argv[1]))) {
332
- for (int i = 0; i < argc; i += 1) {
333
- if (RB_SYMBOL_P(argv[i])) {
334
- events |= wait_mode_sym(argv[i]);
335
- }
336
- else if (timeout == Qundef) {
337
- rb_time_interval(timeout = argv[i]);
338
- }
339
- else {
340
- rb_raise(rb_eArgError, "timeout given more than once");
341
- }
342
- }
343
- if (timeout == Qundef) timeout = Qnil;
361
+ /* We'd prefer to return the actual mask, but this form would return the io itself: */
362
+ return_io = 1;
363
+
364
+ /* Slow/messy path: */
365
+ for (i = 0; i < argc; i += 1) {
366
+ if (RB_SYMBOL_P(argv[i])) {
367
+ events |= wait_mode_sym(argv[i]);
368
+ }
369
+ else if (timeout == Qundef) {
370
+ rb_time_interval(timeout = argv[i]);
371
+ }
372
+ else {
373
+ rb_raise(rb_eArgError, "timeout given more than once");
374
+ }
375
+ }
376
+
377
+ if (timeout == Qundef) timeout = Qnil;
378
+
379
+ if (events == 0) {
380
+ events = RUBY_IO_READABLE;
381
+ }
344
382
  }
345
- else /* argc == 2 */ {
346
- events = RB_NUM2UINT(argv[0]);
347
- timeout = argv[1];
348
- }
349
-
350
- if (events == 0) {
351
- events = RUBY_IO_READABLE;
383
+ else /* argc == 2 and neither are symbols */ {
384
+ /* This is the fast path: */
385
+ events = io_event_from_value(argv[0]);
386
+ timeout = argv[1];
352
387
  }
353
388
 
354
389
  if (events & RUBY_IO_READABLE) {
355
- rb_io_t *fptr = NULL;
356
- RB_IO_POINTER(io, fptr);
357
-
358
- if (rb_io_read_pending(fptr)) {
359
- return Qtrue;
360
- }
390
+ rb_io_t *fptr = NULL;
391
+ RB_IO_POINTER(io, fptr);
392
+
393
+ if (rb_io_read_pending(fptr)) {
394
+ /* This was the original behaviour: */
395
+ if (return_io) return Qtrue;
396
+ /* New behaviour always returns an event mask: */
397
+ else return RB_INT2NUM(RUBY_IO_READABLE);
398
+ }
361
399
  }
362
400
 
363
- return io_wait_event(io, events, timeout);
401
+ return io_wait_event(io, events, timeout, return_io);
364
402
  #endif
365
403
  }
366
404
 
405
+ #endif /* RUBY_IO_WAIT_METHODS */
406
+
367
407
  /*
368
408
  * IO wait methods
369
409
  */
@@ -378,6 +418,7 @@ Init_wait(void)
378
418
  rb_define_method(rb_cIO, "nread", io_nread, 0);
379
419
  rb_define_method(rb_cIO, "ready?", io_ready_p, 0);
380
420
 
421
+ #ifndef RUBY_IO_WAIT_METHODS
381
422
  rb_define_method(rb_cIO, "wait", io_wait, -1);
382
423
 
383
424
  rb_define_method(rb_cIO, "wait_readable", io_wait_readable, -1);
@@ -385,4 +426,5 @@ Init_wait(void)
385
426
  #ifdef HAVE_RB_IO_WAIT
386
427
  rb_define_method(rb_cIO, "wait_priority", io_wait_priority, -1);
387
428
  #endif
429
+ #endif
388
430
  }
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: io-wait
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nobu Nakada
8
+ - Charles Oliver Nutter
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2021-11-19 00:00:00.000000000 Z
12
+ date: 2022-12-16 00:00:00.000000000 Z
12
13
  dependencies: []
13
14
  description: Waits until IO is readable or writable without blocking.
14
15
  email:
15
16
  - nobu@ruby-lang.org
17
+ - headius@headius.com
16
18
  executables: []
17
19
  extensions:
18
20
  - ext/io/wait/extconf.rb
@@ -21,15 +23,9 @@ files:
21
23
  - COPYING
22
24
  - Gemfile
23
25
  - README.md
24
- - Rakefile
25
26
  - ext/io/wait/depend
26
27
  - ext/io/wait/extconf.rb
27
28
  - ext/io/wait/wait.c
28
- - io-wait.gemspec
29
- - rakelib/changelogs.rake
30
- - rakelib/epoch.rake
31
- - rakelib/sync_tool.rake
32
- - rakelib/version.rake
33
29
  homepage: https://github.com/ruby/io-wait
34
30
  licenses:
35
31
  - Ruby
@@ -45,14 +41,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
45
41
  requirements:
46
42
  - - ">="
47
43
  - !ruby/object:Gem::Version
48
- version: 2.6.0
44
+ version: '0'
49
45
  required_rubygems_version: !ruby/object:Gem::Requirement
50
46
  requirements:
51
47
  - - ">="
52
48
  - !ruby/object:Gem::Version
53
49
  version: '0'
54
50
  requirements: []
55
- rubygems_version: 3.3.0.dev
51
+ rubygems_version: 3.4.0.dev
56
52
  signing_key:
57
53
  specification_version: 4
58
54
  summary: Waits until IO is readable or writable without blocking.
data/Rakefile DELETED
@@ -1,19 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- name = "io/wait"
5
-
6
- require 'rake/extensiontask'
7
- extask = Rake::ExtensionTask.new(name) do |x|
8
- x.lib_dir << "/#{RUBY_VERSION}/#{x.platform}"
9
- end
10
- Rake::TestTask.new(:test) do |t|
11
- t.libs << extask.lib_dir
12
- t.libs << "test/lib"
13
- t.ruby_opts << "-rhelper"
14
- t.test_files = FileList["test/**/test_*.rb"]
15
- end
16
-
17
- task :test => :compile
18
-
19
- task :default => :test
data/io-wait.gemspec DELETED
@@ -1,27 +0,0 @@
1
- _VERSION = "0.2.1"
2
-
3
- Gem::Specification.new do |spec|
4
- spec.name = "io-wait"
5
- spec.version = _VERSION
6
- spec.authors = ["Nobu Nakada"]
7
- spec.email = ["nobu@ruby-lang.org"]
8
-
9
- spec.summary = %q{Waits until IO is readable or writable without blocking.}
10
- spec.description = %q{Waits until IO is readable or writable without blocking.}
11
- spec.homepage = "https://github.com/ruby/io-wait"
12
- spec.licenses = ["Ruby", "BSD-2-Clause"]
13
- spec.required_ruby_version = Gem::Requirement.new(">= 2.6.0")
14
-
15
- spec.metadata["homepage_uri"] = spec.homepage
16
- spec.metadata["source_code_uri"] = spec.homepage
17
-
18
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
19
- `git ls-files -z`.split("\x0").reject do |f|
20
- f.match(%r{\A(?:test|spec|features)/|\A\.(?:git|travis)})
21
- end
22
- end
23
- spec.extensions = %w[ext/io/wait/extconf.rb]
24
- spec.bindir = "exe"
25
- spec.executables = []
26
- spec.require_paths = ["lib"]
27
- end
@@ -1,34 +0,0 @@
1
- task "build" => "changelogs"
2
-
3
- changelog = proc do |output, ver = nil, prev = nil|
4
- ver &&= Gem::Version.new(ver)
5
- range = [[prev], [ver, "HEAD"]].map {|ver, branch| ver ? "v#{ver.to_s}" : branch}.compact.join("..")
6
- IO.popen(%W[git log --format=fuller --topo-order --no-merges #{range}]) do |log|
7
- line = log.gets
8
- FileUtils.mkpath(File.dirname(output))
9
- File.open(output, "wb") do |f|
10
- f.print "-*- coding: utf-8 -*-\n\n", line
11
- log.each_line do |line|
12
- line.sub!(/^(?!:)(?:Author|Commit)?(?:Date)?: /, ' \&')
13
- line.sub!(/ +$/, '')
14
- f.print(line)
15
- end
16
- end
17
- end
18
- end
19
-
20
- tags = IO.popen(%w[git tag -l v[0-9]*]).grep(/v(.*)/) {$1}
21
- tags.sort_by! {|tag| tag.scan(/\d+/).map(&:to_i)}
22
- tags.inject(nil) do |prev, tag|
23
- task("logs/ChangeLog-#{tag}") {|t| changelog[t.name, tag, prev]}
24
- tag
25
- end
26
-
27
- desc "Make ChangeLog"
28
- task "ChangeLog", [:ver, :prev] do |t, ver: nil, prev: tags.last|
29
- changelog[t.name, ver, prev]
30
- end
31
-
32
- changelogs = ["ChangeLog", *tags.map {|tag| "logs/ChangeLog-#{tag}"}]
33
- task "changelogs" => changelogs
34
- CLOBBER.concat(changelogs) << "logs"
data/rakelib/epoch.rake DELETED
@@ -1,5 +0,0 @@
1
- task "build" => "date_epoch"
2
-
3
- task "date_epoch" do
4
- ENV["SOURCE_DATE_EPOCH"] = IO.popen(%W[git -C #{__dir__} log -1 --format=%ct], &:read).chomp
5
- end
@@ -1,6 +0,0 @@
1
- task :sync_tool do
2
- require 'fileutils'
3
- FileUtils.cp "../ruby/tool/lib/core_assertions.rb", "./test/lib"
4
- FileUtils.cp "../ruby/tool/lib/envutil.rb", "./test/lib"
5
- FileUtils.cp "../ruby/tool/lib/find_executable.rb", "./test/lib"
6
- end
data/rakelib/version.rake DELETED
@@ -1,44 +0,0 @@
1
- class << (helper = Bundler::GemHelper.instance)
2
- def update_gemspec
3
- path = gemspec.loaded_from
4
- File.open(path, "r+b") do |f|
5
- d = f.read
6
- if d.sub!(/^(_VERSION\s*=\s*)".*"/) {$1 + gemspec.version.to_s.dump}
7
- f.rewind
8
- f.truncate(0)
9
- f.print(d)
10
- end
11
- end
12
- end
13
-
14
- def commit_bump
15
- sh(%W[git commit -m bump\ up\ to\ #{gemspec.version}
16
- #{gemspec.loaded_from}])
17
- end
18
-
19
- def version=(v)
20
- gemspec.version = v
21
- update_gemspec
22
- commit_bump
23
- end
24
- end
25
-
26
- major, minor, teeny = helper.gemspec.version.segments
27
-
28
- task "bump:teeny" do
29
- helper.version = Gem::Version.new("#{major}.#{minor}.#{teeny+1}")
30
- end
31
-
32
- task "bump:minor" do
33
- helper.version = Gem::Version.new("#{major}.#{minor+1}.0")
34
- end
35
-
36
- task "bump:major" do
37
- helper.version = Gem::Version.new("#{major+1}.0.0")
38
- end
39
-
40
- task "bump" => "bump:teeny"
41
-
42
- task "tag" do
43
- helper.__send__(:tag_version)
44
- end