Add async Directory::getEntries

This commit is contained in:
Kevin Sawicki
2014-01-06 09:19:29 -08:00
parent 1d2b2eec4c
commit a45ffb3aaa
3 changed files with 43 additions and 4 deletions

View File

@@ -26,7 +26,7 @@
"diff": "git://github.com/benogle/jsdiff.git",
"emissary": "0.19.0",
"first-mate": "0.11.0",
"fs-plus": "0.13.0",
"fs-plus": "0.14.0",
"fstream": "0.1.24",
"fuzzaldrin": "0.1.0",
"git-utils": "0.29.0",

View File

@@ -76,6 +76,20 @@ describe "Directory", ->
else
expect(entry.symlink).toBeFalsy()
callback = jasmine.createSpy('getEntries')
directory.getEntries(callback)
waitsFor -> callback.callCount is 1
runs ->
entries = callback.mostRecentCall.args[0]
for entry in entries
name = entry.getBaseName()
if name is 'symlink-to-dir' or name is 'symlink-to-file'
expect(entry.symlink).toBeTruthy()
else
expect(entry.symlink).toBeFalsy()
describe ".relativize(path)", ->
describe "on #darwin or #linux", ->
it "returns a relative path based on the directory's path", ->

View File

@@ -1,8 +1,11 @@
path = require 'path'
async = require 'async'
{Emitter} = require 'emissary'
fs = require 'fs-plus'
pathWatcher = require 'pathwatcher'
File = require './file'
{Emitter} = require 'emissary'
# Public: Represents a directory using {File}s
module.exports =
@@ -81,8 +84,6 @@ class Directory
# Public: Reads file entries in this directory from disk synchronously.
#
# Note: It follows symlinks.
#
# Returns an Array of {File} and {Directory} objects.
getEntriesSync: ->
directories = []
@@ -99,6 +100,30 @@ class Directory
directories.concat(files)
# Public: Reads file entries in this directory from disk asynchronously.
#
# * callback: A function to call with an Error as the first argument and
# an Array of {File} and {Directory} objects as the second argument.
getEntries: (callback) ->
fs.list @path, (error, entries) ->
return callback(error) if error?
directories = []
files = []
statEntry = (entryPath, callback) ->
fs.stat entryPath, (error, stat) ->
return callback() if error?
fs.isSymbolicLink entryPath, (symlink) ->
if stat.isDirectory()
directories.push(new Directory(entryPath, symlink))
else if stat.isFile()
files.push(new File(entryPath, symlink))
callback()
async.eachLimit entries, 1, statEntry, ->
callback(directories.concat(files))
# Private:
subscribeToNativeChangeEvents: ->
unless @watchSubscription?