-
Notifications
You must be signed in to change notification settings - Fork 29.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fs: Fix default params for fs.write #7856
fs: Fix default params for fs.write #7856
Conversation
fs.write(fd, | ||
Buffer.from('hello'), | ||
3, | ||
common.mustCall(function(err, written) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks a bit hectic. What about moving this common.mustCall(...)
to a variable and passing that as the fourth argument instead? That way the fs.write()
fits all on one line.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems like I copy/pasted from a very old version of the https://github.com/nodejs/node/blob/master/test/parallel/test-fs-buffer.js test. Will try to fix it up.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://github.com/nodejs/node/blob/master/test/parallel/test-fs-write-buffer.js, actually, and that's still just as messy :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps, but let's not continue that trend ;-)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed. Fixed in c9d7a77
In both tests I had to keep the definition of cb
inside the other callback because it references fd
in fs.closeSync(fd);
.
Any reason the tests are in |
@mscdex Not a good one, no. I just misunderstood the sequential vs. parallel classification. Moved them to |
common.refreshTmpDir(); | ||
|
||
fs.open(filename, 'w', 0o644, common.mustCall(function(err, fd) { | ||
if (err) throw err; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can use assert.ifError
Fixed the nits, including the test that I copied from. Also fixed |
|
||
var found = fs.readFileSync(filename, 'utf8'); | ||
assert.deepStrictEqual(expected.toString(), found); | ||
fs.unlinkSync(filename); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why removing this line?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@thefourtheye suggested that: #7856 (comment)
Question for @nodejs/ctc : is this a patch or a semver-minor? |
} | ||
if (typeof length !== 'number') { | ||
length = buffer.length - offset; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The comment at the top of the function does not match public documentation. Mind fixing that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure thing, fixed in 4062d4cf. I changed both the comment and the documentation to match the implementation.
While doing the review I realized that our documented API doesn't come close to following current implementation. For example, There is a deeper issue that needs to be fixed. This PR does help bring it closer to compliance to public docs, but is only a superficial fix. I'm fine with this landing, but there should be a follow-up PR that fixes things all the way down. @jasnell Technically a patch since it aligns implementation closer to documentation, and it shouldn't introduce any regressions. |
@trevnorris +1 |
8a81850
to
984cd0b
Compare
Squashed and rebased on master as conflicts had been introduced. The code that works out the default values of the default parameters for I believe this work is finished and ready to land now, but let me know if you have any feedback, especially about the code that sets the default parameters and finds the callback. |
I will land this |
Add support for fs.write(fd, buffer, cb) and fs.write(fd, buffer, offset, cb) as documented at https://nodejs.org/api/fs.html#fs_fs_write_fd_data_position_encoding_callback and equivalently for fs.writeSync Update docs and code comments to reflect the implementation. PR-URL: nodejs#7856 Reviewed-By: Sam Roberts <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Brian White <[email protected]> Reviewed-By: Yorkie Liu <[email protected]> Reviewed-By: Gibson Fahnestock <[email protected]>
Landed in 0b5191f, thanks @papandreou |
Add support for fs.write(fd, buffer, cb) and fs.write(fd, buffer, offset, cb) as documented at https://nodejs.org/api/fs.html#fs_fs_write_fd_data_position_encoding_callback and equivalently for fs.writeSync Update docs and code comments to reflect the implementation. PR-URL: #7856 Reviewed-By: Sam Roberts <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Brian White <[email protected]> Reviewed-By: Yorkie Liu <[email protected]> Reviewed-By: Gibson Fahnestock <[email protected]>
added lts labels. Is this going to be reverted as per #10242? |
It sounds like this is a minor behavioural change, where the previous code didn't do exactly what the docs said. Given that this was reported as an issue in Thoughts @nodejs/lts ? |
|
@sam-github, no, I can't think of any negative side effects of backporting, especially now that it has been on v7 for a while without causing any problems. To my knowledge the change in behavior has only been brought up once (#10242), and that was resolved amicably. Based on the number of reports of the original problem, I agree that it seems to be something that comes up often enough that we could prevent a few wtf experiences for 6.x users by backporting it. |
Above makes sense to me, @papandreou, thanks. Do you have time to do the backport this by opening a PR against the v6.x-staging branch? |
@sam-github, sure! #13179 |
(Backported from nodejs#7856 to v6.x-staging) Add support for fs.write(fd, buffer, cb) and fs.write(fd, buffer, offset, cb) as documented at https://nodejs.org/api/fs.html#fs_fs_write_fd_data_position_encoding_callback and equivalently for fs.writeSync Update docs and code comments to reflect the implementation.
Add support for fs.write(fd, buffer, cb) and fs.write(fd, buffer, offset, cb) as documented at https://nodejs.org/api/fs.html#fs_fs_write_fd_data_position_encoding_callback and equivalently for fs.writeSync Update docs and code comments to reflect the implementation. Backport-PR-URL: #13179 PR-URL: #7856 Reviewed-By: Sam Roberts <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Brian White <[email protected]> Reviewed-By: Yorkie Liu <[email protected]> Reviewed-By: Gibson Fahnestock <[email protected]>
Add support for fs.write(fd, buffer, cb) and fs.write(fd, buffer, offset, cb) as documented at https://nodejs.org/api/fs.html#fs_fs_write_fd_data_position_encoding_callback and equivalently for fs.writeSync Update docs and code comments to reflect the implementation. Backport-PR-URL: #13179 PR-URL: #7856 Reviewed-By: Sam Roberts <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Brian White <[email protected]> Reviewed-By: Yorkie Liu <[email protected]> Reviewed-By: Gibson Fahnestock <[email protected]>
Notable Changes: * assert: - assert.fail() can now take one or two arguments (Rich Trott) #12293 * crypto: - add sign/verify support for RSASSA-PSS (Tobias Nießen) #11705 * deps: - upgrade openssl sources to 1.0.2m (Shigeki Ohtsu) #16691 - upgrade libuv to 1.15.0 (cjihrig) #15745 - upgrade libuv to 1.14.1 (cjihrig) #14866 - upgrade libuv to 1.13.1 (cjihrig) #14117 - upgrade libuv to 1.12.0 (cjihrig) #13306 * fs: - Add support for fs.write/fs.writeSync(fd, buffer, cb) and fs.write/fs.writeSync(fd, buffer, offset, cb) as documented (Andreas Lind) #7856 * inspector: - enable --inspect-brk (Refael Ackermann) #12615 * process: - add --redirect-warnings command line argument (James M Snell) #10116 * src: - allow CLI args in env with NODE_OPTIONS (Sam Roberts) #12028) - --abort-on-uncaught-exception in NODE_OPTIONS (Sam Roberts) #13932 - allow --tls-cipher-list in NODE_OPTIONS (Sam Roberts) #13172 - use SafeGetenv() for NODE_REDIRECT_WARNINGS (Sam Roberts) #12677 * test: - remove common.fail() (Rich Trott) #12293 PR-URL: #16263
Notable Changes: * assert: - assert.fail() can now take one or two arguments (Rich Trott) #12293 * crypto: - add sign/verify support for RSASSA-PSS (Tobias Nießen) #11705 * deps: - upgrade openssl sources to 1.0.2m (Shigeki Ohtsu) #16691 - upgrade libuv to 1.15.0 (cjihrig) #15745 - upgrade libuv to 1.14.1 (cjihrig) #14866 - upgrade libuv to 1.13.1 (cjihrig) #14117 - upgrade libuv to 1.12.0 (cjihrig) #13306 * fs: - Add support for fs.write/fs.writeSync(fd, buffer, cb) and fs.write/fs.writeSync(fd, buffer, offset, cb) as documented (Andreas Lind) #7856 * inspector: - enable --inspect-brk (Refael Ackermann) #12615 * process: - add --redirect-warnings command line argument (James M Snell) #10116 * src: - allow CLI args in env with NODE_OPTIONS (Sam Roberts) #12028) - --abort-on-uncaught-exception in NODE_OPTIONS (Sam Roberts) #13932 - allow --tls-cipher-list in NODE_OPTIONS (Sam Roberts) #13172 - use SafeGetenv() for NODE_REDIRECT_WARNINGS (Sam Roberts) #12677 * test: - remove common.fail() (Rich Trott) #12293 PR-URL: #16263
Checklist
make -j4 test
(UNIX), orvcbuild test nosign
(Windows) passesAffected core subsystem(s)
fs
Description of change
Add support for
fs.write(fd, buffer, cb)
andfs.write(fd, buffer, offset, cb)
as documented at https://nodejs.org/api/fs.html#fs_fs_write_fd_data_position_encoding_callback (it says thatdata
can be either a string or a Buffer).Update: Extended to apply to
fs.writeSync
as well, which turned out to have the same issue (#7879).