Browse Source

Revert "lib: lazy instantiation of fs.Stats dates"

This reverts commit 9836cf5717.

Ref: https://github.com/npm/npm/issues/16734
PR-URL: https://github.com/nodejs/node/pull/13256
Reviewed-By: Timothy Gu <timothygu99@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
v6
Anna Henningsen 8 years ago
parent
commit
ae6c7044c8
No known key found for this signature in database GPG Key ID: D8B9F5AEAE84E4CF
  1. 76
      lib/fs.js
  2. 22
      test/parallel/test-fs-stat.js

76
lib/fs.js

@ -196,81 +196,13 @@ function Stats(
this.ino = ino; this.ino = ino;
this.size = size; this.size = size;
this.blocks = blocks; this.blocks = blocks;
this._atim_msec = atim_msec; this.atime = new Date(atim_msec + 0.5);
this._mtim_msec = mtim_msec; this.mtime = new Date(mtim_msec + 0.5);
this._ctim_msec = ctim_msec; this.ctime = new Date(ctim_msec + 0.5);
this._birthtim_msec = birthtim_msec; this.birthtime = new Date(birthtim_msec + 0.5);
} }
fs.Stats = Stats; fs.Stats = Stats;
// defining the properties in this fashion (explicitly with no loop or factory)
// has been shown to be the most performant on V8 contemp.
// Ref: https://github.com/nodejs/node/pull/12818
// + 0.5 is added to the Dates to protect values from being rounded down
// Ref: https://github.com/nodejs/node/pull/12607
Object.defineProperties(Stats.prototype, {
atime: {
configurable: true,
enumerable: true,
get() {
return this._atime !== undefined ?
this._atime :
(this._atime = new Date(this._atim_msec + 0.5));
},
set(value) { return this._atime = value; }
},
mtime: {
configurable: true,
enumerable: true,
get() {
return this._mtime !== undefined ?
this._mtime :
(this._mtime = new Date(this._mtim_msec + 0.5));
},
set(value) { return this._mtime = value; }
},
ctime: {
configurable: true,
enumerable: true,
get() {
return this._ctime !== undefined ?
this._ctime :
(this._ctime = new Date(this._ctim_msec + 0.5));
},
set(value) { return this._ctime = value; }
},
birthtime: {
configurable: true,
enumerable: true,
get() {
return this._birthtime !== undefined ?
this._birthtime :
(this._birthtime = new Date(this._birthtim_msec + 0.5));
},
set(value) { return this._birthtime = value; }
},
});
Stats.prototype.toJSON = function toJSON() {
return {
dev: this.dev,
mode: this.mode,
nlink: this.nlink,
uid: this.uid,
gid: this.gid,
rdev: this.rdev,
blksize: this.blksize,
ino: this.ino,
size: this.size,
blocks: this.blocks,
atime: this.atime,
ctime: this.ctime,
mtime: this.mtime,
birthtime: this.birthtime
};
};
Stats.prototype._checkModeProperty = function(property) { Stats.prototype._checkModeProperty = function(property) {
return ((this.mode & S_IFMT) === property); return ((this.mode & S_IFMT) === property);
}; };

22
test/parallel/test-fs-stat.js

@ -98,27 +98,5 @@ fs.stat(__filename, common.mustCall(function(err, s) {
console.log(`isSymbolicLink: ${JSON.stringify(s.isSymbolicLink())}`); console.log(`isSymbolicLink: ${JSON.stringify(s.isSymbolicLink())}`);
assert.strictEqual(false, s.isSymbolicLink()); assert.strictEqual(false, s.isSymbolicLink());
assert.ok(s.atime instanceof Date);
assert.ok(s.mtime instanceof Date); assert.ok(s.mtime instanceof Date);
assert.ok(s.ctime instanceof Date);
assert.ok(s.birthtime instanceof Date);
}));
fs.stat(__filename, common.mustCall(function(err, s) {
const json = JSON.parse(JSON.stringify(s));
const keys = [
'dev', 'mode', 'nlink', 'uid',
'gid', 'rdev', 'ino',
'size', 'atime', 'mtime',
'ctime', 'birthtime'
];
if (!common.isWindows) {
keys.push('blocks', 'blksize');
}
keys.forEach(function(k) {
assert.ok(
json[k] !== undefined && json[k] !== null,
k + ' should not be null or undefined'
);
});
})); }));

Loading…
Cancel
Save