[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#682478: marked as done (unblock: josm/0.0.svn5267+dfsg1-2)



Your message dated Thu, 26 Jul 2012 13:17:52 +0200
with message-id <50112760.3020605@thykier.net>
and subject line Re: Bug#682478: unblock: josm/0.0.svn5267+dfsg1-2
has caused the Debian Bug report #682478,
regarding unblock: josm/0.0.svn5267+dfsg1-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
682478: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=682478
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package josm 0.0.svn5267+dfsg1-2.

It fixes #682315 which, even if not RC, would make the package almost unusable
in wheezy.

OpenStreetMap has undergone a license change in its data, so some data was
removed/hidden, and the current JOSM in wheezy is unable to deal with that. The
reporter proposed to package a newer upstream version, but I managed to
backport the needed fixes to the version in wheezy.

Please find the diff attached (there are also some patch renames there, sorry
for the noise).

unblock josm/0.0.svn5267+dfsg1-2

Thanks for your work,
David

-- 
 . ''`.   Debian developer | http://wiki.debian.org/DavidPaleino
 : :'  : Linuxer #334216 --|-- http://www.hanskalabs.net/
 `. `'`  GPG: 1392B174 ----|---- http://deb.li/dapal
   `-   2BAB C625 4E66 E7B8 450A C3E1 E6AA 9017 1392 B174
diff --git a/debian/changelog b/debian/changelog
index e879535..f548210 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+josm (0.0.svn5267+dfsg1-2) unstable; urgency=low
+
+  * Backported patches from upstream repository, to handle recent
+    OSM license change (Closes: #682315)
+      - 06-handle_redacted_objects.patch
+      - 07-handle_deleted_nodes_without_coordinates.patch
+
+ -- David Paleino <dapal@debian.org>  Mon, 23 Jul 2012 10:16:59 +0200
+
 josm (0.0.svn5267+dfsg1-1) unstable; urgency=low
 
   * New tested snapshot
diff --git a/debian/patches/10-build.patch b/debian/patches/00-build.patch
similarity index 100%
rename from debian/patches/10-build.patch
rename to debian/patches/00-build.patch
diff --git a/debian/patches/20-bts.patch b/debian/patches/01-bts.patch
similarity index 100%
rename from debian/patches/20-bts.patch
rename to debian/patches/01-bts.patch
diff --git a/debian/patches/40-elemstyles.patch b/debian/patches/02-elemstyles.patch
similarity index 100%
rename from debian/patches/40-elemstyles.patch
rename to debian/patches/02-elemstyles.patch
diff --git a/debian/patches/70-default_look_and_feel.patch b/debian/patches/03-default_look_and_feel.patch
similarity index 100%
rename from debian/patches/70-default_look_and_feel.patch
rename to debian/patches/03-default_look_and_feel.patch
diff --git a/debian/patches/80-fix_images.patch b/debian/patches/04-fix_images.patch
similarity index 100%
rename from debian/patches/80-fix_images.patch
rename to debian/patches/04-fix_images.patch
diff --git a/debian/patches/90-fix_version.patch b/debian/patches/05-fix_version.patch
similarity index 100%
rename from debian/patches/90-fix_version.patch
rename to debian/patches/05-fix_version.patch
diff --git a/debian/patches/06-handle_redacted_objects.patch b/debian/patches/06-handle_redacted_objects.patch
new file mode 100644
index 0000000..3ce0066
--- /dev/null
+++ b/debian/patches/06-handle_redacted_objects.patch
@@ -0,0 +1,46 @@
+From: Don-vip
+Subject: handle redacted objects resulting from OSM License change process
+Origin: upstream, http://josm.openstreetmap.de/changeset/5339/josm
+ upstream, http://josm.openstreetmap.de/changeset/5340/josm
+Bug-Debian: http://bugs.debian.org/682315
+
+---
+ src/org/openstreetmap/josm/data/osm/history/History.java        |   14 ++++++++++
+ src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java |    5 +++
+ 2 files changed, 19 insertions(+)
+
+--- josm.orig/src/org/openstreetmap/josm/data/osm/history/History.java
++++ josm/src/org/openstreetmap/josm/data/osm/history/History.java
+@@ -230,4 +230,18 @@ public class History{
+     public OsmPrimitiveType getType() {
+         return type;
+     }
++
++    @Override
++    public String toString() {
++        String result = "History ["
++                + (type != null ? "type=" + type + ", " : "") + "id=" + id;
++        if (versions != null) {
++            result += ", versions=\n";
++            for (HistoryOsmPrimitive v : versions) {
++                result += "\t" + v + ",\n";
++            }
++        }
++        result += "]";
++        return result;
++    }
+ }
+--- josm.orig/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
++++ josm/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
+@@ -161,6 +161,11 @@ public class HistoryBrowserModel extends
+         if (history.getByVersion(primitive.getVersion()) != null)
+             return primitive.isModified();
+ 
++        // if latest version from history is higher than a non existing primitive version,
++        // that means this version has been redacted and the primitive cannot be used.
++        if (history.getLatest().getVersion() > primitive.getVersion())
++            return false;
++
+         // latest has a higher version than one of the primitives
+         // in the history (probably because the history got out of sync
+         // with uploaded data) -> show the primitive as latest
diff --git a/debian/patches/07-handle_deleted_nodes_without_coordinates.patch b/debian/patches/07-handle_deleted_nodes_without_coordinates.patch
new file mode 100644
index 0000000..0c68898
--- /dev/null
+++ b/debian/patches/07-handle_deleted_nodes_without_coordinates.patch
@@ -0,0 +1,503 @@
+From: Frederik Ramm <frederik@remote.org>
+ Don-vip
+Subject: Handle deleted nodes without coordinates after recent OSM API change
+Origin: upstream, http://josm.openstreetmap.de/changeset/5326/josm
+ upstream, http://josm.openstreetmap.de/changeset/5328/josm
+ upstream, http://josm.openstreetmap.de/changeset/5332/josm
+ upstream, http://josm.openstreetmap.de/changeset/5333/josm
+ upstream, http://josm.openstreetmap.de/changeset/5334/josm
+ upstream, http://josm.openstreetmap.de/changeset/5346/josm
+ upstream, http://josm.openstreetmap.de/changeset/5349/josm
+ upstream, http://josm.openstreetmap.de/changeset/5350/josm
+ upstream, http://josm.openstreetmap.de/changeset/5351/josm
+ upstream, http://josm.openstreetmap.de/changeset/5356/josm
+Bug-Debian: http://bugs.debian.org/682315
+
+---
+ src/org/openstreetmap/josm/data/osm/DataSetMerger.java                      |   17 +++--
+ src/org/openstreetmap/josm/data/osm/DatasetConsistencyTest.java             |   10 +--
+ src/org/openstreetmap/josm/data/osm/Node.java                               |   17 ++---
+ src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java |   14 ++--
+ src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java         |   27 +++++---
+ src/org/openstreetmap/josm/gui/DefaultNameFormatter.java                    |   18 +++--
+ src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java          |   14 ++--
+ src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java            |   32 +++++++---
+ src/org/openstreetmap/josm/io/GeoJSONWriter.java                            |    4 -
+ src/org/openstreetmap/josm/io/OsmChangesetContentParser.java                |   13 ++--
+ src/org/openstreetmap/josm/io/OsmHistoryReader.java                         |   13 ++--
+ src/org/openstreetmap/josm/io/OsmReader.java                                |    6 +
+ src/org/openstreetmap/josm/io/OsmWriter.java                                |    4 -
+ 13 files changed, 118 insertions(+), 71 deletions(-)
+
+--- josm.orig/src/org/openstreetmap/josm/data/osm/Node.java
++++ josm/src/org/openstreetmap/josm/data/osm/Node.java
+@@ -33,16 +33,12 @@ public final class Node extends OsmPrimi
+ 
+     @Override
+     public final void setCoor(LatLon coor) {
+-        if(coor != null){
+-            updateCoor(coor, null);
+-        }
++        updateCoor(coor, null);
+     }
+ 
+     @Override
+     public final void setEastNorth(EastNorth eastNorth) {
+-        if(eastNorth != null) {
+-            updateCoor(null, eastNorth);
+-        }
++        updateCoor(null, eastNorth);
+     }
+ 
+     private void updateCoor(LatLon coor, EastNorth eastNorth) {
+@@ -112,8 +108,11 @@ public final class Node extends OsmPrimi
+             this.lon = ll.lon();
+             this.east = eastNorth.east();
+             this.north = eastNorth.north();
+-        } else
+-            throw new IllegalArgumentException();
++        } else {
++            this.lat = Double.NaN;
++            this.lon = Double.NaN;
++            invalidateEastNorthCache();
++        }
+     }
+ 
+     protected Node(long id, boolean allowNegative) {
+@@ -177,7 +176,7 @@ public final class Node extends OsmPrimi
+     @Override
+     void setDataset(DataSet dataSet) {
+         super.setDataset(dataSet);
+-        if (!isIncomplete() && (getCoor() == null || getEastNorth() == null))
++        if (!isIncomplete() && isVisible() && (getCoor() == null || getEastNorth() == null))
+             throw new DataIntegrityProblemException("Complete node with null coordinates: " + toString() + get3892DebugInfo());
+     }
+ 
+--- josm.orig/src/org/openstreetmap/josm/io/OsmReader.java
++++ josm/src/org/openstreetmap/josm/io/OsmReader.java
+@@ -177,7 +177,11 @@ public class OsmReader extends AbstractR
+ 
+     protected Node parseNode() throws XMLStreamException {
+         NodeData nd = new NodeData();
+-        nd.setCoor(new LatLon(Double.parseDouble(parser.getAttributeValue(null, "lat")), Double.parseDouble(parser.getAttributeValue(null, "lon"))));
++        String lat = parser.getAttributeValue(null, "lat");
++        String lon = parser.getAttributeValue(null, "lon");
++        if (lat != null && lon != null) {
++            nd.setCoor(new LatLon(Double.parseDouble(lat), Double.parseDouble(lon)));
++        }
+         readCommon(nd);
+         Node n = new Node(nd.getId(), nd.getVersion());
+         n.setVisible(nd.isVisible());
+--- josm.orig/src/org/openstreetmap/josm/io/OsmWriter.java
++++ josm/src/org/openstreetmap/josm/io/OsmWriter.java
+@@ -135,7 +135,9 @@ public class OsmWriter extends XmlWriter
+     public void visit(INode n) {
+         if (n.isIncomplete()) return;
+         addCommon(n, "node");
+-        out.print(" lat='"+n.getCoor().lat()+"' lon='"+n.getCoor().lon()+"'");
++        if (n.getCoor() != null) {
++            out.print(" lat='"+n.getCoor().lat()+"' lon='"+n.getCoor().lon()+"'");
++        }
+         if (!withBody) {
+             out.println("/>");
+         } else {
+--- josm.orig/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java
++++ josm/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java
+@@ -18,6 +18,7 @@ import java.util.Set;
+ 
+ import org.openstreetmap.josm.Main;
+ import org.openstreetmap.josm.data.coor.CoordinateFormat;
++import org.openstreetmap.josm.data.coor.LatLon;
+ import org.openstreetmap.josm.data.osm.Changeset;
+ import org.openstreetmap.josm.data.osm.IPrimitive;
+ import org.openstreetmap.josm.data.osm.IRelation;
+@@ -178,7 +179,9 @@ public class DefaultNameFormatter implem
+             } else {
+                 preset.nameTemplate.appendText(name, node);
+             }
+-            name.append(" \u200E(").append(node.getCoor().latToString(CoordinateFormat.getDefaultFormat())).append(", ").append(node.getCoor().lonToString(CoordinateFormat.getDefaultFormat())).append(")");
++            if (node.getCoor() != null) {
++                name.append(" \u200E(").append(node.getCoor().latToString(CoordinateFormat.getDefaultFormat())).append(", ").append(node.getCoor().lonToString(CoordinateFormat.getDefaultFormat())).append(")");
++            }
+         }
+         decorateNameWithId(name, node);
+ 
+@@ -553,11 +556,14 @@ public class DefaultNameFormatter implem
+         } else {
+             sb.append(name);
+         }
+-        sb.append(" (")
+-        .append(node.getCoords().latToString(CoordinateFormat.getDefaultFormat()))
+-        .append(", ")
+-        .append(node.getCoords().lonToString(CoordinateFormat.getDefaultFormat()))
+-        .append(")");
++        LatLon coord = node.getCoords();
++        if (coord != null) {
++            sb.append(" (")
++            .append(coord.latToString(CoordinateFormat.getDefaultFormat()))
++            .append(", ")
++            .append(coord.lonToString(CoordinateFormat.getDefaultFormat()))
++            .append(")");
++        }
+         decorateNameWithId(sb, node);
+         return sb.toString();
+     }
+--- josm.orig/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
++++ josm/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
+@@ -272,12 +272,14 @@ public class InspectPrimitiveDialog exte
+         }
+ 
+         void addCoordinates(Node n) {
+-            add(tr("Coordinates: "),
+-                    Double.toString(n.getCoor().lat()), ", ",
+-                    Double.toString(n.getCoor().lon()));
+-            add(tr("Coordinates (projected): "),
+-                    Double.toString(n.getEastNorth().east()), ", ",
+-                    Double.toString(n.getEastNorth().north()));
++            if (n.getCoor() != null) {
++                add(tr("Coordinates: "),
++                        Double.toString(n.getCoor().lat()), ", ",
++                        Double.toString(n.getCoor().lon()));
++                add(tr("Coordinates (projected): "),
++                        Double.toString(n.getEastNorth().east()), ", ",
++                        Double.toString(n.getEastNorth().north()));
++            }
+         }
+ 
+         void addReferrers(StringBuilder s, OsmPrimitive o) {
+--- josm.orig/src/org/openstreetmap/josm/data/osm/DatasetConsistencyTest.java
++++ josm/src/org/openstreetmap/josm/data/osm/DatasetConsistencyTest.java
+@@ -69,7 +69,7 @@ public class DatasetConsistencyTest {
+ 
+     public void checkCompleteNodesWithoutCoordinates() {
+         for (Node node:dataSet.getNodes()) {
+-            if (!node.isIncomplete() && (node.getCoor() == null || node.getEastNorth() == null)) {
++            if (!node.isIncomplete() && node.isVisible() && (node.getCoor() == null || node.getEastNorth() == null)) {
+                 printError("COMPLETE WITHOUT COORDINATES", "%s is not incomplete but has null coordinates", node);
+             }
+         }
+@@ -79,9 +79,11 @@ public class DatasetConsistencyTest {
+         for (Node n:dataSet.getNodes()) {
+             if (!n.isIncomplete() && !n.isDeleted()) {
+                 LatLon c = n.getCoor();
+-                BBox box = new BBox(new LatLon(c.lat() - 0.0001, c.lon() - 0.0001), new LatLon(c.lat() + 0.0001, c.lon() + 0.0001));
+-                if (!dataSet.searchNodes(box).contains(n)) {
+-                    printError("SEARCH NODES", "%s not found using Dataset.searchNodes()", n);
++                if (c != null) {
++                    BBox box = new BBox(new LatLon(c.lat() - 0.0001, c.lon() - 0.0001), new LatLon(c.lat() + 0.0001, c.lon() + 0.0001));
++                    if (!dataSet.searchNodes(box).contains(n)) {
++                        printError("SEARCH NODES", "%s not found using Dataset.searchNodes()", n);
++                    }
+                 }
+             }
+         }
+--- josm.orig/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java
++++ josm/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java
+@@ -14,6 +14,7 @@ import javax.swing.JLabel;
+ import javax.swing.JPanel;
+ 
+ import org.openstreetmap.josm.data.coor.CoordinateFormat;
++import org.openstreetmap.josm.data.coor.LatLon;
+ import org.openstreetmap.josm.data.osm.history.HistoryNode;
+ import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
+ import org.openstreetmap.josm.gui.NavigatableComponent;
+@@ -255,19 +256,24 @@ public class CoordinateInfoViewer extend
+             HistoryNode node = (HistoryNode)p;
+             HistoryNode oppositeNode = (HistoryNode) opposite;
+ 
++            LatLon coord = node.getCoords();
++            LatLon oppositeCoord = oppositeNode.getCoords();
++
+             // display the coordinates
+             //
+-            lblLat.setText(node.getCoords().latToString(CoordinateFormat.DECIMAL_DEGREES));
+-            lblLon.setText(node.getCoords().lonToString(CoordinateFormat.DECIMAL_DEGREES));
++            lblLat.setText(coord != null ? coord.latToString(CoordinateFormat.DECIMAL_DEGREES) : tr("(none)"));
++            lblLon.setText(coord != null ? coord.lonToString(CoordinateFormat.DECIMAL_DEGREES) : tr("(none)"));
+ 
+             // update background color to reflect differences in the coordinates
+             //
+-            if (node.getCoords().lat() == oppositeNode.getCoords().lat()) {
++            if (coord == oppositeCoord ||
++                    (coord != null && oppositeCoord != null && coord.lat() == oppositeCoord.lat())) {
+                 lblLat.setBackground(Color.WHITE);
+             } else {
+                 lblLat.setBackground(BGCOLOR_DIFFERENCE);
+             }
+-            if (node.getCoords().lon() == oppositeNode.getCoords().lon()) {
++            if (coord == oppositeCoord ||
++                    (coord != null && oppositeCoord != null && coord.lon() == oppositeCoord.lon())) {
+                 lblLon.setBackground(Color.WHITE);
+             } else {
+                 lblLon.setBackground(BGCOLOR_DIFFERENCE);
+@@ -321,15 +327,23 @@ public class CoordinateInfoViewer extend
+             HistoryNode node = (HistoryNode) p;
+             HistoryNode oppositeNode = (HistoryNode) opposite;
+ 
++            LatLon coord = node.getCoords();
++            LatLon oppositeCoord = oppositeNode.getCoords();
++
+             // update distance
+             //
+-            double distance = node.getCoords().greatCircleDistance(oppositeNode.getCoords());
+-            if (distance > 0) {
+-                lblDistance.setBackground(BGCOLOR_DIFFERENCE);
++            if (coord != null && oppositeCoord != null) {
++                double distance = coord.greatCircleDistance(oppositeNode.getCoords());
++                if (distance > 0) {
++                    lblDistance.setBackground(BGCOLOR_DIFFERENCE);
++                } else {
++                    lblDistance.setBackground(Color.WHITE);
++                }
++                lblDistance.setText(NavigatableComponent.getDistText(distance));
+             } else {
+-                lblDistance.setBackground(Color.WHITE);
++                lblDistance.setBackground(coord != oppositeCoord ? BGCOLOR_DIFFERENCE : Color.WHITE);
++                lblDistance.setText(tr("(none)"));
+             }
+-            lblDistance.setText(NavigatableComponent.getDistText(distance));
+         }
+     }
+ }
+--- josm.orig/src/org/openstreetmap/josm/io/GeoJSONWriter.java
++++ josm/src/org/openstreetmap/josm/io/GeoJSONWriter.java
+@@ -103,6 +103,8 @@ public class GeoJSONWriter implements Vi
+     }
+ 
+     protected void appendCoord(LatLon c) {
+-        out.append("[").append(c.lon()).append(", ").append(c.lat()).append("]");
++        if (c != null) {
++            out.append("[").append(c.lon()).append(", ").append(c.lat()).append("]");
++        }
+     }
+ }
+--- josm.orig/src/org/openstreetmap/josm/io/OsmChangesetContentParser.java
++++ josm/src/org/openstreetmap/josm/io/OsmChangesetContentParser.java
+@@ -102,16 +102,16 @@ public class OsmChangesetContentParser {
+             return l;
+         }
+ 
+-        protected Double getMandatoryAttributeDouble(Attributes attr, String name) throws SAXException{
++        protected Double getAttributeDouble(Attributes attr, String name) throws SAXException{
+             String v = attr.getValue(name);
+             if (v == null) {
+-                throwException(tr("Missing mandatory attribute ''{0}''.", name));
++                return null;
+             }
+             double d = 0.0;
+             try {
+                 d = Double.parseDouble(v);
+             } catch(NumberFormatException e) {
+-                throwException(tr("Illegal value for mandatory attribute ''{0}'' of type double. Got ''{1}''.", name, v));
++                throwException(tr("Illegal value for attribute ''{0}'' of type double. Got ''{1}''.", name, v));
+             }
+             return d;
+         }
+@@ -159,10 +159,11 @@ public class OsmChangesetContentParser {
+             Date timestamp = DateUtils.fromString(v);
+             HistoryOsmPrimitive primitive = null;
+             if (type.equals(OsmPrimitiveType.NODE)) {
+-                double lat = getMandatoryAttributeDouble(atts, "lat");
+-                double lon = getMandatoryAttributeDouble(atts, "lon");
++                Double lat = getAttributeDouble(atts, "lat");
++                Double lon = getAttributeDouble(atts, "lon");
++                LatLon coor = (lat != null && lon != null) ? new LatLon(lat,lon) : null;
+                 primitive = new HistoryNode(
+-                        id,version,visible,user,changesetId,timestamp, new LatLon(lat,lon)
++                        id,version,visible,user,changesetId,timestamp,coor
+                 );
+ 
+             } else if (type.equals(OsmPrimitiveType.WAY)) {
+--- josm.orig/src/org/openstreetmap/josm/io/OsmHistoryReader.java
++++ josm/src/org/openstreetmap/josm/io/OsmHistoryReader.java
+@@ -98,16 +98,16 @@ public class OsmHistoryReader {
+             return l;
+         }
+ 
+-        protected Double getMandatoryAttributeDouble(Attributes attr, String name) throws SAXException{
++        protected Double getAttributeDouble(Attributes attr, String name) throws SAXException{
+             String v = attr.getValue(name);
+             if (v == null) {
+-                throwException(tr("Missing mandatory attribute ''{0}''.", name));
++                return null;
+             }
+             double d = 0.0;
+             try {
+                 d = Double.parseDouble(v);
+             } catch(NumberFormatException e) {
+-                throwException(tr("Illegal value for mandatory attribute ''{0}'' of type double. Got ''{1}''.", name, v));
++                throwException(tr("Illegal value for attribute ''{0}'' of type double. Got ''{1}''.", name, v));
+             }
+             return d;
+         }
+@@ -153,10 +153,11 @@ public class OsmHistoryReader {
+             Date timestamp = DateUtils.fromString(v);
+             HistoryOsmPrimitive primitive = null;
+             if (type.equals(OsmPrimitiveType.NODE)) {
+-                double lat = getMandatoryAttributeDouble(atts, "lat");
+-                double lon = getMandatoryAttributeDouble(atts, "lon");
++                Double lat = getAttributeDouble(atts, "lat");
++                Double lon = getAttributeDouble(atts, "lon");
++                LatLon coord = (lat != null && lon != null) ? new LatLon(lat,lon) : null;
+                 primitive = new HistoryNode(
+-                        id,version,visible,user,changesetId,timestamp, new LatLon(lat,lon)
++                        id,version,visible,user,changesetId,timestamp,coord
+                 );
+ 
+             } else if (type.equals(OsmPrimitiveType.WAY)) {
+--- josm.orig/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
++++ josm/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
+@@ -178,8 +178,9 @@ public class DataSetMerger {
+ 
+                 List<OsmPrimitive> referrers = target.getReferrers();
+                 if (referrers.isEmpty()) {
+-                    target.setDeleted(true);
++                    resetPrimitive(target);
+                     target.mergeFrom(source);
++                    target.setDeleted(true);
+                     it.remove();
+                     flag = true;
+                 } else {
+@@ -202,11 +203,7 @@ public class DataSetMerger {
+             // There are some more objects rest in the objectsToDelete set
+             // This can be because of cross-referenced relations.
+             for (OsmPrimitive osm: objectsToDelete) {
+-                if (osm instanceof Way) {
+-                    ((Way) osm).setNodes(null);
+-                } else if (osm instanceof Relation) {
+-                    ((Relation) osm).setMembers(null);
+-                }
++                resetPrimitive(osm);
+             }
+             for (OsmPrimitive osm: objectsToDelete) {
+                 osm.setDeleted(true);
+@@ -215,6 +212,14 @@ public class DataSetMerger {
+         }
+     }
+ 
++    private final void resetPrimitive(OsmPrimitive osm) {
++        if (osm instanceof Way) {
++            ((Way) osm).setNodes(null);
++        } else if (osm instanceof Relation) {
++            ((Relation) osm).setMembers(null);
++        }
++    }
++
+     /**
+      * Merges the node list of a source way onto its target way.
+      *
+--- josm.orig/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
++++ josm/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
+@@ -137,33 +137,33 @@ public class WireframeMapRenderer extend
+            time to iterate through list twice, OTOH does not
+            require changing the colour while painting... */
+         for (final OsmPrimitive osm: data.searchRelations(bbox)) {
+-            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isDisabledAndHidden()) {
++            if (osm.isDrawable() && !ds.isSelected(osm) && !osm.isDisabledAndHidden()) {
+                 osm.visit(this);
+             }
+         }
+ 
+         for (final OsmPrimitive osm:data.searchWays(bbox)){
+-            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isDisabledAndHidden() && osm.isTagged()) {
++            if (osm.isDrawable() && !ds.isSelected(osm) && !osm.isDisabledAndHidden() && osm.isTagged()) {
+                 osm.visit(this);
+             }
+         }
+         displaySegments();
+ 
+         for (final OsmPrimitive osm:data.searchWays(bbox)){
+-            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isDisabledAndHidden() && !osm.isTagged()) {
++            if (osm.isDrawable() && !ds.isSelected(osm) && !osm.isDisabledAndHidden() && !osm.isTagged()) {
+                 osm.visit(this);
+             }
+         }
+         displaySegments();
+         for (final OsmPrimitive osm : data.getSelected()) {
+-            if (!osm.isDeleted()) {
++            if (osm.isDrawable()) {
+                 osm.visit(this);
+             }
+         }
+         displaySegments();
+ 
+         for (final OsmPrimitive osm: data.searchNodes(bbox)) {
+-            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isDisabledAndHidden())
++            if (osm.isDrawable() && !ds.isSelected(osm) && !osm.isDisabledAndHidden())
+             {
+                 osm.visit(this);
+             }
+@@ -343,7 +343,7 @@ public class WireframeMapRenderer extend
+         g.setColor(col);
+ 
+         for (RelationMember m : r.getMembers()) {
+-            if (m.getMember().isIncomplete() || m.getMember().isDeleted()) {
++            if (m.getMember().isIncomplete() || !m.getMember().isDrawable()) {
+                 continue;
+             }
+ 
+@@ -360,7 +360,7 @@ public class WireframeMapRenderer extend
+ 
+                 boolean first = true;
+                 for (Node n : m.getWay().getNodes()) {
+-                    if (n.isIncomplete() || n.isDeleted()) {
++                    if (!n.isDrawable()) {
+                         continue;
+                     }
+                     Point p = nc.getPoint(n);
+--- josm.orig/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
++++ josm/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
+@@ -43,35 +43,44 @@ public class DuplicateNode extends Test
+ 
+         double precision = Main.pref.getDouble("validator.duplicatenodes.precision", 0.);
+ 
+-        private LatLon RoundCoord(Node o) {
++        private LatLon roundCoord(LatLon coor) {
+             return new LatLon(
+-                    Math.round(o.getCoor().lat() / precision) * precision,
+-                    Math.round(o.getCoor().lon() / precision) * precision
++                    Math.round(coor.lat() / precision) * precision,
++                    Math.round(coor.lon() / precision) * precision
+                     );
+         }
+ 
+         @SuppressWarnings("unchecked")
+         private LatLon getLatLon(Object o) {
+             if (o instanceof Node) {
++                LatLon coor = ((Node) o).getCoor();
++                if (coor == null)
++                    return null;
+                 if (precision==0)
+-                    return ((Node) o).getCoor().getRoundedToOsmPrecision();
+-                return RoundCoord((Node) o);
++                    return coor.getRoundedToOsmPrecision();
++                return roundCoord(coor);
+             } else if (o instanceof List<?>) {
++                LatLon coor = ((List<Node>) o).get(0).getCoor();
++                if (coor == null)
++                    return null;
+                 if (precision==0)
+-                    return ((List<Node>) o).get(0).getCoor().getRoundedToOsmPrecision();
+-                return RoundCoord(((List<Node>) o).get(0));
++                    return coor.getRoundedToOsmPrecision();
++                return roundCoord(coor);
+             } else
+                 throw new AssertionError();
+         }
+ 
+         @Override
+         public boolean equals(Object k, Object t) {
+-            return getLatLon(k).equals(getLatLon(t));
++            LatLon coorK = getLatLon(k);
++            LatLon coorT = getLatLon(t);
++            return coorK == coorT || (coorK != null && coorT != null && coorK.equals(coorT));
+         }
+ 
+         @Override
+         public int getHashCode(Object k) {
+-            return getLatLon(k).hashCode();
++            LatLon coorK = getLatLon(k);
++            return coorK == null ? 0 : coorK.hashCode();
+         }
+     }
+ 
diff --git a/debian/patches/series b/debian/patches/series
index eacd6fc..8bdaa91 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,7 +1,9 @@
-10-build.patch
-20-bts.patch
-40-elemstyles.patch
-70-default_look_and_feel.patch
-80-fix_images.patch
-90-fix_version.patch
+00-build.patch
+01-bts.patch
+02-elemstyles.patch
+03-default_look_and_feel.patch
+04-fix_images.patch
+05-fix_version.patch
 #100-fix_SlippyMapBBoxChooser.patch
+06-handle_redacted_objects.patch
+07-handle_deleted_nodes_without_coordinates.patch

Attachment: signature.asc
Description: PGP signature


--- End Message ---
--- Begin Message ---
On 2012-07-23 10:40, David Paleino wrote:
> Package: release.debian.org
> Severity: normal
> User: release.debian.org@packages.debian.org
> Usertags: unblock
> 
> Please unblock package josm 0.0.svn5267+dfsg1-2.
> 
> It fixes #682315 which, even if not RC, would make the package almost unusable
> in wheezy.
> 
> OpenStreetMap has undergone a license change in its data, so some data was
> removed/hidden, and the current JOSM in wheezy is unable to deal with that. The
> reporter proposed to package a newer upstream version, but I managed to
> backport the needed fixes to the version in wheezy.
> 
> Please find the diff attached (there are also some patch renames there, sorry
> for the noise).
> 
> unblock josm/0.0.svn5267+dfsg1-2
> 
> Thanks for your work,
> David
> 

Unblocked, thanks for the fix.

~Niels

--- End Message ---

Reply to: