@@ -63,11 +63,12 @@ may also specify the level of compression by specifying '-l=<1-9>'.
63
63
return
64
64
}
65
65
66
- reader , err := get (req .Context ().Context , node , req .Arguments ()[0 ], cmplvl )
66
+ reader , length , err := get (req .Context ().Context , node , req .Arguments ()[0 ], cmplvl )
67
67
if err != nil {
68
68
res .SetError (err , cmds .ErrNormal )
69
69
return
70
70
}
71
+ res .SetLength (length )
71
72
res .SetOutput (reader )
72
73
},
73
74
PostRun : func (req cmds.Request , res cmds.Response ) {
@@ -105,8 +106,8 @@ may also specify the level of compression by specifying '-l=<1-9>'.
105
106
}
106
107
defer file .Close ()
107
108
108
- bar := pb .New ( 0 ).SetUnits (pb .U_BYTES )
109
- bar .Output = os .Stderr
109
+ bar := pb .New64 ( int64 ( res . Length ()) ).SetUnits (pb .U_BYTES )
110
+ bar .Output = res .Stderr ()
110
111
pbReader := bar .NewProxyReader (outReader )
111
112
bar .Start ()
112
113
defer bar .Finish ()
@@ -122,9 +123,8 @@ may also specify the level of compression by specifying '-l=<1-9>'.
122
123
123
124
fmt .Printf ("Saving file(s) to %s\n " , outPath )
124
125
125
- // TODO: get total length of files
126
- bar := pb .New (0 ).SetUnits (pb .U_BYTES )
127
- bar .Output = os .Stderr
126
+ bar := pb .New64 (int64 (res .Length ())).SetUnits (pb .U_BYTES )
127
+ bar .Output = res .Stderr ()
128
128
129
129
// wrap the reader with the progress bar proxy reader
130
130
// if the output is compressed, also wrap it in a gzip.Reader
@@ -144,6 +144,8 @@ may also specify the level of compression by specifying '-l=<1-9>'.
144
144
bar .Start ()
145
145
defer bar .Finish ()
146
146
147
+ //res.SetOutput(reader)
148
+
147
149
extractor := & tar.Extractor {outPath }
148
150
err = extractor .Extract (reader )
149
151
if err != nil {
@@ -166,12 +168,20 @@ func getCompressOptions(req cmds.Request) (int, error) {
166
168
return gzip .NoCompression , nil
167
169
}
168
170
169
- func get (ctx context.Context , node * core.IpfsNode , p string , compression int ) (io.Reader , error ) {
171
+ func get (ctx context.Context , node * core.IpfsNode , p string , compression int ) (io.Reader , uint64 , error ) {
170
172
pathToResolve := path .Path (p )
171
173
dagnode , err := core .Resolve (ctx , node , pathToResolve )
172
174
if err != nil {
173
- return nil , err
175
+ return nil , 0 , err
174
176
}
175
177
176
- return utar .NewReader (pathToResolve , node .DAG , dagnode , compression )
178
+ reader , err := utar .NewReader (pathToResolve , node .DAG , dagnode , compression )
179
+ ns , err := dagnode .Stat ()
180
+ if err != nil {
181
+ return nil , 0 , err
182
+ }
183
+
184
+ length := uint64 (ns .CumulativeSize )
185
+
186
+ return reader , length , err
177
187
}
0 commit comments