aboutsummaryrefslogtreecommitdiff
path: root/node_modules/shelljs/src/tail.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-24 15:10:37 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-24 15:11:17 +0200
commit7a3df06eb573d36142bd1a8e03c5ce8752d300b3 (patch)
tree70bfaea8884c374876f607774850a3a51c0cb381 /node_modules/shelljs/src/tail.js
parentaca1143cb9eed16cf37f04e475e4257418dd18ac (diff)
fix build issues and add typedoc
Diffstat (limited to 'node_modules/shelljs/src/tail.js')
-rw-r--r--node_modules/shelljs/src/tail.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/node_modules/shelljs/src/tail.js b/node_modules/shelljs/src/tail.js
new file mode 100644
index 000000000..7ece654b1
--- /dev/null
+++ b/node_modules/shelljs/src/tail.js
@@ -0,0 +1,72 @@
+var common = require('./common');
+var fs = require('fs');
+
+common.register('tail', _tail, {
+ canReceivePipe: true,
+ cmdOptions: {
+ 'n': 'numLines',
+ },
+});
+
+//@
+//@ ### tail([{'-n': \<num\>},] file [, file ...])
+//@ ### tail([{'-n': \<num\>},] file_array)
+//@ Available options:
+//@
+//@ + `-n <num>`: Show the last `<num>` lines of the files
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ var str = tail({'-n': 1}, 'file*.txt');
+//@ var str = tail('file1', 'file2');
+//@ var str = tail(['file1', 'file2']); // same as above
+//@ ```
+//@
+//@ Read the end of a file.
+function _tail(options, files) {
+ var tail = [];
+ var pipe = common.readFromPipe();
+
+ if (!files && !pipe) common.error('no paths given');
+
+ var idx = 1;
+ if (options.numLines === true) {
+ idx = 2;
+ options.numLines = Number(arguments[1]);
+ } else if (options.numLines === false) {
+ options.numLines = 10;
+ }
+ options.numLines = -1 * Math.abs(options.numLines);
+ files = [].slice.call(arguments, idx);
+
+ if (pipe) {
+ files.unshift('-');
+ }
+
+ var shouldAppendNewline = false;
+ files.forEach(function (file) {
+ if (!fs.existsSync(file) && file !== '-') {
+ common.error('no such file or directory: ' + file, { continue: true });
+ return;
+ }
+
+ var contents = file === '-' ? pipe : fs.readFileSync(file, 'utf8');
+
+ var lines = contents.split('\n');
+ if (lines[lines.length - 1] === '') {
+ lines.pop();
+ shouldAppendNewline = true;
+ } else {
+ shouldAppendNewline = false;
+ }
+
+ tail = tail.concat(lines.slice(options.numLines));
+ });
+
+ if (shouldAppendNewline) {
+ tail.push(''); // to add a trailing newline once we join
+ }
+ return tail.join('\n');
+}
+module.exports = _tail;