only set DiffElem.Mod to true on modify

master
Oliver Tonnhofer 2016-12-06 10:49:17 +01:00
parent 7a020b28d5
commit c5993ecb81
3 changed files with 25 additions and 26 deletions

View File

@ -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 { if err := d.diffCache.Coords.Delete(delElem.Node.Id); err != nil {
return err return err
} }

View File

@ -73,9 +73,9 @@ NextToken:
mod = false mod = false
del = false del = false
case "modify": case "modify":
add = true add = false
mod = true mod = true
del = true del = false
case "delete": case "delete":
add = false add = false
mod = false mod = false

View File

@ -223,35 +223,34 @@ func Update(oscFile string, geometryLimiter *limit.Limiter, expireor expire.Expi
return diffError(err, "delete element %#v", elem) return diffError(err, "delete element %#v", elem)
} }
if elem.Del { if elem.Del {
if !elem.Add { // no new or modified elem -> remove from cache
// no new or modified elem -> remove from cache if elem.Rel != nil {
if elem.Rel != nil { if err := osmCache.Relations.DeleteRelation(elem.Rel.Id); err != nil && err != cache.NotFound {
if err := osmCache.Relations.DeleteRelation(elem.Rel.Id); err != nil && err != cache.NotFound { return diffError(err, "delete relation %v", elem.Rel)
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)
}
} }
} else if elem.Node != nil && elem.Node.Tags == nil { } else if elem.Way != nil {
// handle modifies where a node drops all tags 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 { if err := osmCache.Nodes.DeleteNode(elem.Node.Id); err != nil && err != cache.NotFound {
return diffError(err, "delete node %v", elem.Node) 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 { if elem.Rel != nil {
// check if first member is cached to avoid caching // check if first member is cached to avoid caching
// unneeded relations (typical outside of our coverage) // unneeded relations (typical outside of our coverage)