mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
vcs: Sync non-modal commit inclusion with "Local Changes" tree state (IDEA-212228)
GitOrigin-RevId: 9ad731ff7ff6d8ff8f35b1de3999863d6df6600b
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3930a4a656
commit
a35a9c1e32
@@ -49,6 +49,7 @@ import com.intellij.util.xmlb.annotations.XCollection;
|
||||
import com.intellij.vcs.commit.ChangesViewCommitPanel;
|
||||
import com.intellij.vcs.commit.ChangesViewCommitWorkflow;
|
||||
import com.intellij.vcs.commit.ChangesViewCommitWorkflowHandler;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -335,16 +336,18 @@ public class ChangesViewManager implements ChangesViewI, ProjectComponent, Persi
|
||||
if (!ProjectLevelVcsManager.getInstance(myProject).hasActiveVcss()) return;
|
||||
|
||||
ChangeListManagerImpl changeListManager = ChangeListManagerImpl.getInstanceImpl(myProject);
|
||||
List<LocalChangeList> changeLists = changeListManager.getChangeListsCopy();
|
||||
List<VirtualFile> unversionedFiles = changeListManager.getUnversionedFiles();
|
||||
|
||||
TreeModelBuilder treeModelBuilder = new TreeModelBuilder(myProject, myView.getGrouping())
|
||||
.setChangeLists(changeListManager.getChangeListsCopy(), Registry.is("vcs.skip.single.default.changelist"))
|
||||
.setChangeLists(changeLists, Registry.is("vcs.skip.single.default.changelist"))
|
||||
.setLocallyDeletedPaths(changeListManager.getDeletedFiles())
|
||||
.setModifiedWithoutEditing(changeListManager.getModifiedWithoutEditing())
|
||||
.setSwitchedFiles(changeListManager.getSwitchedFilesMap())
|
||||
.setSwitchedRoots(changeListManager.getSwitchedRoots())
|
||||
.setLockedFolders(changeListManager.getLockedFolders())
|
||||
.setLogicallyLockedFiles(changeListManager.getLogicallyLockedFolders())
|
||||
.setUnversioned(changeListManager.getUnversionedFiles());
|
||||
.setUnversioned(unversionedFiles);
|
||||
if (myState.myShowIgnored) {
|
||||
treeModelBuilder.setIgnored(changeListManager.getIgnoredFiles(), changeListManager.isIgnoredInUpdateMode());
|
||||
}
|
||||
@@ -357,6 +360,7 @@ public class ChangesViewManager implements ChangesViewI, ProjectComponent, Persi
|
||||
myModelUpdateInProgress = true;
|
||||
try {
|
||||
myView.updateModel(newModel);
|
||||
synchronizeInclusion(changeLists, unversionedFiles);
|
||||
}
|
||||
finally {
|
||||
myModelUpdateInProgress = false;
|
||||
@@ -366,6 +370,16 @@ public class ChangesViewManager implements ChangesViewI, ProjectComponent, Persi
|
||||
}, indicator);
|
||||
}
|
||||
|
||||
private void synchronizeInclusion(@NotNull List<LocalChangeList> changeLists, @NotNull List<VirtualFile> unversionedFiles) {
|
||||
if (myView.isShowCheckboxes() && !myView.isInclusionEmpty()) {
|
||||
THashSet<Object> possibleInclusion = new THashSet<>(ChangeListChange.HASHING_STRATEGY);
|
||||
changeLists.forEach(changeList -> possibleInclusion.addAll(changeList.getChanges()));
|
||||
possibleInclusion.addAll(unversionedFiles);
|
||||
|
||||
myView.retainInclusion(possibleInclusion);
|
||||
}
|
||||
}
|
||||
|
||||
private void updatePreview(boolean fromModelRefresh) {
|
||||
if (mySplitterComponent != null) {
|
||||
mySplitterComponent.updatePreview(fromModelRefresh);
|
||||
|
||||
@@ -485,6 +485,13 @@ public abstract class ChangesTree extends Tree implements DataProvider {
|
||||
repaint();
|
||||
}
|
||||
|
||||
public void retainInclusion(@NotNull Collection<?> changes) {
|
||||
if (myIncludedChanges.retainAll(changes)) {
|
||||
notifyInclusionListener();
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
|
||||
public void includeChange(final Object change) {
|
||||
includeChanges(Collections.singleton(change));
|
||||
}
|
||||
@@ -522,6 +529,10 @@ public abstract class ChangesTree extends Tree implements DataProvider {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isInclusionEmpty() {
|
||||
return myIncludedChanges.isEmpty();
|
||||
}
|
||||
|
||||
public boolean isIncluded(final Object change) {
|
||||
return myIncludedChanges.contains(change);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user