cline 1.0.0-nightly.5 → 1.0.0-nightly.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cline +0 -0
- package/bin/cline-host +0 -0
- package/node_modules/base64-js/LICENSE +21 -0
- package/node_modules/base64-js/README.md +34 -0
- package/node_modules/base64-js/base64js.min.js +1 -0
- package/node_modules/base64-js/index.d.ts +3 -0
- package/node_modules/base64-js/index.js +150 -0
- package/node_modules/base64-js/package.json +47 -0
- package/node_modules/better-sqlite3/LICENSE +21 -0
- package/node_modules/better-sqlite3/README.md +99 -0
- package/node_modules/better-sqlite3/binding.gyp +38 -0
- package/node_modules/better-sqlite3/deps/common.gypi +68 -0
- package/node_modules/better-sqlite3/deps/copy.js +31 -0
- package/node_modules/better-sqlite3/deps/defines.gypi +41 -0
- package/node_modules/better-sqlite3/deps/download.sh +122 -0
- package/node_modules/better-sqlite3/deps/patches/1208.patch +15 -0
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +262875 -0
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +13775 -0
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3ext.h +723 -0
- package/node_modules/better-sqlite3/deps/sqlite3.gyp +80 -0
- package/node_modules/better-sqlite3/deps/test_extension.c +21 -0
- package/node_modules/better-sqlite3/lib/database.js +90 -0
- package/node_modules/better-sqlite3/lib/index.js +3 -0
- package/node_modules/better-sqlite3/lib/methods/aggregate.js +43 -0
- package/node_modules/better-sqlite3/lib/methods/backup.js +67 -0
- package/node_modules/better-sqlite3/lib/methods/function.js +31 -0
- package/node_modules/better-sqlite3/lib/methods/inspect.js +7 -0
- package/node_modules/better-sqlite3/lib/methods/pragma.js +12 -0
- package/node_modules/better-sqlite3/lib/methods/serialize.js +16 -0
- package/node_modules/better-sqlite3/lib/methods/table.js +189 -0
- package/node_modules/better-sqlite3/lib/methods/transaction.js +78 -0
- package/node_modules/better-sqlite3/lib/methods/wrappers.js +54 -0
- package/node_modules/better-sqlite3/lib/sqlite-error.js +20 -0
- package/node_modules/better-sqlite3/lib/util.js +12 -0
- package/node_modules/better-sqlite3/package.json +62 -0
- package/node_modules/better-sqlite3/src/better_sqlite3.cpp +2189 -0
- package/node_modules/better-sqlite3/src/better_sqlite3.hpp +1036 -0
- package/node_modules/bindings/LICENSE.md +22 -0
- package/node_modules/bindings/README.md +98 -0
- package/node_modules/bindings/bindings.js +221 -0
- package/node_modules/bindings/package.json +28 -0
- package/node_modules/bl/.travis.yml +17 -0
- package/node_modules/bl/BufferList.js +396 -0
- package/node_modules/bl/LICENSE.md +13 -0
- package/node_modules/bl/README.md +247 -0
- package/node_modules/bl/bl.js +84 -0
- package/node_modules/bl/package.json +37 -0
- package/node_modules/bl/test/convert.js +21 -0
- package/node_modules/bl/test/indexOf.js +492 -0
- package/node_modules/bl/test/isBufferList.js +32 -0
- package/node_modules/bl/test/test.js +869 -0
- package/node_modules/buffer/AUTHORS.md +70 -0
- package/node_modules/buffer/LICENSE +21 -0
- package/node_modules/buffer/README.md +410 -0
- package/node_modules/buffer/index.d.ts +186 -0
- package/node_modules/buffer/index.js +1817 -0
- package/node_modules/buffer/package.json +96 -0
- package/node_modules/chownr/LICENSE +15 -0
- package/node_modules/chownr/README.md +3 -0
- package/node_modules/chownr/chownr.js +167 -0
- package/node_modules/chownr/package.json +29 -0
- package/node_modules/decompress-response/index.d.ts +22 -0
- package/node_modules/decompress-response/index.js +58 -0
- package/node_modules/decompress-response/license +9 -0
- package/node_modules/decompress-response/package.json +56 -0
- package/node_modules/decompress-response/readme.md +48 -0
- package/node_modules/deep-extend/LICENSE +20 -0
- package/node_modules/deep-extend/README.md +91 -0
- package/node_modules/deep-extend/index.js +1 -0
- package/node_modules/deep-extend/lib/deep-extend.js +150 -0
- package/node_modules/deep-extend/package.json +62 -0
- package/node_modules/detect-libc/LICENSE +201 -0
- package/node_modules/detect-libc/README.md +163 -0
- package/node_modules/detect-libc/index.d.ts +14 -0
- package/node_modules/detect-libc/lib/detect-libc.js +267 -0
- package/node_modules/detect-libc/lib/filesystem.js +41 -0
- package/node_modules/detect-libc/lib/process.js +24 -0
- package/node_modules/detect-libc/package.json +41 -0
- package/node_modules/end-of-stream/LICENSE +21 -0
- package/node_modules/end-of-stream/README.md +54 -0
- package/node_modules/end-of-stream/index.js +96 -0
- package/node_modules/end-of-stream/package.json +37 -0
- package/node_modules/expand-template/.travis.yml +6 -0
- package/node_modules/expand-template/LICENSE +21 -0
- package/node_modules/expand-template/README.md +43 -0
- package/node_modules/expand-template/index.js +26 -0
- package/node_modules/expand-template/package.json +29 -0
- package/node_modules/expand-template/test.js +67 -0
- package/node_modules/file-uri-to-path/.npmignore +1 -0
- package/node_modules/file-uri-to-path/.travis.yml +30 -0
- package/node_modules/file-uri-to-path/History.md +21 -0
- package/node_modules/file-uri-to-path/LICENSE +20 -0
- package/node_modules/file-uri-to-path/README.md +74 -0
- package/node_modules/file-uri-to-path/index.d.ts +2 -0
- package/node_modules/file-uri-to-path/index.js +66 -0
- package/node_modules/file-uri-to-path/package.json +32 -0
- package/node_modules/file-uri-to-path/test/test.js +24 -0
- package/node_modules/file-uri-to-path/test/tests.json +13 -0
- package/node_modules/fs-constants/LICENSE +21 -0
- package/node_modules/fs-constants/README.md +26 -0
- package/node_modules/fs-constants/browser.js +1 -0
- package/node_modules/fs-constants/index.js +1 -0
- package/node_modules/fs-constants/package.json +19 -0
- package/node_modules/github-from-package/.travis.yml +4 -0
- package/node_modules/github-from-package/LICENSE +18 -0
- package/node_modules/github-from-package/example/package.json +8 -0
- package/node_modules/github-from-package/example/url.js +3 -0
- package/node_modules/github-from-package/index.js +17 -0
- package/node_modules/github-from-package/package.json +30 -0
- package/node_modules/github-from-package/readme.markdown +53 -0
- package/node_modules/github-from-package/test/a.json +8 -0
- package/node_modules/github-from-package/test/b.json +5 -0
- package/node_modules/github-from-package/test/c.json +5 -0
- package/node_modules/github-from-package/test/d.json +7 -0
- package/node_modules/github-from-package/test/e.json +5 -0
- package/node_modules/github-from-package/test/url.js +19 -0
- package/node_modules/ieee754/LICENSE +11 -0
- package/node_modules/ieee754/README.md +51 -0
- package/node_modules/ieee754/index.d.ts +10 -0
- package/node_modules/ieee754/index.js +85 -0
- package/node_modules/ieee754/package.json +52 -0
- package/node_modules/inherits/LICENSE +16 -0
- package/node_modules/inherits/README.md +42 -0
- package/node_modules/inherits/inherits.js +9 -0
- package/node_modules/inherits/inherits_browser.js +27 -0
- package/node_modules/inherits/package.json +29 -0
- package/node_modules/ini/LICENSE +15 -0
- package/node_modules/ini/README.md +102 -0
- package/node_modules/ini/ini.js +206 -0
- package/node_modules/ini/package.json +33 -0
- package/node_modules/mimic-response/index.d.ts +17 -0
- package/node_modules/mimic-response/index.js +77 -0
- package/node_modules/mimic-response/license +9 -0
- package/node_modules/mimic-response/package.json +42 -0
- package/node_modules/mimic-response/readme.md +78 -0
- package/node_modules/minimist/.eslintrc +29 -0
- package/node_modules/minimist/.github/FUNDING.yml +12 -0
- package/node_modules/minimist/.nycrc +14 -0
- package/node_modules/minimist/CHANGELOG.md +298 -0
- package/node_modules/minimist/LICENSE +18 -0
- package/node_modules/minimist/README.md +121 -0
- package/node_modules/minimist/example/parse.js +4 -0
- package/node_modules/minimist/index.js +263 -0
- package/node_modules/minimist/package.json +75 -0
- package/node_modules/minimist/test/all_bool.js +34 -0
- package/node_modules/minimist/test/bool.js +177 -0
- package/node_modules/minimist/test/dash.js +43 -0
- package/node_modules/minimist/test/default_bool.js +37 -0
- package/node_modules/minimist/test/dotted.js +24 -0
- package/node_modules/minimist/test/kv_short.js +32 -0
- package/node_modules/minimist/test/long.js +33 -0
- package/node_modules/minimist/test/num.js +38 -0
- package/node_modules/minimist/test/parse.js +209 -0
- package/node_modules/minimist/test/parse_modified.js +11 -0
- package/node_modules/minimist/test/proto.js +64 -0
- package/node_modules/minimist/test/short.js +69 -0
- package/node_modules/minimist/test/stop_early.js +17 -0
- package/node_modules/minimist/test/unknown.js +104 -0
- package/node_modules/minimist/test/whitespace.js +10 -0
- package/node_modules/mkdirp-classic/LICENSE +21 -0
- package/node_modules/mkdirp-classic/README.md +18 -0
- package/node_modules/mkdirp-classic/index.js +98 -0
- package/node_modules/mkdirp-classic/package.json +18 -0
- package/node_modules/napi-build-utils/.github/workflows/run-npm-tests.yml +31 -0
- package/node_modules/napi-build-utils/LICENSE +21 -0
- package/node_modules/napi-build-utils/README.md +52 -0
- package/node_modules/napi-build-utils/index.js +214 -0
- package/node_modules/napi-build-utils/index.md +0 -0
- package/node_modules/napi-build-utils/package.json +42 -0
- package/node_modules/node-abi/LICENSE +21 -0
- package/node_modules/node-abi/README.md +54 -0
- package/node_modules/node-abi/abi_registry.json +408 -0
- package/node_modules/node-abi/index.js +179 -0
- package/node_modules/node-abi/package.json +45 -0
- package/node_modules/once/LICENSE +15 -0
- package/node_modules/once/README.md +79 -0
- package/node_modules/once/once.js +42 -0
- package/node_modules/once/package.json +33 -0
- package/node_modules/prebuild-install/CHANGELOG.md +131 -0
- package/node_modules/prebuild-install/CONTRIBUTING.md +6 -0
- package/node_modules/prebuild-install/LICENSE +21 -0
- package/node_modules/prebuild-install/README.md +163 -0
- package/node_modules/prebuild-install/asset.js +44 -0
- package/node_modules/prebuild-install/bin.js +78 -0
- package/node_modules/prebuild-install/download.js +142 -0
- package/node_modules/prebuild-install/error.js +14 -0
- package/node_modules/prebuild-install/help.txt +16 -0
- package/node_modules/prebuild-install/index.js +1 -0
- package/node_modules/prebuild-install/log.js +33 -0
- package/node_modules/prebuild-install/package.json +67 -0
- package/node_modules/prebuild-install/proxy.js +35 -0
- package/node_modules/prebuild-install/rc.js +64 -0
- package/node_modules/prebuild-install/util.js +143 -0
- package/node_modules/pump/.github/FUNDING.yml +2 -0
- package/node_modules/pump/.travis.yml +5 -0
- package/node_modules/pump/LICENSE +21 -0
- package/node_modules/pump/README.md +74 -0
- package/node_modules/pump/SECURITY.md +5 -0
- package/node_modules/pump/index.js +86 -0
- package/node_modules/pump/package.json +24 -0
- package/node_modules/pump/test-browser.js +66 -0
- package/node_modules/pump/test-node.js +53 -0
- package/node_modules/rc/LICENSE.APACHE2 +15 -0
- package/node_modules/rc/LICENSE.BSD +26 -0
- package/node_modules/rc/LICENSE.MIT +24 -0
- package/node_modules/rc/README.md +227 -0
- package/node_modules/rc/browser.js +7 -0
- package/node_modules/rc/cli.js +4 -0
- package/node_modules/rc/index.js +53 -0
- package/node_modules/rc/lib/utils.js +104 -0
- package/node_modules/rc/package.json +29 -0
- package/node_modules/rc/test/ini.js +16 -0
- package/node_modules/rc/test/nested-env-vars.js +50 -0
- package/node_modules/rc/test/test.js +59 -0
- package/node_modules/readable-stream/CONTRIBUTING.md +38 -0
- package/node_modules/readable-stream/GOVERNANCE.md +136 -0
- package/node_modules/readable-stream/LICENSE +47 -0
- package/node_modules/readable-stream/README.md +106 -0
- package/node_modules/readable-stream/errors-browser.js +127 -0
- package/node_modules/readable-stream/errors.js +116 -0
- package/node_modules/readable-stream/experimentalWarning.js +17 -0
- package/node_modules/readable-stream/lib/_stream_duplex.js +126 -0
- package/node_modules/readable-stream/lib/_stream_passthrough.js +37 -0
- package/node_modules/readable-stream/lib/_stream_readable.js +1027 -0
- package/node_modules/readable-stream/lib/_stream_transform.js +190 -0
- package/node_modules/readable-stream/lib/_stream_writable.js +641 -0
- package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +180 -0
- package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +183 -0
- package/node_modules/readable-stream/lib/internal/streams/destroy.js +96 -0
- package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +86 -0
- package/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -0
- package/node_modules/readable-stream/lib/internal/streams/from.js +52 -0
- package/node_modules/readable-stream/lib/internal/streams/pipeline.js +86 -0
- package/node_modules/readable-stream/lib/internal/streams/state.js +22 -0
- package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
- package/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
- package/node_modules/readable-stream/package.json +68 -0
- package/node_modules/readable-stream/readable-browser.js +9 -0
- package/node_modules/readable-stream/readable.js +16 -0
- package/node_modules/safe-buffer/LICENSE +21 -0
- package/node_modules/safe-buffer/README.md +584 -0
- package/node_modules/safe-buffer/index.d.ts +187 -0
- package/node_modules/safe-buffer/index.js +65 -0
- package/node_modules/safe-buffer/package.json +51 -0
- package/node_modules/semver/LICENSE +15 -0
- package/node_modules/semver/README.md +664 -0
- package/node_modules/semver/bin/semver.js +191 -0
- package/node_modules/semver/classes/comparator.js +143 -0
- package/node_modules/semver/classes/index.js +7 -0
- package/node_modules/semver/classes/range.js +556 -0
- package/node_modules/semver/classes/semver.js +319 -0
- package/node_modules/semver/functions/clean.js +8 -0
- package/node_modules/semver/functions/cmp.js +54 -0
- package/node_modules/semver/functions/coerce.js +62 -0
- package/node_modules/semver/functions/compare-build.js +9 -0
- package/node_modules/semver/functions/compare-loose.js +5 -0
- package/node_modules/semver/functions/compare.js +7 -0
- package/node_modules/semver/functions/diff.js +60 -0
- package/node_modules/semver/functions/eq.js +5 -0
- package/node_modules/semver/functions/gt.js +5 -0
- package/node_modules/semver/functions/gte.js +5 -0
- package/node_modules/semver/functions/inc.js +21 -0
- package/node_modules/semver/functions/lt.js +5 -0
- package/node_modules/semver/functions/lte.js +5 -0
- package/node_modules/semver/functions/major.js +5 -0
- package/node_modules/semver/functions/minor.js +5 -0
- package/node_modules/semver/functions/neq.js +5 -0
- package/node_modules/semver/functions/parse.js +18 -0
- package/node_modules/semver/functions/patch.js +5 -0
- package/node_modules/semver/functions/prerelease.js +8 -0
- package/node_modules/semver/functions/rcompare.js +5 -0
- package/node_modules/semver/functions/rsort.js +5 -0
- package/node_modules/semver/functions/satisfies.js +12 -0
- package/node_modules/semver/functions/sort.js +5 -0
- package/node_modules/semver/functions/valid.js +8 -0
- package/node_modules/semver/index.js +91 -0
- package/node_modules/semver/internal/constants.js +37 -0
- package/node_modules/semver/internal/debug.js +11 -0
- package/node_modules/semver/internal/identifiers.js +25 -0
- package/node_modules/semver/internal/lrucache.js +42 -0
- package/node_modules/semver/internal/parse-options.js +17 -0
- package/node_modules/semver/internal/re.js +223 -0
- package/node_modules/semver/package.json +78 -0
- package/node_modules/semver/preload.js +4 -0
- package/node_modules/semver/range.bnf +16 -0
- package/node_modules/semver/ranges/gtr.js +6 -0
- package/node_modules/semver/ranges/intersects.js +9 -0
- package/node_modules/semver/ranges/ltr.js +6 -0
- package/node_modules/semver/ranges/max-satisfying.js +27 -0
- package/node_modules/semver/ranges/min-satisfying.js +26 -0
- package/node_modules/semver/ranges/min-version.js +63 -0
- package/node_modules/semver/ranges/outside.js +82 -0
- package/node_modules/semver/ranges/simplify.js +49 -0
- package/node_modules/semver/ranges/subset.js +249 -0
- package/node_modules/semver/ranges/to-comparators.js +10 -0
- package/node_modules/semver/ranges/valid.js +13 -0
- package/node_modules/simple-concat/.travis.yml +3 -0
- package/node_modules/simple-concat/LICENSE +20 -0
- package/node_modules/simple-concat/README.md +44 -0
- package/node_modules/simple-concat/index.js +15 -0
- package/node_modules/simple-concat/package.json +47 -0
- package/node_modules/simple-concat/test/basic.js +41 -0
- package/node_modules/simple-get/.github/dependabot.yml +15 -0
- package/node_modules/simple-get/.github/workflows/ci.yml +23 -0
- package/node_modules/simple-get/LICENSE +20 -0
- package/node_modules/simple-get/README.md +333 -0
- package/node_modules/simple-get/index.js +108 -0
- package/node_modules/simple-get/package.json +67 -0
- package/node_modules/string_decoder/LICENSE +48 -0
- package/node_modules/string_decoder/README.md +47 -0
- package/node_modules/string_decoder/lib/string_decoder.js +296 -0
- package/node_modules/string_decoder/package.json +34 -0
- package/node_modules/strip-json-comments/index.js +70 -0
- package/node_modules/strip-json-comments/license +21 -0
- package/node_modules/strip-json-comments/package.json +42 -0
- package/node_modules/strip-json-comments/readme.md +64 -0
- package/node_modules/tar-fs/.travis.yml +6 -0
- package/node_modules/tar-fs/LICENSE +21 -0
- package/node_modules/tar-fs/README.md +165 -0
- package/node_modules/tar-fs/index.js +358 -0
- package/node_modules/tar-fs/package.json +41 -0
- package/node_modules/tar-fs/test/fixtures/a/hello.txt +1 -0
- package/node_modules/tar-fs/test/fixtures/b/a/test.txt +1 -0
- package/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
- package/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
- package/node_modules/tar-fs/test/fixtures/e/file +0 -0
- package/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
- package/node_modules/tar-fs/test/index.js +346 -0
- package/node_modules/tar-stream/LICENSE +21 -0
- package/node_modules/tar-stream/README.md +168 -0
- package/node_modules/tar-stream/extract.js +257 -0
- package/node_modules/tar-stream/headers.js +295 -0
- package/node_modules/tar-stream/index.js +2 -0
- package/node_modules/tar-stream/pack.js +255 -0
- package/node_modules/tar-stream/package.json +58 -0
- package/node_modules/tar-stream/sandbox.js +11 -0
- package/node_modules/tunnel-agent/LICENSE +55 -0
- package/node_modules/tunnel-agent/README.md +4 -0
- package/node_modules/tunnel-agent/index.js +244 -0
- package/node_modules/tunnel-agent/package.json +22 -0
- package/node_modules/util-deprecate/History.md +16 -0
- package/node_modules/util-deprecate/LICENSE +24 -0
- package/node_modules/util-deprecate/README.md +53 -0
- package/node_modules/util-deprecate/browser.js +67 -0
- package/node_modules/util-deprecate/node.js +6 -0
- package/node_modules/util-deprecate/package.json +27 -0
- package/node_modules/wrappy/LICENSE +15 -0
- package/node_modules/wrappy/README.md +36 -0
- package/node_modules/wrappy/package.json +29 -0
- package/node_modules/wrappy/wrappy.js +33 -0
- package/package.json +1 -1
- package/proto/cline/account.proto +136 -0
- package/proto/cline/browser.proto +56 -0
- package/proto/cline/checkpoints.proto +45 -0
- package/proto/cline/commands.proto +30 -0
- package/proto/cline/common.proto +99 -0
- package/proto/cline/dictation.proto +42 -0
- package/proto/cline/file.proto +189 -0
- package/proto/cline/hooks.proto +49 -0
- package/proto/cline/mcp.proto +133 -0
- package/proto/cline/models.proto +419 -0
- package/proto/cline/oca_account.proto +37 -0
- package/proto/cline/slash.proto +14 -0
- package/proto/cline/state.proto +505 -0
- package/proto/cline/task.proto +119 -0
- package/proto/cline/ui.proto +262 -0
- package/proto/cline/web.proto +27 -0
- package/proto/descriptor_set.pb +0 -0
- package/proto/host/diff.proto +108 -0
- package/proto/host/env.proto +61 -0
- package/proto/host/testing.proto +18 -0
- package/proto/host/window.proto +164 -0
- package/proto/host/workspace.proto +96 -0
- package/cline-1.0.0-nightly.5.tgz +0 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# tar-fs
|
|
2
|
+
|
|
3
|
+
filesystem bindings for [tar-stream](https://github.com/mafintosh/tar-stream).
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
npm install tar-fs
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
[](http://travis-ci.org/mafintosh/tar-fs)
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
tar-fs allows you to pack directories into tarballs and extract tarballs into directories.
|
|
14
|
+
|
|
15
|
+
It doesn't gunzip for you, so if you want to extract a `.tar.gz` with this you'll need to use something like [gunzip-maybe](https://github.com/mafintosh/gunzip-maybe) in addition to this.
|
|
16
|
+
|
|
17
|
+
``` js
|
|
18
|
+
var tar = require('tar-fs')
|
|
19
|
+
var fs = require('fs')
|
|
20
|
+
|
|
21
|
+
// packing a directory
|
|
22
|
+
tar.pack('./my-directory').pipe(fs.createWriteStream('my-tarball.tar'))
|
|
23
|
+
|
|
24
|
+
// extracting a directory
|
|
25
|
+
fs.createReadStream('my-other-tarball.tar').pipe(tar.extract('./my-other-directory'))
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
To ignore various files when packing or extracting add a ignore function to the options. `ignore`
|
|
29
|
+
is also an alias for `filter`. Additionally you get `header` if you use ignore while extracting.
|
|
30
|
+
That way you could also filter by metadata.
|
|
31
|
+
|
|
32
|
+
``` js
|
|
33
|
+
var pack = tar.pack('./my-directory', {
|
|
34
|
+
ignore: function(name) {
|
|
35
|
+
return path.extname(name) === '.bin' // ignore .bin files when packing
|
|
36
|
+
}
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
var extract = tar.extract('./my-other-directory', {
|
|
40
|
+
ignore: function(name) {
|
|
41
|
+
return path.extname(name) === '.bin' // ignore .bin files inside the tarball when extracing
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
var extractFilesDirs = tar.extract('./my-other-other-directory', {
|
|
46
|
+
ignore: function(_, header) {
|
|
47
|
+
// pass files & directories, ignore e.g. symlinks
|
|
48
|
+
return header.type !== 'file' && header.type !== 'directory'
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
You can also specify which entries to pack using the `entries` option
|
|
54
|
+
|
|
55
|
+
```js
|
|
56
|
+
var pack = tar.pack('./my-directory', {
|
|
57
|
+
entries: ['file1', 'subdir/file2'] // only the specific entries will be packed
|
|
58
|
+
})
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
If you want to modify the headers when packing/extracting add a map function to the options
|
|
62
|
+
|
|
63
|
+
``` js
|
|
64
|
+
var pack = tar.pack('./my-directory', {
|
|
65
|
+
map: function(header) {
|
|
66
|
+
header.name = 'prefixed/'+header.name
|
|
67
|
+
return header
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
var extract = tar.extract('./my-directory', {
|
|
72
|
+
map: function(header) {
|
|
73
|
+
header.name = 'another-prefix/'+header.name
|
|
74
|
+
return header
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Similarly you can use `mapStream` incase you wanna modify the input/output file streams
|
|
80
|
+
|
|
81
|
+
``` js
|
|
82
|
+
var pack = tar.pack('./my-directory', {
|
|
83
|
+
mapStream: function(fileStream, header) {
|
|
84
|
+
// NOTE: the returned stream HAS to have the same length as the input stream.
|
|
85
|
+
// If not make sure to update the size in the header passed in here.
|
|
86
|
+
if (path.extname(header.name) === '.js') {
|
|
87
|
+
return fileStream.pipe(someTransform)
|
|
88
|
+
}
|
|
89
|
+
return fileStream;
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
var extract = tar.extract('./my-directory', {
|
|
94
|
+
mapStream: function(fileStream, header) {
|
|
95
|
+
if (path.extname(header.name) === '.js') {
|
|
96
|
+
return fileStream.pipe(someTransform)
|
|
97
|
+
}
|
|
98
|
+
return fileStream;
|
|
99
|
+
}
|
|
100
|
+
})
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Set `options.fmode` and `options.dmode` to ensure that files/directories extracted have the corresponding modes
|
|
104
|
+
|
|
105
|
+
``` js
|
|
106
|
+
var extract = tar.extract('./my-directory', {
|
|
107
|
+
dmode: parseInt(555, 8), // all dirs should be readable
|
|
108
|
+
fmode: parseInt(444, 8) // all files should be readable
|
|
109
|
+
})
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
It can be useful to use `dmode` and `fmode` if you are packing/unpacking tarballs between *nix/windows to ensure that all files/directories unpacked are readable.
|
|
113
|
+
|
|
114
|
+
Alternatively you can set `options.readable` and/or `options.writable` to set the dmode and fmode to readable/writable.
|
|
115
|
+
|
|
116
|
+
``` js
|
|
117
|
+
var extract = tar.extract('./my-directory', {
|
|
118
|
+
readable: true, // all dirs and files should be readable
|
|
119
|
+
writable: true, // all dirs and files should be writable
|
|
120
|
+
})
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Set `options.strict` to `false` if you want to ignore errors due to unsupported entry types (like device files)
|
|
124
|
+
|
|
125
|
+
To dereference symlinks (pack the contents of the symlink instead of the link itself) set `options.dereference` to `true`.
|
|
126
|
+
|
|
127
|
+
## Copy a directory
|
|
128
|
+
|
|
129
|
+
Copying a directory with permissions and mtime intact is as simple as
|
|
130
|
+
|
|
131
|
+
``` js
|
|
132
|
+
tar.pack('source-directory').pipe(tar.extract('dest-directory'))
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Interaction with [`tar-stream`](https://github.com/mafintosh/tar-stream)
|
|
136
|
+
|
|
137
|
+
Use `finalize: false` and the `finish` hook to
|
|
138
|
+
leave the pack stream open for further entries (see
|
|
139
|
+
[`tar-stream#pack`](https://github.com/mafintosh/tar-stream#packing)),
|
|
140
|
+
and use `pack` to pass an existing pack stream.
|
|
141
|
+
|
|
142
|
+
``` js
|
|
143
|
+
var mypack = tar.pack('./my-directory', {
|
|
144
|
+
finalize: false,
|
|
145
|
+
finish: function(sameAsMypack) {
|
|
146
|
+
mypack.entry({name: 'generated-file.txt'}, "hello")
|
|
147
|
+
tar.pack('./other-directory', {
|
|
148
|
+
pack: sameAsMypack
|
|
149
|
+
})
|
|
150
|
+
}
|
|
151
|
+
})
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
## Performance
|
|
156
|
+
|
|
157
|
+
Packing and extracting a 6.1 GB with 2496 directories and 2398 files yields the following results on my Macbook Air.
|
|
158
|
+
[See the benchmark here](https://gist.github.com/mafintosh/8102201)
|
|
159
|
+
|
|
160
|
+
* tar-fs: 34.261 seconds
|
|
161
|
+
* [node-tar](https://github.com/isaacs/node-tar): 366.123 seconds (or 10x slower)
|
|
162
|
+
|
|
163
|
+
## License
|
|
164
|
+
|
|
165
|
+
MIT
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
var chownr = require('chownr')
|
|
2
|
+
var tar = require('tar-stream')
|
|
3
|
+
var pump = require('pump')
|
|
4
|
+
var mkdirp = require('mkdirp-classic')
|
|
5
|
+
var fs = require('fs')
|
|
6
|
+
var path = require('path')
|
|
7
|
+
var os = require('os')
|
|
8
|
+
|
|
9
|
+
var win32 = os.platform() === 'win32'
|
|
10
|
+
|
|
11
|
+
var noop = function () {}
|
|
12
|
+
|
|
13
|
+
var echo = function (name) {
|
|
14
|
+
return name
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
var normalize = !win32 ? echo : function (name) {
|
|
18
|
+
return name.replace(/\\/g, '/').replace(/[:?<>|]/g, '_')
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
var statAll = function (fs, stat, cwd, ignore, entries, sort) {
|
|
22
|
+
var queue = entries || ['.']
|
|
23
|
+
|
|
24
|
+
return function loop (callback) {
|
|
25
|
+
if (!queue.length) return callback()
|
|
26
|
+
var next = queue.shift()
|
|
27
|
+
var nextAbs = path.join(cwd, next)
|
|
28
|
+
|
|
29
|
+
stat.call(fs, nextAbs, function (err, stat) {
|
|
30
|
+
if (err) return callback(err)
|
|
31
|
+
|
|
32
|
+
if (!stat.isDirectory()) return callback(null, next, stat)
|
|
33
|
+
|
|
34
|
+
fs.readdir(nextAbs, function (err, files) {
|
|
35
|
+
if (err) return callback(err)
|
|
36
|
+
|
|
37
|
+
if (sort) files.sort()
|
|
38
|
+
for (var i = 0; i < files.length; i++) {
|
|
39
|
+
if (!ignore(path.join(cwd, next, files[i]))) queue.push(path.join(next, files[i]))
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
callback(null, next, stat)
|
|
43
|
+
})
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
var strip = function (map, level) {
|
|
49
|
+
return function (header) {
|
|
50
|
+
header.name = header.name.split('/').slice(level).join('/')
|
|
51
|
+
|
|
52
|
+
var linkname = header.linkname
|
|
53
|
+
if (linkname && (header.type === 'link' || path.isAbsolute(linkname))) {
|
|
54
|
+
header.linkname = linkname.split('/').slice(level).join('/')
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return map(header)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
exports.pack = function (cwd, opts) {
|
|
62
|
+
if (!cwd) cwd = '.'
|
|
63
|
+
if (!opts) opts = {}
|
|
64
|
+
|
|
65
|
+
var xfs = opts.fs || fs
|
|
66
|
+
var ignore = opts.ignore || opts.filter || noop
|
|
67
|
+
var map = opts.map || noop
|
|
68
|
+
var mapStream = opts.mapStream || echo
|
|
69
|
+
var statNext = statAll(xfs, opts.dereference ? xfs.stat : xfs.lstat, cwd, ignore, opts.entries, opts.sort)
|
|
70
|
+
var strict = opts.strict !== false
|
|
71
|
+
var umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()
|
|
72
|
+
var dmode = typeof opts.dmode === 'number' ? opts.dmode : 0
|
|
73
|
+
var fmode = typeof opts.fmode === 'number' ? opts.fmode : 0
|
|
74
|
+
var pack = opts.pack || tar.pack()
|
|
75
|
+
var finish = opts.finish || noop
|
|
76
|
+
|
|
77
|
+
if (opts.strip) map = strip(map, opts.strip)
|
|
78
|
+
|
|
79
|
+
if (opts.readable) {
|
|
80
|
+
dmode |= parseInt(555, 8)
|
|
81
|
+
fmode |= parseInt(444, 8)
|
|
82
|
+
}
|
|
83
|
+
if (opts.writable) {
|
|
84
|
+
dmode |= parseInt(333, 8)
|
|
85
|
+
fmode |= parseInt(222, 8)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
var onsymlink = function (filename, header) {
|
|
89
|
+
xfs.readlink(path.join(cwd, filename), function (err, linkname) {
|
|
90
|
+
if (err) return pack.destroy(err)
|
|
91
|
+
header.linkname = normalize(linkname)
|
|
92
|
+
pack.entry(header, onnextentry)
|
|
93
|
+
})
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
var onstat = function (err, filename, stat) {
|
|
97
|
+
if (err) return pack.destroy(err)
|
|
98
|
+
if (!filename) {
|
|
99
|
+
if (opts.finalize !== false) pack.finalize()
|
|
100
|
+
return finish(pack)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (stat.isSocket()) return onnextentry() // tar does not support sockets...
|
|
104
|
+
|
|
105
|
+
var header = {
|
|
106
|
+
name: normalize(filename),
|
|
107
|
+
mode: (stat.mode | (stat.isDirectory() ? dmode : fmode)) & umask,
|
|
108
|
+
mtime: stat.mtime,
|
|
109
|
+
size: stat.size,
|
|
110
|
+
type: 'file',
|
|
111
|
+
uid: stat.uid,
|
|
112
|
+
gid: stat.gid
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (stat.isDirectory()) {
|
|
116
|
+
header.size = 0
|
|
117
|
+
header.type = 'directory'
|
|
118
|
+
header = map(header) || header
|
|
119
|
+
return pack.entry(header, onnextentry)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (stat.isSymbolicLink()) {
|
|
123
|
+
header.size = 0
|
|
124
|
+
header.type = 'symlink'
|
|
125
|
+
header = map(header) || header
|
|
126
|
+
return onsymlink(filename, header)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// TODO: add fifo etc...
|
|
130
|
+
|
|
131
|
+
header = map(header) || header
|
|
132
|
+
|
|
133
|
+
if (!stat.isFile()) {
|
|
134
|
+
if (strict) return pack.destroy(new Error('unsupported type for ' + filename))
|
|
135
|
+
return onnextentry()
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
var entry = pack.entry(header, onnextentry)
|
|
139
|
+
if (!entry) return
|
|
140
|
+
|
|
141
|
+
var rs = mapStream(xfs.createReadStream(path.join(cwd, filename), { start: 0, end: header.size > 0 ? header.size - 1 : header.size }), header)
|
|
142
|
+
|
|
143
|
+
rs.on('error', function (err) { // always forward errors on destroy
|
|
144
|
+
entry.destroy(err)
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
pump(rs, entry)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
var onnextentry = function (err) {
|
|
151
|
+
if (err) return pack.destroy(err)
|
|
152
|
+
statNext(onstat)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
onnextentry()
|
|
156
|
+
|
|
157
|
+
return pack
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
var head = function (list) {
|
|
161
|
+
return list.length ? list[list.length - 1] : null
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
var processGetuid = function () {
|
|
165
|
+
return process.getuid ? process.getuid() : -1
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
var processUmask = function () {
|
|
169
|
+
return process.umask ? process.umask() : 0
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
exports.extract = function (cwd, opts) {
|
|
173
|
+
if (!cwd) cwd = '.'
|
|
174
|
+
if (!opts) opts = {}
|
|
175
|
+
|
|
176
|
+
var xfs = opts.fs || fs
|
|
177
|
+
var ignore = opts.ignore || opts.filter || noop
|
|
178
|
+
var map = opts.map || noop
|
|
179
|
+
var mapStream = opts.mapStream || echo
|
|
180
|
+
var own = opts.chown !== false && !win32 && processGetuid() === 0
|
|
181
|
+
var extract = opts.extract || tar.extract()
|
|
182
|
+
var stack = []
|
|
183
|
+
var now = new Date()
|
|
184
|
+
var umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()
|
|
185
|
+
var dmode = typeof opts.dmode === 'number' ? opts.dmode : 0
|
|
186
|
+
var fmode = typeof opts.fmode === 'number' ? opts.fmode : 0
|
|
187
|
+
var strict = opts.strict !== false
|
|
188
|
+
|
|
189
|
+
if (opts.strip) map = strip(map, opts.strip)
|
|
190
|
+
|
|
191
|
+
if (opts.readable) {
|
|
192
|
+
dmode |= parseInt(555, 8)
|
|
193
|
+
fmode |= parseInt(444, 8)
|
|
194
|
+
}
|
|
195
|
+
if (opts.writable) {
|
|
196
|
+
dmode |= parseInt(333, 8)
|
|
197
|
+
fmode |= parseInt(222, 8)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
var utimesParent = function (name, cb) { // we just set the mtime on the parent dir again everytime we write an entry
|
|
201
|
+
var top
|
|
202
|
+
while ((top = head(stack)) && name.slice(0, top[0].length) !== top[0]) stack.pop()
|
|
203
|
+
if (!top) return cb()
|
|
204
|
+
xfs.utimes(top[0], now, top[1], cb)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
var utimes = function (name, header, cb) {
|
|
208
|
+
if (opts.utimes === false) return cb()
|
|
209
|
+
|
|
210
|
+
if (header.type === 'directory') return xfs.utimes(name, now, header.mtime, cb)
|
|
211
|
+
if (header.type === 'symlink') return utimesParent(name, cb) // TODO: how to set mtime on link?
|
|
212
|
+
|
|
213
|
+
xfs.utimes(name, now, header.mtime, function (err) {
|
|
214
|
+
if (err) return cb(err)
|
|
215
|
+
utimesParent(name, cb)
|
|
216
|
+
})
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
var chperm = function (name, header, cb) {
|
|
220
|
+
var link = header.type === 'symlink'
|
|
221
|
+
|
|
222
|
+
/* eslint-disable node/no-deprecated-api */
|
|
223
|
+
var chmod = link ? xfs.lchmod : xfs.chmod
|
|
224
|
+
var chown = link ? xfs.lchown : xfs.chown
|
|
225
|
+
/* eslint-enable node/no-deprecated-api */
|
|
226
|
+
|
|
227
|
+
if (!chmod) return cb()
|
|
228
|
+
|
|
229
|
+
var mode = (header.mode | (header.type === 'directory' ? dmode : fmode)) & umask
|
|
230
|
+
|
|
231
|
+
if (chown && own) chown.call(xfs, name, header.uid, header.gid, onchown)
|
|
232
|
+
else onchown(null)
|
|
233
|
+
|
|
234
|
+
function onchown (err) {
|
|
235
|
+
if (err) return cb(err)
|
|
236
|
+
if (!chmod) return cb()
|
|
237
|
+
chmod.call(xfs, name, mode, cb)
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
extract.on('entry', function (header, stream, next) {
|
|
242
|
+
header = map(header) || header
|
|
243
|
+
header.name = normalize(header.name)
|
|
244
|
+
var name = path.join(cwd, path.join('/', header.name))
|
|
245
|
+
|
|
246
|
+
if (ignore(name, header)) {
|
|
247
|
+
stream.resume()
|
|
248
|
+
return next()
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
var stat = function (err) {
|
|
252
|
+
if (err) return next(err)
|
|
253
|
+
utimes(name, header, function (err) {
|
|
254
|
+
if (err) return next(err)
|
|
255
|
+
if (win32) return next()
|
|
256
|
+
chperm(name, header, next)
|
|
257
|
+
})
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
var onsymlink = function () {
|
|
261
|
+
if (win32) return next() // skip symlinks on win for now before it can be tested
|
|
262
|
+
xfs.unlink(name, function () {
|
|
263
|
+
var dst = path.resolve(path.dirname(name), header.linkname)
|
|
264
|
+
if (!dst.startsWith(path.resolve(cwd))) return next(new Error(name + ' is not a valid symlink'))
|
|
265
|
+
|
|
266
|
+
xfs.symlink(header.linkname, name, stat)
|
|
267
|
+
})
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
var onlink = function () {
|
|
271
|
+
if (win32) return next() // skip links on win for now before it can be tested
|
|
272
|
+
xfs.unlink(name, function () {
|
|
273
|
+
var srcpath = path.join(cwd, path.join('/', header.linkname))
|
|
274
|
+
|
|
275
|
+
xfs.realpath(srcpath, function (err, dst) {
|
|
276
|
+
if (err || !dst.startsWith(path.resolve(cwd))) return next(new Error(name + ' is not a valid hardlink'))
|
|
277
|
+
|
|
278
|
+
xfs.link(dst, name, function (err) {
|
|
279
|
+
if (err && err.code === 'EPERM' && opts.hardlinkAsFilesFallback) {
|
|
280
|
+
stream = xfs.createReadStream(srcpath)
|
|
281
|
+
return onfile()
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
stat(err)
|
|
285
|
+
})
|
|
286
|
+
})
|
|
287
|
+
})
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
var onfile = function () {
|
|
291
|
+
var ws = xfs.createWriteStream(name)
|
|
292
|
+
var rs = mapStream(stream, header)
|
|
293
|
+
|
|
294
|
+
ws.on('error', function (err) { // always forward errors on destroy
|
|
295
|
+
rs.destroy(err)
|
|
296
|
+
})
|
|
297
|
+
|
|
298
|
+
pump(rs, ws, function (err) {
|
|
299
|
+
if (err) return next(err)
|
|
300
|
+
ws.on('close', stat)
|
|
301
|
+
})
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
if (header.type === 'directory') {
|
|
305
|
+
stack.push([name, header.mtime])
|
|
306
|
+
return mkdirfix(name, {
|
|
307
|
+
fs: xfs, own: own, uid: header.uid, gid: header.gid
|
|
308
|
+
}, stat)
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
var dir = path.dirname(name)
|
|
312
|
+
|
|
313
|
+
validate(xfs, dir, path.join(cwd, '.'), function (err, valid) {
|
|
314
|
+
if (err) return next(err)
|
|
315
|
+
if (!valid) return next(new Error(dir + ' is not a valid path'))
|
|
316
|
+
|
|
317
|
+
mkdirfix(dir, {
|
|
318
|
+
fs: xfs, own: own, uid: header.uid, gid: header.gid
|
|
319
|
+
}, function (err) {
|
|
320
|
+
if (err) return next(err)
|
|
321
|
+
|
|
322
|
+
switch (header.type) {
|
|
323
|
+
case 'file': return onfile()
|
|
324
|
+
case 'link': return onlink()
|
|
325
|
+
case 'symlink': return onsymlink()
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
if (strict) return next(new Error('unsupported type for ' + name + ' (' + header.type + ')'))
|
|
329
|
+
|
|
330
|
+
stream.resume()
|
|
331
|
+
next()
|
|
332
|
+
})
|
|
333
|
+
})
|
|
334
|
+
})
|
|
335
|
+
|
|
336
|
+
if (opts.finish) extract.on('finish', opts.finish)
|
|
337
|
+
|
|
338
|
+
return extract
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
function validate (fs, name, root, cb) {
|
|
342
|
+
if (name === root) return cb(null, true)
|
|
343
|
+
fs.lstat(name, function (err, st) {
|
|
344
|
+
if (err && err.code !== 'ENOENT') return cb(err)
|
|
345
|
+
if (err || st.isDirectory()) return validate(fs, path.join(name, '..'), root, cb)
|
|
346
|
+
cb(null, false)
|
|
347
|
+
})
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
function mkdirfix (name, opts, cb) {
|
|
351
|
+
mkdirp(name, { fs: opts.fs }, function (err, made) {
|
|
352
|
+
if (!err && made && opts.own) {
|
|
353
|
+
chownr(made, opts.uid, opts.gid, cb)
|
|
354
|
+
} else {
|
|
355
|
+
cb(err)
|
|
356
|
+
}
|
|
357
|
+
})
|
|
358
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tar-fs",
|
|
3
|
+
"version": "2.1.3",
|
|
4
|
+
"description": "filesystem bindings for tar-stream",
|
|
5
|
+
"dependencies": {
|
|
6
|
+
"chownr": "^1.1.1",
|
|
7
|
+
"mkdirp-classic": "^0.5.2",
|
|
8
|
+
"pump": "^3.0.0",
|
|
9
|
+
"tar-stream": "^2.1.4"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"tar",
|
|
13
|
+
"fs",
|
|
14
|
+
"file",
|
|
15
|
+
"tarball",
|
|
16
|
+
"directory",
|
|
17
|
+
"stream"
|
|
18
|
+
],
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"rimraf": "^2.6.3",
|
|
21
|
+
"standard": "^13.0.1",
|
|
22
|
+
"tape": "^4.9.2"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"test": "standard && tape test/index.js"
|
|
26
|
+
},
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/mafintosh/tar-fs/issues"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://github.com/mafintosh/tar-fs",
|
|
31
|
+
"main": "index.js",
|
|
32
|
+
"directories": {
|
|
33
|
+
"test": "test"
|
|
34
|
+
},
|
|
35
|
+
"author": "Mathias Buus",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/mafintosh/tar-fs.git"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
hello world
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
test
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
Binary file
|