From c5993ecb8121ccbdc23042b72ceddc74205f9294 Mon Sep 17 00:00:00 2001 From: Oliver Tonnhofer Date: Tue, 6 Dec 2016 10:49:17 +0100 Subject: [PATCH] only set DiffElem.Mod to true on modify --- diff/deleter.go | 2 +- diff/parser/parser.go | 4 ++-- diff/process.go | 45 +++++++++++++++++++++---------------------- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/diff/deleter.go b/diff/deleter.go index 377a2da..bf8d0a5 100644 --- a/diff/deleter.go +++ b/diff/deleter.go @@ -271,7 +271,7 @@ func (d *Deleter) Delete(delElem parser.DiffElem) error { } } } - if !delElem.Add { + if delElem.Del { if err := d.diffCache.Coords.Delete(delElem.Node.Id); err != nil { return err } diff --git a/diff/parser/parser.go b/diff/parser/parser.go index 451cccb..53cf4e6 100644 --- a/diff/parser/parser.go +++ b/diff/parser/parser.go @@ -73,9 +73,9 @@ NextToken: mod = false del = false case "modify": - add = true + add = false mod = true - del = true + del = false case "delete": add = false mod = false diff --git a/diff/process.go b/diff/process.go index 60680df..cb57c44 100644 --- a/diff/process.go +++ b/diff/process.go @@ -223,35 +223,34 @@ func Update(oscFile string, geometryLimiter *limit.Limiter, expireor expire.Expi return diffError(err, "delete element %#v", elem) } if elem.Del { - if !elem.Add { - // no new or modified elem -> remove from cache - if elem.Rel != nil { - if err := osmCache.Relations.DeleteRelation(elem.Rel.Id); err != nil && err != cache.NotFound { - return diffError(err, "delete relation %v", elem.Rel) - } - } else if elem.Way != nil { - if err := osmCache.Ways.DeleteWay(elem.Way.Id); err != nil && err != cache.NotFound { - return diffError(err, "delete way %v", elem.Way) - } - if err := diffCache.Ways.Delete(elem.Way.Id); err != nil && err != cache.NotFound { - return diffError(err, "delete way references %v", elem.Way) - } - } else if elem.Node != nil { - if err := osmCache.Nodes.DeleteNode(elem.Node.Id); err != nil && err != cache.NotFound { - return diffError(err, "delete node %v", elem.Node) - } - if err := osmCache.Coords.DeleteCoord(elem.Node.Id); err != nil && err != cache.NotFound { - return diffError(err, "delete coord %v", elem.Node) - } + // no new or modified elem -> remove from cache + if elem.Rel != nil { + if err := osmCache.Relations.DeleteRelation(elem.Rel.Id); err != nil && err != cache.NotFound { + return diffError(err, "delete relation %v", elem.Rel) } - } else if elem.Node != nil && elem.Node.Tags == nil { - // handle modifies where a node drops all tags + } else if elem.Way != nil { + if err := osmCache.Ways.DeleteWay(elem.Way.Id); err != nil && err != cache.NotFound { + return diffError(err, "delete way %v", elem.Way) + } + if err := diffCache.Ways.Delete(elem.Way.Id); err != nil && err != cache.NotFound { + return diffError(err, "delete way references %v", elem.Way) + } + } else if elem.Node != nil { if err := osmCache.Nodes.DeleteNode(elem.Node.Id); err != nil && err != cache.NotFound { return diffError(err, "delete node %v", elem.Node) } + if err := osmCache.Coords.DeleteCoord(elem.Node.Id); err != nil && err != cache.NotFound { + return diffError(err, "delete coord %v", elem.Node) + } } } - if elem.Add { + if elem.Mod && elem.Node != nil && elem.Node.Tags == nil { + // handle modifies where a node drops all tags + if err := osmCache.Nodes.DeleteNode(elem.Node.Id); err != nil && err != cache.NotFound { + return diffError(err, "delete node %v", elem.Node) + } + } + if elem.Add || elem.Mod { if elem.Rel != nil { // check if first member is cached to avoid caching // unneeded relations (typical outside of our coverage)