aboutsummaryrefslogtreecommitdiff
path: root/modules/core/module-fs.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/core/module-fs.js')
-rw-r--r--modules/core/module-fs.js21
1 files changed, 17 insertions, 4 deletions
diff --git a/modules/core/module-fs.js b/modules/core/module-fs.js
index f2b215a..583cfda 100644
--- a/modules/core/module-fs.js
+++ b/modules/core/module-fs.js
@@ -44,8 +44,11 @@ class FileSystemModule {
registerCommands() {
const self = this;
this.commands['ls'] = (args) => {
- const target = args && args.length > 0 && !args[0].startsWith('-') ? args[0] : undefined;
- const flags = (args || []).filter(a => a.startsWith('-'));
+ const argv = args || [];
+ // v4.6.104: the path may follow the flags — `ls -l /work` used to list the cwd
+ // because only argv[0] was considered (MAINT-016).
+ const flags = argv.filter(a => a.startsWith('-'));
+ const target = argv.find(a => !a.startsWith('-'));
const showLong = flags.some(f => f.includes('l'));
const showHidden = flags.some(f => f.includes('a'));
const files = this.terminal.fs.ls(target);
@@ -180,14 +183,24 @@ class FileSystemModule {
};
this.commands['mv'] = (args) => {
if(!args[0] || !args[1]) return this.terminal.print('Usage: mv <source> <dest>', 'warning');
- if (this.terminal.fs.mv(args[0], args[1]))
+ const fs = this.terminal.fs;
+ const d = fs._resolvePath(args[1]);
+ const dn = d && d.name ? d.dir.content[d.name] : null;
+ if (dn && dn.type === 'dir' && !dn._virtual)
+ return this.terminal.print('mv: ' + args[1] + ': is a directory — refusing to overwrite it', 'error');
+ if (fs.mv(args[0], args[1]))
this.terminal.print('Moved: ' + args[0] + ' to ' + args[1], 'success');
else
this.terminal.print('mv: ' + args[0] + ': No such file or directory', 'error');
};
this.commands['cp'] = (args) => {
if(!args[0] || !args[1]) return this.terminal.print('Usage: cp <source> <dest>', 'warning');
- if (this.terminal.fs.cp(args[0], args[1]))
+ const fs = this.terminal.fs;
+ const d = fs._resolvePath(args[1]);
+ const dn = d && d.name ? d.dir.content[d.name] : null;
+ if (dn && dn.type === 'dir' && !dn._virtual)
+ return this.terminal.print('cp: ' + args[1] + ': is a directory — refusing to overwrite it', 'error');
+ if (fs.cp(args[0], args[1]))
this.terminal.print('Copied: ' + args[0] + ' to ' + args[1], 'success');
else
this.terminal.print('cp: ' + args[0] + ': No such file or directory', 'error');