@cryptotaxi247 / kubo / commits / 390990531

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) {