Navigation Menu

Skip to content
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

doc: list macOS as supporting filename argument #13111

Closed
wants to merge 3 commits into from

Conversation

chris--young
Copy link

@chris--young chris--young commented May 19, 2017

macOS is not currently listed as a supported os for the fs.watch filename argument, but it does work. This commit updates the documentation to reflect that.

Fixes: #13108

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • documentation is changed or added
  • commit message follows commit guidelines
Affected core subsystem(s)

docs, tests

@nodejs-github-bot nodejs-github-bot added doc Issues and PRs related to the documentations. fs Issues and PRs related to the fs subsystem / file system. labels May 19, 2017
@refack refack added the macos Issues and PRs related to the macOS platform / OSX. label May 19, 2017
@refack
Copy link
Contributor

refack commented May 19, 2017

/cc @nodejs/platform-macos

@refack
Copy link
Contributor

refack commented May 19, 2017

@chris--young thank you very much for the contribution 🥇

It would be extra beneficial if you tried to add some test cases that validate that the filename is indeed passed to the callback. That way we could run automated testing that validate the doc.
IMHO a good file to add the tests to is test/parallel/test-fs-watchfile.js, and you could use the helpers in our common test module to distunguish between the plafroms.

@chris--young chris--young force-pushed the watch-filename branch 3 times, most recently from 710747f to 364720e Compare May 19, 2017 06:33
@gireeshpunathil
Copy link
Member

AIX too please.

bash-4.3$ uname   
AIX
bash-4.3$ cat w.js
var fs = require('fs');
fs.watch('myfile', (eventType, filename) => {
  console.log(`event type is: ${eventType}`);
  if (filename) {
    console.log(`filename provided: ${filename}`);
  } else {
    console.log('filename not provided');
  }
});
bash-4.3$ node w.js &
[1] 1769476
bash-4.3$ echo hello > myfile
bash-4.3$ event type is: change
filename provided: myfile
event type is: change
filename provided: myfile

Copy link
Member

@gireeshpunathil gireeshpunathil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Per my comment - will you please add AIX also into the list?

@@ -63,3 +63,25 @@ fs.watchFile(enoentFile, {interval: 0}, common.mustCall(function(curr, prev) {
fs.unwatchFile(enoentFile);
}
}, 2));

// Watch events should callback with a filename
if (common.isLinux || common.isOSX) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would add Windows too. You can also add AIX according to @gireeshpunathil's suggestion.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just checked, it passes on windows.

Copy link
Contributor

@refack refack left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few nits

@@ -63,3 +63,25 @@ fs.watchFile(enoentFile, {interval: 0}, common.mustCall(function(curr, prev) {
fs.unwatchFile(enoentFile);
}
}, 2));

// Watch events should callback with a filename
if (common.isLinux || common.isOSX) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just checked, it passes on windows.

const dir = common.tmpDir + '/watch';

