mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-05 19:20:12 +08:00
Quest: remove unnecessary ls-stages (#195)
* quest: remove ls-stages in create * feat: prevent throwing errors when failed to copy files * feat: log new command in dev mode * quest: copy * quest: mv * quest: rm * quest: execute. Add many exceptions * feat: pwd discovers parent folders
This commit is contained in:
1 parent
f0a09ac4d9
commit
3b77d91796
9 files changed
+147
-217
No files matched your search
@@ -3,7 +3,15 @@ const path = require('path')
|
||||
const { resolvePath } = require('./utils')
|
||||
|
||||
async function collectFilesInfo(inputPath, level = 0, hiddenFiles = false) {
|
||||
const stats = await fs.stat(inputPath)
|
||||
let stats
|
||||
try {
|
||||
stats = await fs.stat(inputPath)
|
||||
} catch (e) {
|
||||
if (e.code === 'ENOENT') {
|
||||
return []
|
||||
}
|
||||
throw e
|
||||
}
|
||||
const name = path.basename(inputPath)
|
||||
const discovered = level <= 1 && (hiddenFiles || !name.startsWith('.'))
|
||||
const self = {
|
||||
@@ -39,12 +47,17 @@ async function collectFilesInfo(inputPath, level = 0, hiddenFiles = false) {
|
||||
async function discoverFiles(argv) {
|
||||
const targetPath = argv._.length < 2 ? ['.'] : argv._.slice(1)
|
||||
try {
|
||||
const result = await Promise.all(
|
||||
targetPath
|
||||
.map((p) => resolvePath(p))
|
||||
.map((p) => collectFilesInfo(p, 0, argv.a || argv.all))
|
||||
)
|
||||
return { discover: result.flat() }
|
||||
const result = (
|
||||
await Promise.all(
|
||||
targetPath
|
||||
.map((p) => resolvePath(p))
|
||||
.map((p) => collectFilesInfo(p, 0, argv.a || argv.all))
|
||||
)
|
||||
).flat()
|
||||
if (result.length === 0) {
|
||||
return {}
|
||||
}
|
||||
return { discover: result }
|
||||
} catch (_) {
|
||||
return {}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
const fs = require('fs').promises
|
||||
const path = require('path')
|
||||
const minimist = require('minimist')
|
||||
const { discoverFiles, collectFilesInfo } = require('./discover')
|
||||
const { resolvePath } = require('./utils')
|
||||
@@ -43,6 +44,9 @@ const commandListeners = {
|
||||
mv: {
|
||||
handler: moveFiles,
|
||||
},
|
||||
pwd: {
|
||||
handler: showCurrentPath,
|
||||
},
|
||||
}
|
||||
|
||||
async function handleCommand(command) {
|
||||
@@ -149,4 +153,22 @@ async function moveFiles(argv) {
|
||||
return results
|
||||
}
|
||||
|
||||
function showCurrentPath() {
|
||||
const pwd = process.cwd()
|
||||
const dirs = pwd.split('/')
|
||||
let currentPath = '/'
|
||||
const result = []
|
||||
for (const dir of dirs) {
|
||||
currentPath = path.join(currentPath, dir)
|
||||
result.push({
|
||||
path: currentPath,
|
||||
type: 'directory',
|
||||
discovered: true,
|
||||
})
|
||||
}
|
||||
return {
|
||||
add: result,
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = handleCommand
|
||||
@@ -34,6 +34,10 @@ export default class FileGraph extends FileNode {
|
||||
// Overwrite the file graph with the provided files
|
||||
// Remove file nodes that don't exist anymore and add new ones
|
||||
|
||||
if (eventFiles.length === 0) {
|
||||
return
|
||||
}
|
||||
|
||||
const newNode = new FileNode(eventFiles[0])
|
||||
|
||||
eventFiles.slice(1).forEach((file) => {
|
||||
|
||||
Reference in new issue
Block a user