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

fs: introduce opendir() and fs.Dir #29349

Closed

Commits on Oct 7, 2019

  1. fs: introduce opendir() and fs.Dir

    This adds long-requested methods for asynchronously interacting and
    iterating through directory entries by using `uv_fs_opendir`,
    `uv_fs_readdir`, and `uv_fs_closedir`.
    
    `fs.opendir()` and friends return an `fs.Dir`, which contains methods
    for doing reads and cleanup. `fs.Dir` also has the async iterator
    symbol exposed.
    
    The `read()` method and friends only return `fs.Dirent`s for this API.
    Having a entry type or doing a `stat` call is deemed to be necessary in
    the majority of cases, so just returning dirents seems like the logical
    choice for a new api.
    
    Reading when there are no more entries returns `null` instead of a
    dirent. However the async iterator hides that (and does automatic
    cleanup).
    
    The code lives in separate files from the rest of fs, this is done
    partially to prevent over-pollution of those (already very large)
    files, but also in the case of js allows loading into `fsPromises`.
    
    Due to async_hooks, this introduces a new handle type of `DIRHANDLE`.
    
    This PR does not attempt to make complete optimization of
    this feature. Notable future improvements include:
    - Moving promise work into C++ land like FileHandle.
    - Possibly adding `readv()` to do multi-entry directory reads.
    - Aliasing `fs.readdir` to `fs.scandir` and doing a deprecation.
    
    Refs: nodejs/node-v0.x-archive#388
    Refs: nodejs#583
    Refs: libuv/libuv#2057
    Fishrock123 committed Oct 7, 2019
    Configuration menu
    Copy the full SHA
    018fc76 View commit details
    Browse the repository at this point in the history