From 14c2fd1edda09b77e7d22f22f0984965bb1fa6fe Mon Sep 17 00:00:00 2001 From: James Shubin Date: Wed, 31 May 2017 17:20:54 -0400 Subject: [PATCH] resources: Add proper edge compare method Might as well do this cleanly in one place. --- lib/main.go | 6 +++--- resources/autogroup.go | 1 + resources/edge.go | 15 +++++++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/main.go b/lib/main.go index 2d42ef4c..771a7217 100644 --- a/lib/main.go +++ b/lib/main.go @@ -493,9 +493,9 @@ func (obj *Main) Run() error { return nil } edgeCmpFn := func(e1, e2 pgraph.Edge) (bool, error) { - edge1 := e1.(*resources.Edge) // panic if wrong - edge2 := e2.(*resources.Edge) // panic if wrong - return edge1.Name == edge2.Name && edge1.Notify == edge2.Notify, nil // simple cmp + edge1 := e1.(*resources.Edge) // panic if wrong + edge2 := e2.(*resources.Edge) // panic if wrong + return edge1.Compare(edge2), nil } // on success, this updates the receiver graph... if err := oldGraph.GraphSync(newGraph, vertexCmpFn, vertexAddFn, vertexRemoveFn, edgeCmpFn); err != nil { diff --git a/resources/autogroup.go b/resources/autogroup.go index a9abf62b..ec304a81 100644 --- a/resources/autogroup.go +++ b/resources/autogroup.go @@ -146,6 +146,7 @@ func (ag *baseGrouper) vertexMerge(v1, v2 pgraph.Vertex) (v pgraph.Vertex, err e } func (ag *baseGrouper) edgeMerge(e1, e2 pgraph.Edge) pgraph.Edge { + // FIXME: should we merge the edge.Notify or edge.refresh values? return e1 // noop } diff --git a/resources/edge.go b/resources/edge.go index b7207b76..7ccdaecb 100644 --- a/resources/edge.go +++ b/resources/edge.go @@ -30,6 +30,21 @@ func (obj *Edge) String() string { return obj.Name } +// Compare returns true if two edges are equivalent. Otherwise it returns false. +func (obj *Edge) Compare(edge *Edge) bool { + if obj.Name != edge.Name { + return false + } + if obj.Notify != edge.Notify { + return false + } + // FIXME: should we compare this as well? + //if obj.refresh != edge.refresh { + // return false + //} + return true +} + // Refresh returns the pending refresh status of this edge. func (obj *Edge) Refresh() bool { return obj.refresh