| 25 | } |
| 26 | |
| 27 | func (cmd *SBOMGenerateCommand) ParseArgs(args []string) (*sbom.Config, int) { |
| 28 | cfg := &sbom.Config{ |
| 29 | ScanPath: "/", |
| 30 | Format: sbom.FormatCycloneDX, // default format |
| 31 | Parallelism: 4, // default parallelism |
| 32 | Scope: sbom.ScopeSquashed, // default scope |
| 33 | } |
| 34 | |
| 35 | //Parse Syft Style args |
| 36 | // Parse Syft-style arguments |
| 37 | for i := 0; i < len(args); i++ { |
| 38 | arg := args[i] |
| 39 | |
| 40 | switch arg { |
| 41 | case "-o", "--output": |
| 42 | // Next arg is format |
| 43 | if i+1 >= len(args) { |
| 44 | cmd.Ui.Error("Missing value for -o flag") |
| 45 | return cfg, 1 |
| 46 | } |
| 47 | i++ |
| 48 | formatStr := args[i] |
| 49 | |
| 50 | // Parse format string |
| 51 | format, err := sbom.ParseFormatFromArgs(formatStr) |
| 52 | if err != nil { |
| 53 | cmd.Ui.Error(err.Error()) |
| 54 | return cfg, 1 |
| 55 | } |
| 56 | cfg.Format = format |
| 57 | |
| 58 | case "--exclude": |
| 59 | if i+1 >= len(args) { |
| 60 | cmd.Ui.Error("Missing value for --exclude flag") |
| 61 | return cfg, 1 |
| 62 | } |
| 63 | i++ |
| 64 | cfg.Exclude = append(cfg.Exclude, args[i]) |
| 65 | |
| 66 | case "--scope": |
| 67 | if i+1 >= len(args) { |
| 68 | cmd.Ui.Error("Missing value for --scope flag") |
| 69 | return cfg, 1 |
| 70 | } |
| 71 | i++ |
| 72 | scope, err := sbom.ParseScopeFromArgs(args[i]) |
| 73 | if err != nil { |
| 74 | cmd.Ui.Error(err.Error()) |
| 75 | return cfg, 1 |
| 76 | } |
| 77 | cfg.Scope = scope |
| 78 | |
| 79 | default: |
| 80 | if strings.HasPrefix(arg, "--exclude=") { |
| 81 | value := strings.TrimPrefix(arg, "--exclude=") |
| 82 | if value == "" { |
| 83 | cmd.Ui.Error("Missing value for --exclude flag") |
| 84 | return cfg, 1 |