@@ -45,7 +45,7 @@ func (m *Main) handleDedupProgress(mode1 bool) {
4545 if m .progress == Fancy {
4646 lterm .Write (termBG , termFG1 , stat , lterm .ClearLine (0 ), lterm .Reset , "\r " )
4747 } else {
48- fmt .Print (m .dedup .NumTotal , "\r " )
48+ fmt .Print (m .dedup .NumTotal () , "\r " )
4949 }
5050 }
5151 case perf := <- m .dedup .PerfQueue :
@@ -58,12 +58,12 @@ func (m *Main) handleDedupProgress(mode1 bool) {
5858 stat = fmt .Sprintf ("[$%s$%s$]$ %5.0f%% " , pa , pb , perf .Percent * 100 )
5959
6060 if mode1 {
61- stat += fmt .Sprintf ("$ # %7d " , m .dedup .NumTotal )
61+ stat += fmt .Sprintf ("$ # %7d " , m .dedup .NumTotal () )
6262 statF := fmt .Sprintf ("%d files/s" , m .fps .Last ())
6363 stat += fmt .Sprintf ("$ %s $%-13s " , util .Sparkline (m .fps .Stats ), statF )
6464 } else {
65- stat += fmt .Sprintf ("$ # %d " , m .dedup .NumTotal )
66- stat += fmt .Sprintf ("$ %sB reclaimed " , intutil .FormatSize (m .dedup .ReclaimedTotal ))
65+ stat += fmt .Sprintf ("$ # %d " , m .dedup .NumTotal () )
66+ stat += fmt .Sprintf ("$ %sB reclaimed " , intutil .FormatSize (m .dedup .ReclaimedTotal () ))
6767 }
6868
6969 stat = util .LeftTruncate (stat , m .termWidth - 1 + 5 ) // extra for col tokens
@@ -83,7 +83,7 @@ func (m *Main) handleDedupProgress(mode1 bool) {
8383 if m .progress == Fancy {
8484 lterm .Write (termBG , termFG1 , stat , spin , lterm .ClearLine (0 ), lterm .Reset , "\r " )
8585 } else if m .progress == Plain {
86- fmt .Print (m .dedup .NumTotal , "\r " )
86+ fmt .Print (m .dedup .NumTotal () , "\r " )
8787 }
8888 }
8989 }
@@ -170,29 +170,23 @@ func (m *Main) runDedup(command string, dd *CLIDedup, indexName string) int {
170170 return 1
171171 }
172172 if st != chkbit .IndexTypeAtom {
173- fmt . Println ("error: dedup is incompatible with split mode " )
173+ m . printErr ("error: dedup requires an atom index; you can create one with `chkbit fuse` while leaving your split index in place " )
174174 return 1
175175 }
176176
177- m .dedup , err = chkbit .NewDedup (root , indexName )
177+ m .dedup , err = chkbit .NewDedup (root , indexName , command == cmdDedupDetect )
178178 if err != nil {
179179 m .printError (err )
180+ if command != cmdDedupDetect && os .IsNotExist (err ) {
181+ m .printStderr ("Did you forget to run `chkbit detect`?" )
182+ }
180183 return 1
181184 }
182185 defer m .dedup .Finish ()
183186
184187 mode1 := true
185- resultCh := make (chan error , 1 )
186- launchFunc := func () {
187- var err error
188- switch command {
189- case cmdDedupDetect :
190- err = m .dedup .DetectDupes (dd .Detect .MinSize , m .verbose )
191- case cmdDedupRun , cmdDedupRun2 :
192- err = m .dedup .Dedup (dd .Run .Hashes , m .verbose )
193- }
194- resultCh <- err
195- m .dedup .LogQueue <- nil
188+ printUpdated := func () {
189+ m .logInfo ("" , "last updated " + m .dedup .LastUpdated ().Format (time .DateTime ))
196190 }
197191
198192 switch command {
@@ -204,6 +198,7 @@ func (m *Main) runDedup(command string, dd *CLIDedup, indexName string) int {
204198 }
205199 } else {
206200 m .logInfo ("" , "chkbit dedup show " + argPath )
201+ printUpdated ()
207202 m .showDedupStatus (list , dd .Show .Details )
208203 }
209204 }
@@ -213,11 +208,23 @@ func (m *Main) runDedup(command string, dd *CLIDedup, indexName string) int {
213208 fmt .Println (abortTip )
214209 case cmdDedupRun , cmdDedupRun2 :
215210 m .logInfo ("" , fmt .Sprintf ("chkbit dedup detect %s %s" , argPath , dd .Run .Hashes ))
211+ printUpdated ()
216212 fmt .Println (abortTip )
217213 mode1 = false
218214 }
219215
220- go launchFunc ()
216+ resultCh := make (chan error , 1 )
217+ go func () {
218+ var err error
219+ switch command {
220+ case cmdDedupDetect :
221+ err = m .dedup .DetectDupes (dd .Detect .MinSize , m .verbose )
222+ case cmdDedupRun , cmdDedupRun2 :
223+ err = m .dedup .Dedup (dd .Run .Hashes , m .verbose )
224+ }
225+ resultCh <- err
226+ m .dedup .LogQueue <- nil
227+ }()
221228 m .handleDedupProgress (mode1 )
222229
223230 if err = <- resultCh ; err != nil {
@@ -227,14 +234,17 @@ func (m *Main) runDedup(command string, dd *CLIDedup, indexName string) int {
227234 }
228235 }
229236
230- if m .progress == Fancy && m .dedup .NumTotal > 0 {
231- elapsed := time .Since (m .fps .Start )
232- elapsedS := elapsed .Seconds ()
233- m .logInfo ("" , fmt .Sprintf ("- %s elapsed" , elapsed .Truncate (time .Second )))
234- m .logInfo ("" , fmt .Sprintf ("- %d file(s) processed" , m .dedup .NumTotal ))
235- m .logInfo ("" , fmt .Sprintf ("- %.2f files/second" , (float64 (m .fps .Total )+ float64 (m .fps .Current ))/ elapsedS ))
236- if m .dedup .ReclaimedTotal > 0 {
237- m .logInfo ("" , fmt .Sprintf ("- %sB reclaimed" , intutil .FormatSize (m .dedup .ReclaimedTotal )))
237+ switch command {
238+ case cmdDedupDetect , cmdDedupRun , cmdDedupRun2 :
239+ if m .progress == Fancy {
240+ elapsed := time .Since (m .fps .Start )
241+ elapsedS := elapsed .Seconds ()
242+ m .logInfo ("" , fmt .Sprintf ("- %s elapsed" , elapsed .Truncate (time .Second )))
243+ m .logInfo ("" , fmt .Sprintf ("- %s processed" , util .LangNum1Choice (m .dedup .NumTotal (), "file" , "files" )))
244+ m .logInfo ("" , fmt .Sprintf ("- %.2f files/second" , (float64 (m .fps .Total )+ float64 (m .fps .Current ))/ elapsedS ))
245+ if m .dedup .ReclaimedTotal () > 0 {
246+ m .logInfo ("" , fmt .Sprintf ("- %sB reclaimed" , intutil .FormatSize (m .dedup .ReclaimedTotal ())))
247+ }
238248 }
239249 }
240250
0 commit comments