Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CommitAction.java30
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java30
2 files changed, 59 insertions, 1 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CommitAction.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CommitAction.java
index 3038e8ee31..3ee292c696 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CommitAction.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CommitAction.java
@@ -16,9 +16,11 @@ import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.TimeZone;
@@ -136,6 +138,7 @@ public class CommitAction extends RepositoryAction {
commitDialog.setAmending(amending);
commitDialog.setAmendAllowed(amendAllowed);
commitDialog.setFileList(files);
+ commitDialog.setPreselectedFiles(getSelectedFiles());
commitDialog.setAuthor(author);
commitDialog.setCommitter(committer);
if(notTracked.size() == files.size())
@@ -169,6 +172,33 @@ public class CommitAction extends RepositoryAction {
previousCommit = null;
}
+ /**
+ * Retrieves a collection of files that may be committed based on the user's
+ * selection when they performed the commit action. That is, even if the
+ * user only selected one folder when the action was performed, if the
+ * folder contains any files that could be committed, they will be returned.
+ *
+ * @return a collection of files that is eligible to be committed based on
+ * the user's selection
+ */
+ private Collection<IFile> getSelectedFiles() {
+ List<IFile> preselectionCandidates = new ArrayList<IFile>();
+ // get the resources the user selected
+ IResource[] selectedResources = getSelectedResources();
+ // iterate through all the files that may be committed
+ for (IFile file : files) {
+ for (IResource resource : selectedResources) {
+ // if any selected resource contains the file, add it as a
+ // preselection candidate
+ if (resource.contains(file)) {
+ preselectionCandidates.add(file);
+ break;
+ }
+ }
+ }
+ return preselectionCandidates;
+ }
+
private void loadPreviousCommit() {
IProject project = getProjectsForSelectedResources()[0];
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java
index ad37752b21..da3a77c290 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java
@@ -15,6 +15,7 @@ package org.eclipse.egit.ui.internal.dialogs;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
@@ -26,6 +27,7 @@ import org.eclipse.compare.CompareUI;
import org.eclipse.compare.ITypedElement;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.egit.core.Activator;
@@ -193,6 +195,11 @@ public class CommitDialog extends Dialog {
CheckboxTableViewer filesViewer;
+ /**
+ * A collection of files that should be already checked in the table.
+ */
+ private Collection<IFile> preselectedFiles = Collections.emptyList();
+
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
@@ -355,9 +362,18 @@ public class CommitDialog extends Dialog {
filesViewer.setLabelProvider(new CommitLabelProvider());
filesViewer.addFilter(new CommitItemFilter());
filesViewer.setInput(items);
- filesViewer.setAllChecked(true);
filesViewer.getTable().setMenu(getContextMenu());
+ // pre-emptively check any preselected files
+ for (IFile selectedFile : preselectedFiles) {
+ for (CommitItem item : items) {
+ if (item.file.equals(selectedFile)) {
+ filesViewer.setChecked(item, true);
+ break;
+ }
+ }
+ }
+
container.pack();
return container;
}
@@ -564,6 +580,18 @@ public class CommitDialog extends Dialog {
return selectedFiles.toArray(new IFile[0]);
}
+ /**
+ * Sets the files that should be checked in this table.
+ *
+ * @param preselectedFiles
+ * the files to be checked in the dialog's table, must not be
+ * <code>null</code>
+ */
+ public void setPreselectedFiles(Collection<IFile> preselectedFiles) {
+ Assert.isNotNull(preselectedFiles);
+ this.preselectedFiles = preselectedFiles;
+ }
+
class HeaderSelectionListener extends SelectionAdapter {
private CommitItem.Order order;

Back to the top