func runDiff(args []string) int { db1, value1, err := spec.GetPath(args[0]) d.CheckErrorNoUsage(err) if value1 == nil { d.CheckErrorNoUsage(fmt.Errorf("Object not found: %s", args[0])) } defer db1.Close() db2, value2, err := spec.GetPath(args[1]) d.CheckErrorNoUsage(err) if value2 == nil { d.CheckErrorNoUsage(fmt.Errorf("Object not found: %s", args[1])) } defer db2.Close() if summarize { diff.Summary(value1, value2) return 0 } pgr := outputpager.Start() defer pgr.Stop() diff.Diff(pgr.Writer, value1, value2) return 0 }
func runLog(args []string) int { useColor = shouldUseColor() database, value, err := spec.GetPath(args[0]) if err != nil { d.CheckErrorNoUsage(err) } defer database.Close() if value == nil { d.CheckErrorNoUsage(fmt.Errorf("Object not found: %s", args[0])) } origCommit, ok := value.(types.Struct) if !ok || !datas.IsCommitType(origCommit.Type()) { d.CheckError(fmt.Errorf("%s does not reference a Commit object", args[0])) } iter := NewCommitIterator(database, origCommit) displayed := 0 if maxCommits <= 0 { maxCommits = math.MaxInt32 } inChan := make(chan interface{}, parallelism) outChan := orderedparallel.New(inChan, func(node interface{}) interface{} { buff := &bytes.Buffer{} printCommit(node.(LogNode), buff, database) return buff.Bytes() }, parallelism) go func() { for ln, ok := iter.Next(); ok && displayed < maxCommits; ln, ok = iter.Next() { inChan <- ln displayed++ } close(inChan) }() pgr := outputpager.Start() defer pgr.Stop() for commitBuff := range outChan { io.Copy(pgr.Writer, bytes.NewReader(commitBuff.([]byte))) } return 0 }