Project

General

Profile

Bug #14360

Regression CSV#open method for writing from Ruby 2.4.3 to 2.5.0

Added by arturoherrero (Arturo Herrero) almost 2 years ago. Updated almost 2 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]
[ruby-core:84873]

Description

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

$ ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-darwin17]
$ 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

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]
$ 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:

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

History

Updated by shevegen (Robert A. Heiler) almost 2 years ago

This issue is also open in its repository because it's not clear to me
where is the appropriate place to open the issue

Don't worry - the tracker here is still the official bug/feature/misc
tracker for the ruby language. Github issues are secondary and often
primarily useful for patchsets/pull requests. The ruby core team often
encourages people to write an issue tracker here at bugs.ruby-lang.org
rather than just on github alone.

To the issue at hand, I know way too little to really meaningfully comment
on it but I think that this may indeed be a regression. At the least I
can not think of a deliberate change to have different behaviour there.

https://www.ruby-lang.org/en/news/2017/12/25/ruby-2-5-0-released/ does
not list any notable change in the CSV module. Possibly a test can
ensure the functionality to remain the same (if it is a regression)
in this context.

Updated by normalperson (Eric Wong) almost 2 years ago

shevegen@gmail.com wrote:

Issue #14360 has been updated by shevegen (Robert A. Heiler).

This issue is also open in its repository because it's not clear to me
where is the appropriate place to open the issue

Don't worry - the tracker here is still the official bug/feature/misc
tracker for the ruby language. Github issues are secondary and often
primarily useful for patchsets/pull requests. The ruby core team often
encourages people to write an issue tracker here at bugs.ruby-lang.org
rather than just on github alone.

doc/maintainers.rdoc points to GH. On the other hand, some
people (myself) will not depend on proprietary APIs/software
like GH, so hsbt (Hiroshi SHIBATA) or somebody else here can forward bugs to GH.

Updated by normalperson (Eric Wong) almost 2 years ago

Eric Wong normalperson@yhbt.net wrote:

doc/maintainers.rdoc points to GH.

... for the CSV gem; as parts of the stdlib are separated into
different repos.

Updated by jeremyevans0 (Jeremy Evans) almost 2 years ago

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.

Updated by arturoherrero (Arturo Herrero) almost 2 years ago

jeremyevans0 (Jeremy Evans) wrote:

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.

Thank you for clarifying this, I wasn't sure if it was intentional or not.

#6

Updated by duerst (Martin Dürst) almost 2 years ago

  • Status changed from Open to Rejected

Also available in: Atom PDF