Bug 577782: [Preferences] Fix final deletetion in
PreferenceUtils.mergeNode

Change-Id: Ia381c5c76aca19aba284307545d4f086749ae746
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 b8c6f91..dc9f0ca 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,6 +135,8 @@
 	}
 	
 	
+	private static final String MIGRATED_KEY= "migrated"; //$NON-NLS-1$
+	
 	public static boolean mergeNode(final String fromQualifier, final String toQualifier,
 			final boolean deleteFinally)
 			throws BackingStoreException {
@@ -143,11 +145,14 @@
 			return false;
 		}
 		final var fromNode= scope.getNode(fromQualifier);
-		if (fromNode.getBoolean("migrated", false)) { //$NON-NLS-1$
+		if (!deleteFinally && fromNode.getBoolean(MIGRATED_KEY, false)) {
 			return false;
 		}
 		final var toNode= scope.getNode(toQualifier);
 		for (final String key : fromNode.keys()) {
+			if (key.equals(MIGRATED_KEY)) {
+				continue;
+			}
 			final String value= fromNode.get(key, null);
 			if (value != null && toNode.get(key, null) == null) {
 				toNode.put(key, value);
@@ -162,7 +167,7 @@
 			parent.flush();
 		}
 		else {
-			fromNode.putBoolean("migrated", true); //$NON-NLS-1$
+			fromNode.putBoolean(MIGRATED_KEY, true); //$NON-NLS-1$
 			fromNode.flush();
 		}
 		return true;