diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java index 791d2b89763b..c020126ba4fb 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java @@ -372,6 +372,7 @@ public class SvnVcs extends AbstractVcs { myAuthNotifier.init(); mySvnBranchPointsCalculator = new SvnBranchPointsCalculator(myProject); + mySvnBranchPointsCalculator.activate(); // do one time after project loaded StartupManager.getInstance(myProject).runWhenProjectIsInitialized(new DumbAwareRunnable() { @@ -474,6 +475,7 @@ public class SvnVcs extends AbstractVcs { myAuthNotifier.stop(); myAuthNotifier.clear(); + mySvnBranchPointsCalculator.deactivate(); mySvnBranchPointsCalculator = null; myWorkingCopiesContent.deactivate(); } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SvnBranchPointsCalculator.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SvnBranchPointsCalculator.java index 6314e48ed8d6..7ff6dcc958e2 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SvnBranchPointsCalculator.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SvnBranchPointsCalculator.java @@ -43,21 +43,25 @@ import java.util.*; public class SvnBranchPointsCalculator { private static final Logger LOG = Logger.getInstance("#org.jetbrains.idea.svn.dialogs.SvnBranchPointsCalculator"); - private final FactsCalculator> myCalculator; - + private FactsCalculator> myCalculator; private PersistentHolder myPersistentHolder; + private File myFile; + private final Project myProject; public SvnBranchPointsCalculator(final Project project) { + myProject = project; final File vcs = new File(PathManager.getSystemPath(), "vcs"); File file = new File(vcs, "svn_copy_sources"); file.mkdirs(); - file = new File(file, project.getLocationHash()); + myFile = file; + myFile = new File(file, project.getLocationHash()); + } - // todo when will it die? + public void activate() { ValueHolder, KeyData> cache = null; try { - myPersistentHolder = new PersistentHolder(file); + myPersistentHolder = new PersistentHolder(myFile); cache = new ValueHolder, KeyData>() { public WrapperInvertor getValue(KeyData dataHolder) { try { @@ -93,7 +97,13 @@ public class SvnBranchPointsCalculator { }; } - myCalculator = new FactsCalculator>(project, "Looking for branch origin", cache, new Loader(project)); + myCalculator = new FactsCalculator>(myProject, "Looking for branch origin", cache, new Loader(myProject)); + } + + public void deactivate() { + myPersistentHolder.close(); + myCalculator = null; + myPersistentHolder = null; } private static class BranchDataExternalizer implements DataExternalizer> { @@ -193,6 +203,15 @@ public class SvnBranchPointsCalculator { } } + public void close() { + try { + myPersistentMap.close(); + } + catch (IOException e) { + LOG.info(e); + } + } + public void put(final String uid, final String target, final BranchCopyData data) throws IOException { // todo - rewrite of rather big piece; consider rewriting synchronized (myLock) {