summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/fstream/lib/link-reader.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/fstream/lib/link-reader.js')
-rw-r--r--deps/npm/node_modules/fstream/lib/link-reader.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/deps/npm/node_modules/fstream/lib/link-reader.js b/deps/npm/node_modules/fstream/lib/link-reader.js
new file mode 100644
index 0000000000..fb4cc67a98
--- /dev/null
+++ b/deps/npm/node_modules/fstream/lib/link-reader.js
@@ -0,0 +1,53 @@
+// Basically just a wrapper around an fs.readlink
+//
+// XXX: Enhance this to support the Link type, by keeping
+// a lookup table of {<dev+inode>:<path>}, so that hardlinks
+// can be preserved in tarballs.
+
+module.exports = LinkReader
+
+var fs = require('graceful-fs')
+var inherits = require('inherits')
+var Reader = require('./reader.js')
+
+inherits(LinkReader, Reader)
+
+function LinkReader (props) {
+ var self = this
+ if (!(self instanceof LinkReader)) {
+ throw new Error('LinkReader must be called as constructor.')
+ }
+
+ if (!((props.type === 'Link' && props.Link) ||
+ (props.type === 'SymbolicLink' && props.SymbolicLink))) {
+ throw new Error('Non-link type ' + props.type)
+ }
+
+ Reader.call(self, props)
+}
+
+// When piping a LinkReader into a LinkWriter, we have to
+// already have the linkpath property set, so that has to
+// happen *before* the "ready" event, which means we need to
+// override the _stat method.
+LinkReader.prototype._stat = function (currentStat) {
+ var self = this
+ fs.readlink(self._path, function (er, linkpath) {
+ if (er) return self.error(er)
+ self.linkpath = self.props.linkpath = linkpath
+ self.emit('linkpath', linkpath)
+ Reader.prototype._stat.call(self, currentStat)
+ })
+}
+
+LinkReader.prototype._read = function () {
+ var self = this
+ if (self._paused) return
+ // basically just a no-op, since we got all the info we need
+ // from the _stat method
+ if (!self._ended) {
+ self.emit('end')
+ self.emit('close')
+ self._ended = true
+ }
+}