feat: 新增 disk usage 内置命令(跨平台 du 等价)
- 注册表新增 Variant.Builtin 内置动作,与 Argv 互斥并参与平台匹配 - disk.usage 支持位置参数与 --path/--path=,输出按大小降序并带合计 - Unix 用设备号实现 -x 不跨文件系统,Windows 降级为不跟随 reparse point - list/help/explain 支持展示内置动作,补充单元与 CLI 测试、README
This commit is contained in:
@@ -42,6 +42,10 @@ func (p Plan) Argv() []string {
|
||||
|
||||
// Display renders the command line the plan would run.
|
||||
func (p Plan) Display() string {
|
||||
if p.Result.Variant.Builtin != "" {
|
||||
parts := append([]string{"(内置)", p.Result.Variant.Builtin}, p.ExtraArgs...)
|
||||
return strings.Join(parts, " ")
|
||||
}
|
||||
argv := p.Argv()
|
||||
if p.Result.Variant.Shell {
|
||||
flag := "-c"
|
||||
@@ -61,9 +65,12 @@ func (p Plan) Explain(w io.Writer) {
|
||||
variant := p.Result.Variant
|
||||
fmt.Fprintf(w, "将执行: %s\n", p.Display())
|
||||
fmt.Fprintf(w, "平台: %s\n", resolve.DescribeInfo(p.Result.Info))
|
||||
if variant.Shell {
|
||||
switch {
|
||||
case variant.Builtin != "":
|
||||
fmt.Fprintf(w, "方式: 内置实现(%s,不启动外部进程)\n", variant.Builtin)
|
||||
case variant.Shell:
|
||||
fmt.Fprintf(w, "方式: shell (%s)\n", shellName())
|
||||
} else {
|
||||
default:
|
||||
fmt.Fprintf(w, "方式: 直接执行\n")
|
||||
}
|
||||
note := variant.Note
|
||||
@@ -94,6 +101,14 @@ func (p Plan) Run(ctx context.Context, opts Options) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
if variant := p.Result.Variant; variant.Builtin != "" {
|
||||
fn, ok := LookupBuiltin(variant.Builtin)
|
||||
if !ok {
|
||||
return fmt.Errorf("未注册的内置动作 %q", variant.Builtin)
|
||||
}
|
||||
return fn(ctx, BuiltinRequest{Args: p.ExtraArgs, Stdout: opts.Stdout, Stderr: opts.Stderr})
|
||||
}
|
||||
|
||||
name, args := p.command()
|
||||
cmd := exec.CommandContext(ctx, name, args...)
|
||||
cmd.Stdin = opts.Stdin
|
||||
|
||||
Reference in New Issue
Block a user