Ticket #19783: 19783.patch
| File 19783.patch, 3.5 KB (added by , 5 years ago) |
|---|
-
src/org/openstreetmap/josm/data/osm/DataSetMerger.java
297 297 // found a corresponding target, remember it 298 298 mergedMap.put(source.getPrimitiveId(), target.getPrimitiveId()); 299 299 300 boolean mergeFromSource = false; 300 301 if (target.getVersion() > source.getVersion()) 301 302 // target.version > source.version => keep target version 302 303 return true; … … 305 306 // target is incomplete, source completes it 306 307 // => merge source into target 307 308 // 308 target.mergeFrom(source); 309 objectsWithChildrenToMerge.add(source.getPrimitiveId()); 309 mergeFromSource = true; 310 310 } else if (!target.isIncomplete() && source.isIncomplete()) { 311 311 // target is complete and source is incomplete 312 312 // => keep target, it has more information already … … 323 323 // We shouldn't merge that datasets. 324 324 throw new DataIntegrityProblemException(tr("Conflict in ''visible'' attribute for object of type {0} with id {1}", 325 325 target.getType(), target.getId())); 326 } else if (target.isDeleted() && source.isDeleted() && target.getVersion() < source.getVersion()) { 327 // both deleted. Source is newer. Take source. See #19783 328 mergeFromSource = true; 326 329 } else if (target.isDeleted() && !source.isDeleted() && target.getVersion() == source.getVersion()) { 327 330 // same version, but target is deleted. Assume target takes precedence 328 331 // otherwise too many conflicts when refreshing from the server … … 347 350 } else if (!target.isModified() && source.isModified()) { 348 351 // target not modified. We can assume that source is the most recent version. 349 352 // clone it into target. 350 target.mergeFrom(source); 351 objectsWithChildrenToMerge.add(source.getPrimitiveId()); 353 mergeFromSource = true; 352 354 } else if (!target.isModified() && !source.isModified() && target.getVersion() == source.getVersion()) { 353 355 // both not modified. Merge nevertheless. 354 356 // This helps when updating "empty" relations, see #4295 355 target.mergeFrom(source); 356 objectsWithChildrenToMerge.add(source.getPrimitiveId()); 357 mergeFromSource = true; 357 358 } else if (!target.isModified() && !source.isModified() && target.getVersion() < source.getVersion()) { 358 359 // my not modified but other is newer. clone other onto mine. 359 360 // 360 target.mergeFrom(source); 361 objectsWithChildrenToMerge.add(source.getPrimitiveId()); 361 mergeFromSource = true; 362 362 } else if (target.isModified() && !source.isModified() && target.getVersion() == source.getVersion()) { 363 363 // target is same as source but target is modified 364 364 // => keep target and reset modified flag if target and source are semantically equal … … 380 380 // technical attributes like timestamp or user information. Semantic 381 381 // attributes should already be equal if we get here. 382 382 // 383 mergeFromSource = true; 384 } 385 if (mergeFromSource) { 383 386 target.mergeFrom(source); 384 387 objectsWithChildrenToMerge.add(source.getPrimitiveId()); 385 388 }