fs.mkdir(dir, common.mustCall(function(err) {
assert(!err);
Copy link
Contributor

@refack refack May 19, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you could use assert.ifError if (err) assert.fail(err); instead. It will rethrow the error so we know what went wrong.
assert(!err) will just say true != false


fs.watch(dir, common.mustCall(function(eventType, filename) {
this._handle.close();
common.refreshTmpDir();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the test to pass on Windows you should remove the common.refreshTmpDir();. Don't worry about it, the test harness will take care of it.

}));

fs.writeFile(`${dir}/foo.txt`, 'foo', common.mustCall((err) => {
if (err) {
Copy link
Contributor

@refack refack May 19, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can replace the whole callback with (err) => assert.ifError(err)
Ref: #13092 (comment)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you should replace the whole callback with common.mustCall((err) => {if (err) assert.fail(err)})
Ref: #13115

@refack
Copy link
Contributor

refack commented May 19, 2017

@chris--young thanks

@refack refack self-assigned this May 19, 2017
@refack refack added aix Issues and PRs related to the AIX platform. windows Issues and PRs related to the Windows platform. labels May 19, 2017
@refack
Copy link
Contributor

refack commented May 19, 2017

@chris--young
Copy link
Author

chris--young commented May 19, 2017

Any idea what's up with that failed windows-fanned test? Seeing this in the logs...

node-test-binary-windows » 1,vs2015-x86,win2008r2 completed with result FAILURE

I don't have a Windows box to test on right now, should be able to setup a vm over the weekend if needed.

@refack
Copy link
Contributor

refack commented May 19, 2017

Any idea what's up with that failed windows-fanned test?

Ignore, it's a infrastructure fail. Also the linux fan is backlogged.
You can consider it green 👍

@refack
Copy link
Contributor

refack commented May 19, 2017

@chris--young if you're not aware of our landing procedure; now that your part is done, we keep the PR open for 48-72 hours so that anyone who might want to voice an opinion will have a chance.
Ref: https://github.com/nodejs/node/blob/master/CONTRIBUTING.md#step-8-landing
If it all goes smoothly I'll land this on Monday.

Thanks again!

@chris--young
Copy link
Author

sweet

const dir = common.tmpDir + '/watch';

fs.mkdir(dir, common.mustCall(function(err) {
if (err)
Copy link
Member

@lpinca lpinca May 20, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: can you please replace this with assert.ifError()?

Edit: Just read @refack comments against assert.ifError(). It is actually widely used in our tests but what is used here is also ok so feel free to ignore this.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Edit: Just read @refack comments against assert.ifError(). It is actually widely used in our tests but what is used here is also ok so feel free to ignore this.

Vote for a better ifError #12820 ✌️

Copy link
Member

@gireeshpunathil gireeshpunathil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@chris--young - thanks! I am fine with the changes.

Copy link
Contributor

@aqrln aqrln left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your contribution! Can you please change the message of the first commit to use doc:, not docs:? That can be fixed by whoever lands the commit as well, though.

@chris--young chris--young changed the title docs: list macOS as supporting filename argument doc: list macOS as supporting filename argument May 21, 2017
@refack
Copy link
Contributor

refack commented May 22, 2017

CI: https://ci.nodejs.org/job/node-test-commit/10067/
/cc @lpinca @aqrln, where your comments addressed?

const dir = common.tmpDir + '/watch';

fs.mkdir(dir, common.mustCall(function(err) {
if (err)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd prefer it to be either a one-liner or to have braces, but maybe it's just me, and it clearly does not violate the code style this way too, so you can ignore this comment :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really think we should use assert.ifError(err) in these cases.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1
Either one liner or braces.


fs.writeFile(`${dir}/foo.txt`, 'foo', common.mustCall(function(err) {
if (err)
assert.fail(err);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ditto

@refack
Copy link
Contributor

refack commented May 22, 2017

@chris--young we raised a code style nit, then this will land.

@chris--young
Copy link
Author

@refack made those changes. It looks like a new test is failing now, possibly another infrastructure fail

Checking out Revision 21535c38a3f800117089872f890e9d1f336024e0 (refs/remotes/origin/_jenkins_local_branch)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 21535c38a3f800117089872f890e9d1f336024e0
FATAL: Could not checkout 21535c38a3f800117089872f890e9d1f336024e0
hudson.plugins.git.GitException: Command "git checkout -f 21535c38a3f800117089872f890e9d1f336024e0" returned status code 128:
stdout: 
stderr: fatal: reference is not a tree: 21535c38a3f800117089872f890e9d1f336024e0

@refack
Copy link
Contributor

refack commented May 22, 2017

Ignore it fedora22 is obsolete anyway. I'm landing this.

refack pushed a commit to refack/node that referenced this pull request May 22, 2017
also added regression tests

PR-URL: nodejs#13111
Fixes: nodejs#13108
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Alexey Orlenko <eaglexrlnk@gmail.com>
@refack
Copy link
Contributor

refack commented May 22, 2017

Landed in c470f04

@refack refack closed this May 22, 2017
jasnell pushed a commit that referenced this pull request May 23, 2017
also added regression tests

PR-URL: #13111
Fixes: #13108
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Alexey Orlenko <eaglexrlnk@gmail.com>
jasnell pushed a commit that referenced this pull request May 23, 2017
also added regression tests

PR-URL: #13111
Fixes: #13108
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Alexey Orlenko <eaglexrlnk@gmail.com>
@jasnell jasnell mentioned this pull request May 28, 2017
@gibfahn gibfahn mentioned this pull request Jun 15, 2017
3 tasks
@refack refack removed their assignment Oct 20, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
aix Issues and PRs related to the AIX platform. doc Issues and PRs related to the documentations. fs Issues and PRs related to the fs subsystem / file system. macos Issues and PRs related to the macOS platform / OSX. windows Issues and PRs related to the Windows platform.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Documentation for fs.watch needs to say that filename is also available for macOS
10 participants