[#84867] [Ruby trunk Bug#14357] thread_safe tests suite segfaults — v.ondruch@...

Issue #14357 has been reported by vo.x (Vit Ondruch).

11 messages 2018/01/15
[#85364] Re: [Ruby trunk Bug#14357] thread_safe tests suite segfaults — Eric Wong <normalperson@...> 2018/02/03

v.ondruch@tiscali.cz wrote:

[#84980] [Ruby trunk Feature#13618][Assigned] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid — hsbt@...

Issue #13618 has been updated by hsbt (Hiroshi SHIBATA).

10 messages 2018/01/23
[#85012] Re: [Ruby trunk Feature#13618][Assigned] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid — Eric Wong <normalperson@...> 2018/01/23

hsbt@ruby-lang.org wrote:

[ruby-core:84878] [Ruby trunk Bug#14360] Regression CSV#open method for writing from Ruby 2.4.3 to 2.5.0

From: merch-redmine@...
Date: 2018-01-15 17:51:49 UTC
List: ruby-core #84878
Issue #14360 has been updated by jeremyevans0 (Jeremy Evans).


This isn't a regression, it's an intentional bug fix.  If you tell it to write the headers, it should write the headers even if there are no rows.  See #9988 and r59640.  If someone really wants the old broken behavior, maybe we can add a `write_headers: :unless_empty` option or something similar that only writes headers if there are rows.

----------------------------------------
Bug #14360: Regression CSV#open method for writing from Ruby 2.4.3 to 2.5.0
https://bugs.ruby-lang.org/issues/14360#change-69586

* Author: arturoherrero (Arturo Herrero)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
I have noticed a different behaviour between Ruby <= 2.4.3 and Ruby 2.5.0 for the `#open` method.

This issue is also open in its repository because it's not clear to me where is the appropriate place to open the issue, https://github.com/ruby/csv/issues/17

If you create an empty file for writing and you are not writing any line in that CSV file, Ruby <= 2.4.3 doesn't write anything (an empty file) but Ruby 2.5.0 writes the headers.

### Ruby <= 2.4.3
```shell
$ ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-darwin17]
```

```ruby
$ irb
irb(main):001:0> require "csv"
=> true
irb(main):002:0> CSV.open("ruby-2.4.3.csv", "wb", headers: ["name", "surname"], write_headers: true) { }
=> nil
irb(main):003:0> `cat ruby-2.4.3.csv`
=> ""
```


### Ruby 2.5.0
```shell
$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]
```

```ruby
$ irb
irb(main):001:0> require "csv"
=> true
irb(main):002:0> CSV.open("ruby-2.5.0.csv", "wb", headers: ["name", "surname"], write_headers: true) { }
=> nil
irb(main):003:0> `cat ruby-2.5.0.csv`
=> "name,surname\n"
```

---

In the examples, I'm using an empty block but in a real application probably you will have an `if` statement, something like this:

```ruby
CSV.open(...) do |csv|
  csv << "hello" if condition
end
```



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next