Review changes.

This commit is contained in:
Dan Willhite
2016-06-03 11:18:47 -07:00
parent 14f7d4a1dd
commit f04416d900
4 changed files with 35 additions and 54 deletions

View File

@@ -21,7 +21,7 @@ const (
var (
showHelp = flag.Bool("help", false, "show help text")
diffQ = diffQueue{}
diffQ = NewDiffQueue()
)
func main() {
@@ -61,7 +61,7 @@ func main() {
v1: value1,
v2: value2,
}
diffQ.Push(di)
diffQ.PushBack(di)
waitChan := outputpager.PageOutput(!*outputpager.NoPager)
@@ -74,17 +74,17 @@ func main() {
}
}
func isPrimitive(v1 types.Value) bool {
func isPrimitiveOrRef(v1 types.Value) bool {
kind := v1.Type().Kind()
return types.IsPrimitiveKind(kind) || kind == types.RefKind
}
func canCompare(v1, v2 types.Value) bool {
return !isPrimitive(v1) && v1.Type().Kind() == v1.Type().Kind()
return !isPrimitiveOrRef(v1) && v1.Type().Kind() == v2.Type().Kind()
}
func diff(w io.Writer) {
for di, ok := diffQ.Pop(); ok; di, ok = diffQ.Pop() {
for di, ok := diffQ.PopFront(); ok; di, ok = diffQ.PopFront() {
p, key, v1, v2 := di.path, di.key, di.v1, di.v2
v1.Type().Kind()
@@ -127,7 +127,7 @@ func diffLists(w io.Writer, p types.Path, v1, v2 types.List) {
if canCompare(lastEl, newEl) {
idx := types.Number(splice.SpAt + i)
p1 := p.AddIndex(idx)
diffQ.Push(diffInfo{p1, idx, lastEl, newEl})
diffQ.PushBack(diffInfo{p1, idx, lastEl, newEl})
} else {
wroteHeader = writeHeader(w, wroteHeader, p)
line(w, subPrefix, nil, v1.Get(splice.SpAt+i))
@@ -166,7 +166,7 @@ func diffMaps(w io.Writer, p types.Path, v1, v2 types.Map) {
buf := bytes.NewBuffer(nil)
types.WriteEncodedValueWithTags(buf, k)
p1 := p.AddField(buf.String())
diffQ.Push(diffInfo{path: p1, key: k, v1: c1, v2: c2})
diffQ.PushBack(diffInfo{path: p1, key: k, v1: c1, v2: c2})
} else {
wroteHeader = writeHeader(w, wroteHeader, p)
line(w, subPrefix, k, v1.Get(k))
@@ -184,7 +184,7 @@ func diffStructs(w io.Writer, p types.Path, v1, v2 types.Struct) {
f2 := v2.Get(field)
if canCompare(f1, f2) {
p1 := p.AddField(field)
diffQ.Push(diffInfo{path: p1, key: types.NewString(field), v1: f1, v2: f2})
diffQ.PushBack(diffInfo{path: p1, key: types.NewString(field), v1: f1, v2: f2})
} else {
wroteHeader = writeHeader(w, wroteHeader, p)
line(w, subPrefix, types.NewString(field), f1)
@@ -198,7 +198,7 @@ func diffSets(w io.Writer, p types.Path, v1, v2 types.Set) {
added, removed := v2.Diff(v1)
if len(added) == 1 && len(removed) == 1 && canCompare(added[0], removed[0]) {
p1 := p.AddField(added[0].Hash().String())
diffQ.Push(diffInfo{path: p1, key: types.NewString(""), v1: removed[0], v2: added[0]})
diffQ.PushBack(diffInfo{path: p1, key: types.NewString(""), v1: removed[0], v2: added[0]})
} else {
for _, value := range removed {
wroteHeader = writeHeader(w, wroteHeader, p)

View File

@@ -73,7 +73,7 @@ func TestNomsMapdiff(t *testing.T) {
m1 := createMap("map-1", mm1, "map-2", mm2, "map-3", mm3, "map-4", mm4)
m2 := createMap("map-1", mm1, "map-2", mm2, "map-3", mm3x, "map-4", mm4)
diffQ.Push(diffInfo{path: startPath, key: nil, v1: m1, v2: m2})
diffQ.PushBack(diffInfo{path: startPath, key: nil, v1: m1, v2: m2})
buf := util.NewBuffer(nil)
diff(buf)
assert.Equal(expected, buf.String())
@@ -85,12 +85,12 @@ func TestNomsSetDiff(t *testing.T) {
s1 := createSet("one", "three", "five", "seven", "nine")
s2 := createSet("one", "three", "five-diff", "seven", "nine")
diffQ.Push(diffInfo{path: startPath, key: nil, v1: s1, v2: s2})
diffQ.PushBack(diffInfo{path: startPath, key: nil, v1: s1, v2: s2})
diff(os.Stdout)
s1 = createSet(mm1, mm2, mm3, mm4)
s2 = createSet(mm1, mm2, mm3x, mm4)
diffQ.Push(diffInfo{path: startPath, key: nil, v1: s1, v2: s2})
diffQ.PushBack(diffInfo{path: startPath, key: nil, v1: s1, v2: s2})
buf := util.NewBuffer(nil)
diff(buf)
assert.Equal(expected, buf.String())
@@ -112,7 +112,7 @@ func TestNomsStructDiff(t *testing.T) {
m1 := createMap("one", 1, "two", 2, "three", s1, "four", "four")
m2 := createMap("one", 1, "two", 2, "three", s2, "four", "four-diff")
diffQ.Push(diffInfo{path: startPath, key: nil, v1: m1, v2: m2})
diffQ.PushBack(diffInfo{path: startPath, key: nil, v1: m1, v2: m2})
buf := util.NewBuffer(nil)
diff(buf)
assert.Equal(expected, buf.String())
@@ -124,17 +124,17 @@ func TestNomsListDiff(t *testing.T) {
l1 := createList(1, 2, 3, 4, 44, 5, 6)
l2 := createList(1, 22, 3, 4, 5, 6)
diffQ.Push(diffInfo{path: startPath, key: nil, v1: l1, v2: l2})
diffQ.PushBack(diffInfo{path: startPath, key: nil, v1: l1, v2: l2})
diff(os.Stdout)
l1 = createList("one", "two", "three", "four", "five", "six")
l2 = createList("one", "two", "three", "four", "five", "six", "seven")
diffQ.Push(diffInfo{path: startPath, key: nil, v1: l1, v2: l2})
diffQ.PushBack(diffInfo{path: startPath, key: nil, v1: l1, v2: l2})
diff(os.Stdout)
l1 = createList(mm1, mm2, mm3, mm4)
l2 = createList(mm1, mm2, mm3x, mm4)
diffQ.Push(diffInfo{path: startPath, key: nil, v1: l1, v2: l2})
diffQ.PushBack(diffInfo{path: startPath, key: nil, v1: l1, v2: l2})
buf := util.NewBuffer(nil)
diff(buf)
assert.Equal(expected, buf.String())

View File

@@ -1,6 +1,8 @@
package main
import (
"container/list"
"github.com/attic-labs/noms/types"
)
@@ -11,40 +13,19 @@ type diffInfo struct {
v2 types.Value
}
type queueNode struct {
value diffInfo
next *queueNode
}
type diffQueue struct {
head *queueNode
tail *queueNode
len int
*list.List
}
func (q *diffQueue) Push(node diffInfo) {
qn := queueNode{value: node}
q.len += 1
if q.head == nil {
q.head = &qn
q.tail = &qn
return
}
q.tail.next = &qn
q.tail = &qn
}
func (q *diffQueue) Pop() (diffInfo, bool) {
if q.head == nil {
func (q *diffQueue) PopFront() (diffInfo, bool) {
el := q.Front()
if el == nil {
return diffInfo{}, false
}
q.len -= 1
qn := q.head
if q.head == q.tail {
q.head = nil
q.tail = nil
}
q.head = qn.next
return qn.value, true
q.Remove(el)
return el.Value.(diffInfo), true
}
func NewDiffQueue() *diffQueue {
return &diffQueue{list.New()}
}

View File

@@ -10,21 +10,21 @@ import (
func TestQueue(t *testing.T) {
assert := assert.New(t)
const testSize = 4
dq := diffQueue{}
dq := NewDiffQueue()
for i := 1; i <= testSize; i++ {
dq.Push(diffInfo{key: types.Number(i)})
assert.Equal(i, dq.len)
dq.PushBack(diffInfo{key: types.Number(i)})
assert.Equal(i, dq.Len())
}
for i := 1; i <= testSize; i++ {
di, ok := dq.Pop()
di, ok := dq.PopFront()
assert.True(ok)
assert.Equal(di.key.(types.Number).ToPrimitive().(float64), float64(i))
assert.Equal(testSize-i, dq.len)
assert.Equal(testSize-i, dq.Len())
}
_, ok := dq.Pop()
_, ok := dq.PopFront()
assert.False(ok)
assert.Equal(diffQueue{}, dq)
assert.Equal(NewDiffQueue(), dq)
}