From 9088cc364f6d2d6193f601226a2853d15e6e6644 Mon Sep 17 00:00:00 2001 From: risk danger olson Date: Fri, 19 Feb 2016 15:48:33 -0700 Subject: [PATCH] extract ls tree parser --- lfs/scanner.go | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/lfs/scanner.go b/lfs/scanner.go index 906ae10a..aa521765 100644 --- a/lfs/scanner.go +++ b/lfs/scanner.go @@ -595,29 +595,38 @@ func lsTreeBlobs(ref string) (chan TreeBlob, error) { blobs := make(chan TreeBlob, chanBufSize) go func() { - scanner := bufio.NewScanner(cmd.Stdout) - regex := regexp.MustCompile(`^\d+\s+blob\s+([0-9a-zA-Z]{40})\s+(\d+)\s+(.*)$`) - for scanner.Scan() { - line := strings.TrimSpace(scanner.Text()) - if match := regex.FindStringSubmatch(line); match != nil { - sz, err := strconv.ParseInt(match[2], 10, 64) - if err != nil { - continue - } - sha1 := match[1] - filename := match[3] - if sz < blobSizeCutoff { - blobs <- TreeBlob{sha1, filename} - } - - } - } + parseLsTree(cmd.Stdout, blobs) + cmd.Wait() close(blobs) }() return blobs, nil } +var lsTreeRE = regexp.MustCompile(`^\d+\s+blob\s+([0-9a-zA-Z]{40})\s+(\d+)\s+(.*)$`) + +func parseLsTree(reader io.Reader, output chan TreeBlob) { + scanner := bufio.NewScanner(reader) + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + match := lsTreeRE.FindStringSubmatch(line) + if match == nil { + continue + } + + sz, err := strconv.ParseInt(match[2], 10, 64) + if err != nil { + continue + } + + sha1 := match[1] + filename := match[3] + if sz < blobSizeCutoff { + output <- TreeBlob{sha1, filename} + } + } +} + // ScanUnpushed scans history for all LFS pointers which have been added but not // pushed to the named remote. remoteName can be left blank to mean 'any remote' func ScanUnpushed(remoteName string) ([]*WrappedPointer, error) {