core/commands: get: Cleaned up option handling
Matt Bell committed
Jan 24, 2015 at 05:35 UTC
39099053132d46b2a96d985d42cb75816a1c72c9
1 file changed
+26
-26
core/commands/get.go
+26
-26
@@ -43,9 +43,12 @@ may also specify the level of compression by specifying '-l=<1-9>'.
43
cmds.BoolOption("compress", "C", "Compress the output with GZIP compression"),
44
cmds.IntOption("compression-level", "l", "The level of compression (an int between 1 and 9)"),
45
},
46
- PreRun: getCheckOptions,
46
+ PreRun: func(req cmds.Request) error {
47
+ _, err := getCompressOptions(req)
48
+ return err
49
+ },
50
Run: func(req cmds.Request, res cmds.Response) {
48
- err := getCheckOptions(req)
51
+ cmplvl, err := getCompressOptions(req)
52
if err != nil {
53
res.SetError(err, cmds.ErrClient)
54
return
@@ -57,18 +60,6 @@ may also specify the level of compression by specifying '-l=<1-9>'.
60
return
61
}
62
60
- cmprs, _, _ := req.Option("compress").Bool()
61
- cmplvl, cmplvlFound, _ := req.Option("compression-level").Int()
62
- switch {
63
- case !cmprs:
64
- cmplvl = gzip.NoCompression
65
- case cmprs && !cmplvlFound:
66
- cmplvl = gzip.DefaultCompression
67
- case cmprs && cmplvlFound && (cmplvl < 1 || cmplvl > 9):
68
- res.SetError(ErrInvalidCompressionLevel, cmds.ErrClient)
69
- return
70
- }
71
-
63
reader, err := get(node, req.Arguments()[0], cmplvl)
64
if err != nil {
65
res.SetError(err, cmds.ErrNormal)
@@ -77,6 +68,9 @@ may also specify the level of compression by specifying '-l=<1-9>'.
68
res.SetOutput(reader)
69
},
70
PostRun: func(req cmds.Request, res cmds.Response) {
71
+ if res.Output() == nil {
72
+ return
73
+ }
74
outReader := res.Output().(io.Reader)
75
res.SetOutput(nil)
76
@@ -85,17 +79,17 @@ may also specify the level of compression by specifying '-l=<1-9>'.
79
outPath = req.Arguments()[0]
80
}
81
88
- cmprs, _, _ := req.Option("compress").Bool()
89
- cmplvl, _, _ := req.Option("compression-level").Int()
90
- if !cmprs {
91
- cmprs = cmplvl > 0
82
+ cmplvl, err := getCompressOptions(req)
83
+ if err != nil {
84
+ res.SetError(err, cmds.ErrClient)
85
+ return
86
}
87
88
if archive, _, _ := req.Option("archive").Bool(); archive {
89
if !strings.HasSuffix(outPath, ".tar") {
90
outPath += ".tar"
91
}
98
- if cmprs {
92
+ if cmplvl != gzip.NoCompression {
93
outPath += ".gz"
94
}
95
fmt.Printf("Saving archive to %s\n", outPath)
@@ -131,7 +125,7 @@ may also specify the level of compression by specifying '-l=<1-9>'.
125
// wrap the reader with the progress bar proxy reader
126
// if the output is compressed, also wrap it in a gzip.Reader
127
var reader io.Reader
134
- if cmprs {
128
+ if cmplvl != gzip.NoCompression {
129
gzipReader, err := gzip.NewReader(outReader)
130
if err != nil {
131
res.SetError(err, cmds.ErrNormal)
@@ -147,19 +141,25 @@ may also specify the level of compression by specifying '-l=<1-9>'.
141
defer bar.Finish()
142
143
extractor := &tar.Extractor{outPath}
150
- err := extractor.Extract(reader)
144
+ err = extractor.Extract(reader)
145
if err != nil {
146
res.SetError(err, cmds.ErrNormal)
147
}
148
},
149
}
150
157
-func getCheckOptions(req cmds.Request) error {
158
- cmplvl, found, _ := req.Option("compression-level").Int()
159
- if found && (cmplvl < 1 || cmplvl > 9) {
160
- return ErrInvalidCompressionLevel
151
+func getCompressOptions(req cmds.Request) (int, error) {
152
+ cmprs, _, _ := req.Option("compress").Bool()
153
+ cmplvl, cmplvlFound, _ := req.Option("compression-level").Int()
154
+ switch {
155
+ case !cmprs:
156
+ return gzip.NoCompression, nil
157
+ case cmprs && !cmplvlFound:
158
+ return gzip.DefaultCompression, nil
159
+ case cmprs && cmplvlFound && (cmplvl < 1 || cmplvl > 9):
160
+ return gzip.NoCompression, ErrInvalidCompressionLevel
161
}
162
- return nil
162
+ return gzip.NoCompression, nil
163
}
164
165
func get(node *core.IpfsNode, path string, compression int) (io.Reader, error) {