...
1 package cli
2
3 import (
4 "flag"
5 "fmt"
6 )
7
8 type Path = string
9
10
11 func (f *PathFlag) TakesValue() bool {
12 return true
13 }
14
15
16 func (f *PathFlag) GetUsage() string {
17 return f.Usage
18 }
19
20
21 func (f *PathFlag) GetCategory() string {
22 return f.Category
23 }
24
25
26
27 func (f *PathFlag) GetValue() string {
28 return f.Value
29 }
30
31
32 func (f *PathFlag) GetDefaultText() string {
33 if f.DefaultText != "" {
34 return f.DefaultText
35 }
36 val := f.Value
37 if f.defaultValueSet {
38 val = f.defaultValue
39 }
40 if val == "" {
41 return val
42 }
43 return fmt.Sprintf("%q", val)
44 }
45
46
47 func (f *PathFlag) GetEnvVars() []string {
48 return f.EnvVars
49 }
50
51
52 func (f *PathFlag) Apply(set *flag.FlagSet) error {
53
54 f.defaultValue = f.Value
55 f.defaultValueSet = true
56
57 if val, _, found := flagFromEnvOrFile(f.EnvVars, f.FilePath); found {
58 f.Value = val
59 f.HasBeenSet = true
60 }
61
62 for _, name := range f.Names() {
63 if f.Destination != nil {
64 set.StringVar(f.Destination, name, f.Value, f.Usage)
65 continue
66 }
67 set.String(name, f.Value, f.Usage)
68 }
69
70 return nil
71 }
72
73
74 func (f *PathFlag) Get(ctx *Context) string {
75 return ctx.Path(f.Name)
76 }
77
78
79 func (f *PathFlag) RunAction(c *Context) error {
80 if f.Action != nil {
81 return f.Action(c, c.Path(f.Name))
82 }
83
84 return nil
85 }
86
87
88
89 func (cCtx *Context) Path(name string) string {
90 if fs := cCtx.lookupFlagSet(name); fs != nil {
91 return lookupPath(name, fs)
92 }
93
94 return ""
95 }
96
97 func lookupPath(name string, set *flag.FlagSet) string {
98 if f := set.Lookup(name); f != nil {
99 return f.Value.String()
100 }
101 return ""
102 }
103
View as plain text