split on whitespace manually instead of using a regex

This commit is contained in:
risk danger olson 2016-02-19 16:24:26 -07:00
parent 7acc064238
commit fa1cd3241e

@ -604,26 +604,33 @@ func lsTreeBlobs(ref string) (chan TreeBlob, error) {
return blobs, nil 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) { func parseLsTree(reader io.Reader, output chan TreeBlob) {
scanner := bufio.NewScanner(reader) scanner := bufio.NewScanner(reader)
scanner.Split(ScanNullLines) scanner.Split(ScanNullLines)
for scanner.Scan() { for scanner.Scan() {
line := strings.TrimSpace(scanner.Text()) line := scanner.Text()
match := lsTreeRE.FindStringSubmatch(line) parts := strings.SplitN(line, "\t", 2)
if match == nil { if len(parts) < 2 {
continue continue
} }
sz, err := strconv.ParseInt(match[2], 10, 64) attrs := strings.SplitN(parts[0], " ", 4)
if len(attrs) < 4 {
continue
}
if attrs[1] != "blob" {
continue
}
sz, err := strconv.ParseInt(strings.TrimSpace(attrs[3]), 10, 64)
if err != nil { if err != nil {
continue continue
} }
sha1 := match[1]
filename := match[3]
if sz < blobSizeCutoff { if sz < blobSizeCutoff {
sha1 := attrs[2]
filename := parts[1]
output <- TreeBlob{sha1, filename} output <- TreeBlob{sha1, filename}
} }
} }