Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/GitMoveDeleteHookTest.java27
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/synchronize/GitSubscriberMergeContextTest.java7
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java16
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferenceInitializer.java1
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferences.java6
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/GitMoveDeleteHook.java4
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java3
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/CommittingPreferencePage.java48
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties1
9 files changed, 107 insertions, 6 deletions
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/GitMoveDeleteHookTest.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/GitMoveDeleteHookTest.java
index 354641c82c..4013435668 100644
--- a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/GitMoveDeleteHookTest.java
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/GitMoveDeleteHookTest.java
@@ -30,6 +30,8 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.egit.core.op.AddToIndexOperation;
import org.eclipse.egit.core.project.RepositoryMapping;
import org.eclipse.egit.core.test.TestProject;
@@ -51,11 +53,18 @@ import org.eclipse.jgit.util.SystemReader;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
/**
* All sorts of interesting cases
*/
+@RunWith(Theories.class)
public class GitMoveDeleteHookTest {
+ @DataPoints
+ public static boolean[] autoStageDeletions = { true, false };
TestUtils testUtils = new TestUtils();
@@ -139,8 +148,13 @@ public class GitMoveDeleteHookTest {
return project;
}
- @Test
- public void testDeleteFile() throws Exception {
+ @Theory
+ public void testDeleteFile(boolean autoStageDelete) throws Exception {
+ IEclipsePreferences p = InstanceScope.INSTANCE
+ .getNode(Activator.getPluginId());
+ p.putBoolean(GitCorePreferences.core_autoStageDeletion,
+ autoStageDelete);
+
TestProject project = initRepoInsideProjectInsideWorkspace();
testUtils.addFileToProject(project.getProject(), "file.txt",
"some text");
@@ -168,8 +182,13 @@ public class GitMoveDeleteHookTest {
// Check index for the deleted file
dirCache.read();
- assertEquals(1, dirCache.getEntryCount());
- assertNull(dirCache.getEntry("file.txt"));
+ if (autoStageDelete) {
+ assertEquals(1, dirCache.getEntryCount());
+ assertNull(dirCache.getEntry("file.txt"));
+ } else {
+ assertEquals(2, dirCache.getEntryCount());
+ assertNotNull(dirCache.getEntry("file.txt"));
+ }
assertNotNull(dirCache.getEntry("file2.txt"));
// Actual file is deleted
assertFalse(file.exists());
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/synchronize/GitSubscriberMergeContextTest.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/synchronize/GitSubscriberMergeContextTest.java
index e2e8cc7786..3f112e3f96 100644
--- a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/synchronize/GitSubscriberMergeContextTest.java
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/synchronize/GitSubscriberMergeContextTest.java
@@ -26,6 +26,10 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.egit.core.Activator;
+import org.eclipse.egit.core.GitCorePreferences;
import org.eclipse.egit.core.project.RepositoryMapping;
import org.eclipse.egit.core.test.TestRepository;
import org.eclipse.egit.core.test.TestUtils;
@@ -347,6 +351,9 @@ public class GitSubscriberMergeContextTest extends ModelTestCase {
@Test
public void mergeModelWithDeletedFileNoConflict() throws Exception {
+ IEclipsePreferences p = InstanceScope.INSTANCE
+ .getNode(Activator.getPluginId());
+ p.putBoolean(GitCorePreferences.core_autoStageDeletion, true);
File file1 = testRepo.createFile(iProject, "file1."
+ SAMPLE_FILE_EXTENSION);
File file2 = testRepo.createFile(iProject, "file2."
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java
index 6973e18564..aa82709ae8 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/Activator.java
@@ -635,6 +635,22 @@ public class Activator extends Plugin implements DebugOptionsListener {
true));
}
+ /**
+ * @return {@code true} if files that get deleted should be automatically
+ * staged
+ * @since 4.6
+ */
+ public static boolean autoStageDeletion() {
+ IEclipsePreferences d = DefaultScope.INSTANCE
+ .getNode(Activator.getPluginId());
+ IEclipsePreferences p = InstanceScope.INSTANCE
+ .getNode(Activator.getPluginId());
+ boolean autoStageDeletion = p.getBoolean(
+ GitCorePreferences.core_autoStageDeletion,
+ d.getBoolean(GitCorePreferences.core_autoStageDeletion, false));
+ return autoStageDeletion;
+ }
+
private static class IgnoreDerivedResources implements
IResourceChangeListener {
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferenceInitializer.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferenceInitializer.java
index 64132bff59..80bcfd8616 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferenceInitializer.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferenceInitializer.java
@@ -29,6 +29,7 @@ public class GitCorePreferenceInitializer extends AbstractPreferenceInitializer
p.putInt(GitCorePreferences.core_streamFileThreshold, 50 * MB);
p.putBoolean(GitCorePreferences.core_autoShareProjects, true);
p.putBoolean(GitCorePreferences.core_autoIgnoreDerivedResources, true);
+ p.putBoolean(GitCorePreferences.core_autoStageDeletion, false);
String defaultRepoDir = RepositoryUtil.getDefaultDefaultRepositoryDir();
p.put(GitCorePreferences.core_defaultRepositoryDir, defaultRepoDir);
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferences.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferences.java
index 8c8d93a259..a3c81250fc 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferences.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferences.java
@@ -56,4 +56,10 @@ public class GitCorePreferences {
* to let JGit use its default behavior.
*/
public static final String core_preferredMergeStrategy_Default = "jgit-default-mergeStrategy"; //$NON-NLS-1$
+
+ /**
+ * if {@code true} file deletions are automatically staged by
+ * GitMoveDeleteHook
+ */
+ public static final String core_autoStageDeletion = "core_auto_stage_deletion"; //$NON-NLS-1$
}
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitMoveDeleteHook.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitMoveDeleteHook.java
index 2782b9b4d2..95acf74f6b 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/GitMoveDeleteHook.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/GitMoveDeleteHook.java
@@ -61,6 +61,10 @@ class GitMoveDeleteHook implements IMoveDeleteHook {
@Override
public boolean deleteFile(final IResourceTree tree, final IFile file,
final int updateFlags, final IProgressMonitor monitor) {
+ if (!org.eclipse.egit.core.Activator.autoStageDeletion()) {
+ return false;
+ }
+
// Linked resources are not files, hence not tracked by git
if (file.isLinked())
return false;
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
index 7696a70f03..28a0380760 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
@@ -3247,6 +3247,9 @@ public class UIText extends NLS {
public static String CommittingPreferencePage_AlwaysUseStagingView;
/** */
+ public static String CommittingPreferencePage_autoStageDeletion;
+
+ /** */
public static String CommittingPreferencePage_AutoStageOnCommit;
/** */
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/CommittingPreferencePage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/CommittingPreferencePage.java
index da563546ec..1482458763 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/CommittingPreferencePage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/CommittingPreferencePage.java
@@ -10,6 +10,12 @@
*******************************************************************************/
package org.eclipse.egit.ui.internal.preferences;
+import java.io.IOException;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.egit.core.GitCorePreferences;
import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.PluginPreferenceInitializer;
import org.eclipse.egit.ui.UIPreferences;
@@ -22,7 +28,9 @@ import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.Policy;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
@@ -34,6 +42,7 @@ import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
/** Preferences for committing with commit dialog/staging view. */
public class CommittingPreferencePage extends FieldEditorPreferencePage
@@ -55,6 +64,8 @@ public class CommittingPreferencePage extends FieldEditorPreferencePage
private Group generalGroup;
+ private ScopedPreferenceStore corePreferences;
+
/** */
public CommittingPreferencePage() {
super(GRID);
@@ -63,7 +74,14 @@ public class CommittingPreferencePage extends FieldEditorPreferencePage
@Override
public void init(IWorkbench workbench) {
- // Nothing to do
+ corePreferences = new ScopedPreferenceStore(InstanceScope.INSTANCE,
+ org.eclipse.egit.core.Activator.getPluginId());
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ corePreferences = null;
}
@Override
@@ -104,6 +122,18 @@ public class CommittingPreferencePage extends FieldEditorPreferencePage
UIText.CommittingPreferencePage_includeUntrackedFilesTooltip);
addField(includeUntracked);
+ BooleanFieldEditor autoStageDeletion = new BooleanFieldEditor(
+ GitCorePreferences.core_autoStageDeletion,
+ UIText.CommittingPreferencePage_autoStageDeletion,
+ generalGroup) {
+
+ @Override
+ public IPreferenceStore getPreferenceStore() {
+ return corePreferences;
+ }
+ };
+ addField(autoStageDeletion);
+
IntegerFieldEditor historySize = new IntegerFieldEditor(
UIPreferences.COMMIT_DIALOG_HISTORY_SIZE,
UIText.CommittingPreferencePage_commitMessageHistory,
@@ -263,7 +293,21 @@ public class CommittingPreferencePage extends FieldEditorPreferencePage
warnCheckbox.getSelection());
doGetPreferenceStore().setValue(UIPreferences.BLOCK_COMMIT,
blockCheckbox.getSelection());
- return super.performOk();
+ boolean isOk = super.performOk();
+ if (isOk && corePreferences.needsSaving()) {
+ try {
+ corePreferences.save();
+ } catch (IOException e) {
+ String message = JFaceResources.format(
+ "PreferenceDialog.saveErrorMessage", getTitle(), //$NON-NLS-1$
+ e.getMessage());
+ Policy.getStatusHandler().show(
+ new Status(IStatus.ERROR, Policy.JFACE, message, e),
+ JFaceResources
+ .getString("PreferenceDialog.saveErrorTitle")); //$NON-NLS-1$
+ }
+ }
+ return isOk;
}
private Group createGroup(Composite parent, int numColumns) {
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
index 90490dac69..2830767c54 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
@@ -1044,6 +1044,7 @@ CommittingPreferencePage_WarnBlock_WarningsAndErrors=Warnings and errors
CommittingPreferencePage_BlockCommit=Block commit button
CommittingPreferencePage_BlockCommitCombo=Block if there are:
CommittingPreferencePage_AlwaysUseStagingView=Use Staging View to commit instead of Commit Dialog
+CommittingPreferencePage_autoStageDeletion=Automatically stage files being deleted
CommittingPreferencePage_AutoStageOnCommit=Automatically stage selected resources on commit
CommittingPreferencePage_general=General

Back to the top