Ticket #23584: 23584.patch

File 23584.patch, 2.4 KB (added by GerdP, 2 years ago)

I think this patch makes the new, possibly faster code work as before.

  • src/reverter/ChangesetReverter.java

     
    512512
    513513        // Remove primitives where we already know the LatLon.
    514514        nodes.removeIf(n -> {
     515            if (n.isDeleted() || n.isLatLonKnown())
     516                return true;
    515517            PrimitiveId id = n.getPrimitiveId();
    516518            OsmPrimitive p = ds.getPrimitiveById(id);
    517             return !(p instanceof Node) || ((Node) p).isLatLonKnown();
     519            return !(p instanceof Node) || ((Node) p).isLatLonKnown() || p.getVersion() <= 1;
    518520        });
    519521        progressMonitor.worked(num - nodes.size());
    520522
     
    531533                rds.readMultiObjects(OsmPrimitiveType.NODE, versionMap, subMonitor);
    532534                subMonitor.finishTask();
    533535                final DataSet history = rds.parseOsm(progressMonitor.createSubTaskMonitor(0, false));
     536                ds.update(() -> updateNodes(progressMonitor, nodes, versionMap, history));
    534537                versionMap.replaceAll((key, value) -> value - 1);
    535538                versionMap.values().removeIf(i -> i <= 0);
    536                 ds.update(() -> updateNodes(progressMonitor, nodes, versionMap, history));
    537539                if (progressMonitor.isCanceled()) {
    538540                    break;
    539541                }
     
    554556        for (Node n : nodes) {
    555557            if (!n.isDeleted() && !n.isLatLonKnown()) {
    556558                final Node historyNode = (Node) history.getPrimitiveById(n);
    557                 if (historyNode != null && historyNode.isLatLonKnown()
    558                         && changeset.getClosedAt().isAfter(historyNode.getInstant())) {
    559                     n.load(historyNode.save());
    560                     versionMap.remove(n.getUniqueId());
    561                     progressMonitor.worked(1);
     559                if (historyNode != null) {
     560                    if (historyNode.isLatLonKnown()
     561                            && changeset.getClosedAt().isAfter(historyNode.getInstant())) {
     562                        n.load(historyNode.save());
     563                        versionMap.remove(n.getUniqueId());
     564                        progressMonitor.worked(1);
     565                    } else {
     566                        versionMap.put(n.getId(), historyNode.getVersion());
     567                    }
    562568                }
    563569            }
    564570            if (progressMonitor.isCanceled()) {