blob: d146403c27061390de615d14df30737b5669f30f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# recursive directory listing
fn tree_walk(path, prefix) do
const items = fs:entries(path)
if (items == :nil)
return :nil
for index in 0..items:len() do
const entry = items[index]
const last = index == items:len() - 1
let branch = "|-- "
# font doesnt support fancy ascii symbols
if (last)
branch = "`-- "
const slash = if (entry.type == 2) "/" else ""
puts("#{prefix}#{branch}#{entry.name}#{slash}\n")
if entry.type == 2 do
const child = if (path == "/") "/#{entry.name}" else "#{path}/#{entry.name}"
let indent = "| "
if (last)
indent = " "
tree_walk(child, prefix ~ indent)
end
end
end
const context = env.ctx
const target = if (context.argv:len() > 1) expand_path(context.argv[1]) else wd.path
if vfs_owns(target) and target != "/" do
fail("tree: #{target}: virtual dir\n")
end else if target != "/" and fs:is_dir(target) == :false do
fail("tree: #{target}: not a directory\n")
end else do
puts("#{target}\n")
tree_walk(target, "")
# /proc is the one thing not on disk so tack it on at root
if target == "/" do
puts("`-- proc/\n")
puts(" |-- uptime\n")
puts(" `-- meminfo\n")
end
end
|