From 5d2c2e4f6d0cedc7291fd29c4943ff31ab6d483f Mon Sep 17 00:00:00 2001 From: irengrig Date: Thu, 14 Feb 2013 15:05:55 +0400 Subject: [PATCH] Subversion: do NOT listen to wc.db changes - if -Dsvn.do.not.listen.to.wc.db=true needed to check assumption that checksum mismatch problem occurs if writing transaction receives BUSY exception during commit (this is phase-of-the-moon *bug* in svnkit) IDEA-97081 OSX / svn commit failed - Base checksum mismatch IDEA-100494 Cannot make a SVN commit via Intellij IDEA-98435 Can not commit to SVN --- .../src/org/jetbrains/idea/svn/SvnChangeProvider.java | 1 + .../src/org/jetbrains/idea/svn/SvnEntriesFileListener.java | 2 +- plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java | 5 +++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnChangeProvider.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnChangeProvider.java index 013896a99a37..ebdf274bb4d7 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnChangeProvider.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnChangeProvider.java @@ -120,6 +120,7 @@ public class SvnChangeProvider implements ChangeProvider { } private static void putAdministrative17UnderVfsListener(Set pointInfos) { + if (! SvnVcs.ourListenToWcDb) return; final LocalFileSystem lfs = LocalFileSystem.getInstance(); for (NestedCopiesBuilder.MyPointInfo info : pointInfos) { if (WorkingCopyFormat.ONE_DOT_SEVEN.equals(info.getFormat()) && ! NestedCopyType.switched.equals(info.getType())) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnEntriesFileListener.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnEntriesFileListener.java index 8a2de80c4c6c..e41257204cf8 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnEntriesFileListener.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnEntriesFileListener.java @@ -61,7 +61,7 @@ public class SvnEntriesFileListener extends VirtualFileAdapter { return; } final VirtualFile file = event.getFile(); - if (isWcDbFile(file)) { + if (isWcDbFile(file) && SvnVcs.ourListenToWcDb) { LOG.debug("wc.db had changed"); final VirtualFile parentWcDb = file.getParent(); if (parentWcDb != null && SvnUtil.isAdminDirectory(parentWcDb)) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java index b5332d21850f..6c82be2da38c 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java @@ -108,8 +108,10 @@ import java.util.logging.Level; @SuppressWarnings({"IOResourceOpenedButNotSafelyClosed"}) public class SvnVcs extends AbstractVcs { + private static final String DO_NOT_LISTEN_TO_WC_DB = "svn.do.not.listen.to.wc.db"; private static final String KEEP_CONNECTIONS_KEY = "svn.keep.connections"; private static final Logger REFRESH_LOG = Logger.getInstance("#svn_refresh"); + public static boolean ourListenToWcDb = true; private static final int ourLogUsualInterval = 20 * 1000; private static final int ourLogRareInterval = 30 * 1000; @@ -197,6 +199,9 @@ public class SvnVcs extends AbstractVcs { static { System.setProperty("svnkit.log.native.calls", "true"); + if (Boolean.getBoolean(DO_NOT_LISTEN_TO_WC_DB)) { + ourListenToWcDb = false; + } final JavaSVNDebugLogger logger = new JavaSVNDebugLogger(Boolean.getBoolean(LOG_PARAMETER_NAME), Boolean.getBoolean(TRACE_NATIVE_CALLS), LOG); SVNDebugLog.setDefaultLog(logger);