save last unchanged content on vfs events, not during changes view update
authorpeter <peter@jetbrains.com>
Wed, 25 Jan 2012 12:05:21 +0000 (13:05 +0100)
committerpeter <peter@jetbrains.com>
Wed, 25 Jan 2012 12:10:59 +0000 (13:10 +0100)
platform/vcs-api/src/com/intellij/openapi/vcs/VcsVFSListener.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java

index 3cfdfc066ad98fa28fbde0877ef47f2a164003a6..dbf307d0134e2797198f242db04870ee4fc81664 100644 (file)
@@ -223,6 +223,9 @@ public abstract class VcsVFSListener implements Disposable {
                                            getSingleFileDeletePromptTemplate(), myRemoveOption);
   }
 
+  protected void beforeContentsChange(VirtualFile file) {
+  }
+
   private void addFileToMove(final VirtualFile file, final String newParentPath, final String newName) {
     if (file.isDirectory() && !isDirectoryVersioningSupported()) {
       VirtualFile[] children = file.getChildren();
@@ -372,6 +375,14 @@ public abstract class VcsVFSListener implements Disposable {
         }
       }
     }
+
+    @Override
+    public void beforeContentsChange(VirtualFileEvent event) {
+      if (!isEventIgnored(event, false)) {
+        assert !event.getFile().isDirectory();
+        VcsVFSListener.this.beforeContentsChange(event.getFile());
+      }
+    }
   }
 
   private class MyCommandAdapter extends CommandAdapter {
index a1e02e7995769bcb3baf9a31aec2cc4811b5f817..253e56e2d505f60fb03930e9228bfa33d4ca2f44 100644 (file)
@@ -449,12 +449,6 @@ public class ChangeListManagerImpl extends ChangeListManagerEx implements Projec
         }
       });
 
-      for (VcsDirtyScope scope : scopes) {
-        if (scope.getVcs().needsLastUnchangedContent()) {
-          updateLastUnchangedContents(scope);
-        }
-      }
-
       myChangesViewManager.scheduleRefresh();
     }
     catch (DisposedException e) {
@@ -628,55 +622,6 @@ public class ChangeListManagerImpl extends ChangeListManagerEx implements Projec
     }
   }
 
-  private void updateLastUnchangedContents(VcsDirtyScope scope) {
-    scope.iterateExistingInsideScope(new Processor<VirtualFile>() {
-      @Override
-      public boolean process(VirtualFile file) {
-        if (!file.isDirectory() && getStatus(file) == FileStatus.NOT_CHANGED) {
-          LastUnchangedContentTracker.updateLastUnchangedContent(file);
-        }
-
-        return true;
-      }
-    });
-  }
-
-  public void collectUnchangedFileContents(@Nullable ProgressIndicator indicator) {
-    final ProjectLevelVcsManager vcsManager = ProjectLevelVcsManager.getInstance(myProject);
-    for (VcsDirectoryMapping mapping : vcsManager.getDirectoryMappings()) {
-      final AbstractVcs vcs = vcsManager.findVcsByName(mapping.getVcs());
-      final VirtualFile file = LocalFileSystem.getInstance().findFileByPath(mapping.getDirectory());
-      if (vcs != null && file != null && vcs.needsLastUnchangedContent()) {
-        if (indicator != null) {
-          indicator.setText(mapping.getDirectory());
-        }
-
-        final VcsDirtyScopeImpl scope = new VcsDirtyScopeImpl(vcs, myProject);
-        scope.addDirtyDirRecursively(new FilePathImpl(file));
-        updateLastUnchangedContents(scope);
-      }
-    }
-
-    for (LocalChangeList list : getChangeListsCopy()) {
-      for (Change change : list.getChanges()) {
-        final VirtualFile file = change.getVirtualFile();
-        final ContentRevision before = change.getBeforeRevision();
-        if (file != null && before != null && !LastUnchangedContentTracker.hasSavedContent(file)) {
-          try {
-            final String content = before.getContent();
-            if (content != null) {
-              LastUnchangedContentTracker.forceSavedContent(file, content);
-            }
-          }
-          catch (VcsException e) {
-            LOG.info(e);
-          }
-        }
-        
-      }
-    }
-  }
-
   private void checkIfDisposed() {
     if (myUpdater.isStopped()) throw new DisposedException();
   }