(args Args)
| 23 | } |
| 24 | |
| 25 | func (cmd *Command) parseFlags(args Args) (Args, error) { |
| 26 | tracef("parsing flags from arguments %[1]q (cmd=%[2]q)", args, cmd.Name) |
| 27 | |
| 28 | cmd.setFlags = map[Flag]struct{}{} |
| 29 | cmd.appliedFlags = cmd.allFlags() |
| 30 | |
| 31 | tracef("walking command lineage for persistent flags (cmd=%[1]q)", cmd.Name) |
| 32 | |
| 33 | for pCmd := cmd.parent; pCmd != nil; pCmd = pCmd.parent { |
| 34 | tracef( |
| 35 | "checking ancestor command=%[1]q for persistent flags (cmd=%[2]q)", |
| 36 | pCmd.Name, cmd.Name, |
| 37 | ) |
| 38 | |
| 39 | for _, fl := range pCmd.allFlags() { |
| 40 | flNames := fl.Names() |
| 41 | |
| 42 | pfl, ok := fl.(LocalFlag) |
| 43 | if !ok || pfl.IsLocal() { |
| 44 | tracef("skipping non-persistent flag %[1]q (cmd=%[2]q)", flNames, cmd.Name) |
| 45 | continue |
| 46 | } |
| 47 | |
| 48 | tracef( |
| 49 | "checking for applying persistent flag=%[1]q pCmd=%[2]q (cmd=%[3]q)", |
| 50 | flNames, pCmd.Name, cmd.Name, |
| 51 | ) |
| 52 | |
| 53 | applyPersistentFlag := true |
| 54 | |
| 55 | for _, name := range flNames { |
| 56 | if cmd.lFlag(name) != nil { |
| 57 | applyPersistentFlag = false |
| 58 | break |
| 59 | } |
| 60 | } |
| 61 | |
| 62 | if !applyPersistentFlag { |
| 63 | tracef("not applying as persistent flag=%[1]q (cmd=%[2]q)", flNames, cmd.Name) |
| 64 | continue |
| 65 | } |
| 66 | |
| 67 | tracef("applying as persistent flag=%[1]q (cmd=%[2]q)", flNames, cmd.Name) |
| 68 | |
| 69 | tracef("appending to applied flags flag=%[1]q (cmd=%[2]q)", flNames, cmd.Name) |
| 70 | cmd.appliedFlags = append(cmd.appliedFlags, fl) |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | tracef("parsing flags iteratively tail=%[1]q (cmd=%[2]q)", args.Tail(), cmd.Name) |
| 75 | defer tracef("done parsing flags (cmd=%[1]q)", cmd.Name) |
| 76 | |
| 77 | posArgs := []string{} |
| 78 | for rargs := args.Slice(); len(rargs) > 0; rargs = rargs[1:] { |
| 79 | tracef("rearrange:1 (cmd=%[1]q) %[2]q", cmd.Name, rargs) |
| 80 | |
| 81 | firstArg := strings.TrimSpace(rargs[0]) |
| 82 | if len(firstArg) == 0 { |
no test coverage detected