Bug 577782: [Preferences] Improve PreferenceUtils.mergeNode
Follow-up-to: e77da8eb6b1bec0cd010ca6e1b4aebaf467a6cf7
Change-Id: Ibf13d26e93ad6bba14a623db91b60a87a42f0a11
diff --git a/ecommons/org.eclipse.statet.ecommons.preferences.core/src/org/eclipse/statet/ecommons/preferences/core/PreferenceUtils.java b/ecommons/org.eclipse.statet.ecommons.preferences.core/src/org/eclipse/statet/ecommons/preferences/core/PreferenceUtils.java
index a3ac241..bcdf720 100644
--- a/ecommons/org.eclipse.statet.ecommons.preferences.core/src/org/eclipse/statet/ecommons/preferences/core/PreferenceUtils.java
+++ b/ecommons/org.eclipse.statet.ecommons.preferences.core/src/org/eclipse/statet/ecommons/preferences/core/PreferenceUtils.java
@@ -135,12 +135,15 @@
}
- public static boolean mergeNode(final String fromQualifier, final String toQualifier)
+ public static boolean mergeNode(final String fromQualifier, final String toQualifier,
+ final boolean deleteFinally)
throws BackingStoreException {
final IScopeContext scope= InstanceScope.INSTANCE;
if (scope.getNode("").nodeExists(fromQualifier)) { //$NON-NLS-1$
final var fromNode= scope.getNode(fromQualifier);
- final var fromParent= nonNullAssert(fromNode.parent());
+ if (fromNode.getBoolean("migrated", false)) { //$NON-NLS-1$
+ return false;
+ }
final var toNode= scope.getNode(toQualifier);
for (final String key : fromNode.keys()) {
final String value= fromNode.get(key, null);
@@ -150,8 +153,16 @@
}
toNode.flush();
- fromNode.removeNode();
- fromParent.flush();
+
+ if (deleteFinally) {
+ final var parent= nonNullAssert(fromNode.parent());
+ fromNode.removeNode();
+ parent.flush();
+ }
+ else {
+ fromNode.putBoolean("migrated", true); //$NON-NLS-1$
+ fromNode.flush();
+ }
return true;
}
return false;