lib/util/utimes: create hasMillisRes() (async)

This commit is contained in:
JP Richardson 2015-06-27 08:16:11 -05:00
parent 470b4ab7dc
commit 8c79325478
2 changed files with 28 additions and 5 deletions

View File

@ -19,9 +19,9 @@ describe('utimes', function () {
fse.emptyDir(TEST_DIR, done)
})
describe('hasMillisRes()', function () {
describe('hasMillisResSync()', function () {
it('should return a boolean indicating whether it has support', function () {
var res = utimes.hasMillisRes()
var res = utimes.hasMillisResSync()
assert.equal(typeof res, 'boolean')
// HFS => false

View File

@ -1,13 +1,13 @@
var fs = require('graceful-fs')
var path = require('path')
var HAS_MILLIS_RES = hasMillisRes()
var HAS_MILLIS_RES = hasMillisResSync()
// HFS, ext{2,3}, FAT do not, Node.js v0.10 does not
function hasMillisRes () {
function hasMillisResSync () {
// 550 millis past UNIX epoch
var d = new Date(1435410243862)
var tmpfile = path.join(require('os').tmpdir(), 'millis-test')
var tmpfile = path.join(require('os').tmpdir(), 'millis-test-sync')
fs.writeFileSync(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141')
var fd = fs.openSync(tmpfile, 'r+')
fs.futimesSync(fd, d, d)
@ -15,6 +15,28 @@ function hasMillisRes () {
return fs.statSync(tmpfile).mtime > 1435410243000
}
function hasMillisRes (callback) {
// 550 millis past UNIX epoch
var d = new Date(1435410243862)
var tmpfile = path.join(require('os').tmpdir(), 'millis-test')
fs.writeFile(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141', function (err) {
if (err) return callback(err)
fs.open(tmpfile, 'r+', function (err, fd) {
if (err) return callback(err)
fs.futimes(fd, d, d, function (err) {
if (err) return callback(err)
fs.close(fd, function (err) {
if (err) return callback(err)
fs.stat(tmpfile, function (err, stats) {
if (err) return callback(err)
callback(null, stats.mtime > 1435410243000)
})
})
})
})
})
}
function timeRemoveMillis (timestamp) {
if (typeof timestamp === 'number') {
return Math.floor(timestamp / 1000) * 1000
@ -38,6 +60,7 @@ function utimesMillis (path, atime, mtime, callback) {
module.exports = {
hasMillisRes: hasMillisRes,
hasMillisResSync: hasMillisResSync,
timeRemoveMillis: timeRemoveMillis,
utimesMillis: utimesMillis,
HAS_MILLIS_RES: HAS_MILLIS_RES