Changeset 35396 in osm for applications/editors/josm


Ignore:
Timestamp:
2020-03-26T08:24:51+01:00 (5 years ago)
Author:
gerdp
Message:

fix #josm16390: Can't undelete/restore a node when changeset contains multiple versions of it
When searching for the version that should be restored, ignore those which have visible=false

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete/UndeleteAction.java

    r34957 r35396  
    8383
    8484                        HistoryOsmPrimitive hPrimitive1 = h.getLatest();
    85                         HistoryOsmPrimitive hPrimitive2 = null;
    8685
    8786                        boolean visible = hPrimitive1.isVisible();
     
    103102                            restored.add(primitive);
    104103                        } else {
    105                             // We search n-1 version with redaction robustness
     104                            // We search latest visible version < n with redaction robustness
    106105                            long idx = 1;
    107106                            long n = hPrimitive1.getVersion();
    108                             while (hPrimitive2 == null && idx < n) {
     107                            HistoryOsmPrimitive hPrimitive2 = null;
     108                            while (idx < n) {
    109109                                hPrimitive2 = h.getByVersion(n - idx++);
     110                                if (hPrimitive2 != null && hPrimitive2.isVisible()) {
     111                                    // don't restore an invisible object
     112                                    break;
     113                                }
    110114                            }
    111115                            if (type == OsmPrimitiveType.NODE) {
    112116                                // We get version and user from the latest version,
    113                                 // coordinates and tags from n-1 version
     117                                // coordinates and tags from latest visible version < n
    114118                                Node node = new Node(id, (int) hPrimitive1.getVersion());
    115119
     
    122126                            } else if (type == OsmPrimitiveType.WAY) {
    123127                                // We get version and user from the latest version,
    124                                 // nodes and tags from n-1 version
     128                                // nodes and tags from latest visible version < n
    125129                                hPrimitive1 = h.getLatest();
    126130
Note: See TracChangeset for help on using the changeset viewer.