func pruneTaskDisplayProgress(progressChan PruneProgressChan, waitg *sync.WaitGroup) { defer waitg.Done() spinner := lfs.NewSpinner() localCount := 0 retainCount := 0 verifyCount := 0 var msg string for p := range progressChan { switch p.ProgressType { case PruneProgressTypeLocal: localCount++ case PruneProgressTypeRetain: retainCount++ case PruneProgressTypeVerify: verifyCount++ } msg = fmt.Sprintf("%d local objects, %d retained", localCount, retainCount) if verifyCount > 0 { msg += fmt.Sprintf(", %d verified with remote", verifyCount) } spinner.Print(OutputWriter, msg) } spinner.Finish(OutputWriter, msg) }
func pruneDeleteFiles(prunableObjects []string) { spinner := lfs.NewSpinner() var problems bytes.Buffer // In case we fail to delete some var deletedFiles int for i, oid := range prunableObjects { spinner.Print(OutputWriter, fmt.Sprintf("Deleting object %d/%d", i, len(prunableObjects))) mediaFile, err := lfs.LocalMediaPath(oid) if err != nil { problems.WriteString(fmt.Sprintf("Unable to find media path for %v: %v\n", oid, err)) continue } err = os.Remove(mediaFile) if err != nil { problems.WriteString(fmt.Sprintf("Failed to remove file %v: %v\n", mediaFile, err)) continue } deletedFiles++ } spinner.Finish(OutputWriter, fmt.Sprintf("Deleted %d files", deletedFiles)) if problems.Len() > 0 { LoggedError(fmt.Errorf("Failed to delete some files"), problems.String()) Exit("Prune failed, see errors above") } }
func scanAll() []*lfs.WrappedPointer { // converts to `git rev-list --all` // We only pick up objects in real commits and not the reflog opts := lfs.NewScanRefsOptions() opts.ScanMode = lfs.ScanAllMode opts.SkipDeletedBlobs = false // This could be a long process so use the chan version & report progress Print("Scanning for all objects ever referenced...") spinner := lfs.NewSpinner() var numObjs int64 pointerchan, err := lfs.ScanRefsToChan("", "", opts) if err != nil { Panic(err, "Could not scan for Git LFS files") } pointers := make([]*lfs.WrappedPointer, 0) for p := range pointerchan { numObjs++ spinner.Print(OutputWriter, fmt.Sprintf("%d objects found", numObjs)) pointers = append(pointers, p) } spinner.Finish(OutputWriter, fmt.Sprintf("%d objects found", numObjs)) return pointers }