code: func pruneTaskGetRetainedUnpushed(gitscanner *lfs.GitScanner, fetchconf lfs.FetchPruneConfig, retainChan chan string, errorChan chan error, waitg *sync.WaitGroup, sem *semaphore.Weighted) {
  	defer waitg.Done()
  
  	err := gitscanner.ScanUnpushed(fetchconf.PruneRemoteName, func(p *lfs.WrappedPointer, err error) {
  		if err != nil {
  			errorChan <- err
  		} else {
  			retainChan <- p.Pointer.Oid
  			tracerx.Printf("RETAIN: %v unpushed", p.Pointer.Oid)
  		}
  	})
  
  	if err != nil {
  		errorChan <- err
  		return
  	}
  }
docs: // Background task, must call waitg.Done() once at end