Ticket #8660: 8660.patch

File 8660.patch, 2.1 KB (added by GerdP, 6 years ago)

Please review: This patch suppresses useless conflicts which are typical when you revert a changeset that was already reverted by a more recent cs

  • src/reverter/ChangesetReverter.java

     
    1212import java.util.HashSet;
    1313import java.util.Iterator;
    1414import java.util.List;
     15import java.util.Set;
    1516
     17import org.openstreetmap.josm.command.ChangeCommand;
    1618import org.openstreetmap.josm.command.Command;
    1719import org.openstreetmap.josm.command.DeleteCommand;
    1820import org.openstreetmap.josm.command.conflict.ConflictAddCommand;
     
    345347        DataSetCommandMerger merger = new DataSetCommandMerger(nds, ds);
    346348        cmds.addAll(merger.getCommandList());
    347349
     350        // Create a set of objects that will be modified by the merge commands
     351        Set<OsmPrimitive> modified = new HashSet<>();
     352        for (Command cmd : cmds) {
     353                if (cmd instanceof ChangeCommand) {
     354                        modified.add(((ChangeCommand) cmd).getOsmPrimitive());
     355                }
     356        }
     357
    348358        //////////////////////////////////////////////////////////////////////////
    349359        // Create a set of objects to be deleted
    350360
     
    386396                    /* Don't create conflict if changeset object and dataset object
    387397                     * has same semantic attributes (but different versions) */
    388398                    !hasEqualSemanticAttributes(dp, hp)
     399                    // Don't create conflict for object which is not changed or deleted
     400                    && (modified.contains(dp) || toDelete.contains(dp))
    389401                    /* Don't create conflict if the object has to be deleted but has already been deleted */
    390402                    && !(toDelete.contains(dp) && dp.isDeleted())) {
    391                 cmds.add(new ConflictAddCommand(layer.data, createConflict(dp,
    392                         entry.getModificationType() == ChangesetModificationType.CREATED)));
    393                 conflicted.add(dp);
     403                cmds.add(new ConflictAddCommand(layer.data,
     404                                createConflict(dp, entry.getModificationType() == ChangesetModificationType.CREATED)));
     405                conflicted.add(dp);
    394406            }
    395407        }
    396408