Bug 211391 - Minimize repository root access
Summary: Minimize repository root access
Status: RESOLVED FIXED
Alias: None
Product: Subversive
Classification: Technology
Component: UI (show other bugs)
Version: 0.7   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Alexander Gurov CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-11-29 03:44 EST by Alexander Gurov CLA
Modified: 2008-04-01 10:00 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alexander Gurov CLA 2007-11-29 03:44:22 EST
I don't have access to the root directory of the subversion server a project I'm working on is using.  If the full URL to the project is http://server.com/svn/foo.  I have access to foo, but not the subversion root.  Subversive wants to connect to the root when I try to browse the branches and opens up an authentication dialog each time (which I'm forced to cancel).  Is there any way to disable this? 

Thanks, Jay
Comment 1 Alexander Gurov CLA 2008-03-04 11:36:16 EST
Subversive tries to connect to SVN server even when that's unnecessary - for example, when it initializes popup menu for a project. That slows things down and can even completely freeze Eclipse when network becomes inaccessible.

See this stack trace, for example. It was obtained with jstack tool from completely frozen Eclipse instance:
-------------------------------
"SVN-Y9QS0" prio=6 tid=0x00985400 nid=0xee4 runnable [0x0012d000..0x0012fc54]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    - locked <0x108a91a8> (a java.net.SocksSocketImpl)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at org.tmatesoft.svn.core.internal.util.SVNSocketFactory.createPlainSocket(SVNSocketFactory.java:54)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.connect(HTTPConnection.java:146)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:272)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:235)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:223)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.doPropfind(DAVConnection.java:97)
    at org.tmatesoft.svn.core.internal.io.dav.DAVUtil.getProperties(DAVUtil.java:57)
    at org.tmatesoft.svn.core.internal.io.dav.DAVUtil.getResourceProperties(DAVUtil.java:62)
    at org.tmatesoft.svn.core.internal.io.dav.DAVUtil.getStartingProperties(DAVUtil.java:92)
    at org.tmatesoft.svn.core.internal.io.dav.DAVUtil.findStartingProperties(DAVUtil.java:113)
    at org.tmatesoft.svn.core.internal.io.dav.DAVUtil.getBaselineProperties(DAVUtil.java:197)
    at org.tmatesoft.svn.core.internal.io.dav.DAVUtil.getBaselineInfo(DAVUtil.java:160)
    at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.getLatestRevision(DAVRepository.java:150)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.getRevisionNumber(SVNBasicClient.java:348)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.getLocations(SVNBasicClient.java:462)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.createRepository(SVNBasicClient.java:418)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.createRepository(SVNBasicClient.java:382)
    at org.tmatesoft.svn.core.wc.SVNWCClient.doInfo(SVNWCClient.java:1973)
    at org.tmatesoft.svn.core.javahl.SVNClientImpl.info2(SVNClientImpl.java:1205)
    at org.polarion.team.svn.connector.svnkit.SVNKitConnector.info(SVNKitConnector.java:710)
    at org.eclipse.team.svn.core.extension.factory.ThreadNameModifier.info(ThreadNameModifier.java:675)
    at org.eclipse.team.svn.core.utility.SVNUtility.info(SVNUtility.java:288)
    at org.eclipse.team.svn.core.svnstorage.SVNRepositoryLocation$2.runImpl(SVNRepositoryLocation.java:570)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:72)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:103)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:89)
    at org.eclipse.team.svn.core.svnstorage.SVNRepositoryLocation.fetchRepoInfo(SVNRepositoryLocation.java:550)
    at org.eclipse.team.svn.core.svnstorage.SVNRepositoryLocation.fetchRepoInfo(SVNRepositoryLocation.java:542)
    at org.eclipse.team.svn.core.svnstorage.SVNRepositoryLocation.getRepositoryRootUrl(SVNRepositoryLocation.java:154)
    at org.eclipse.team.svn.core.svnstorage.SVNRepositoryLocation.isArgumentsCorrect(SVNRepositoryLocation.java:525)
    at org.eclipse.team.svn.core.svnstorage.SVNRepositoryLocation.asRepositoryContainer(SVNRepositoryLocation.java:223)
    at org.eclipse.team.svn.core.svnstorage.SVNRepositoryLocation.asRepositoryContainer(SVNRepositoryLocation.java:215)
    at org.eclipse.team.svn.core.SVNTeamProvider.uploadRepositoryResource(SVNTeamProvider.java:243)
    at org.eclipse.team.svn.core.SVNTeamProvider.connectToProject(SVNTeamProvider.java:169)
    - locked <0x30e8a1b8> (a java.lang.Class for org.eclipse.team.svn.core.SVNTeamProvider)
    at org.eclipse.team.svn.core.SVNTeamProvider.getRepositoryResource(SVNTeamProvider.java:70)
    - locked <0x1514f7c0> (a org.eclipse.team.svn.core.SVNTeamProvider)
    at org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage.loadLocalResourcesSubTreeSVNImpl(SVNRemoteStorage.java:595)
    at org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage.loadLocalResourcesSubTree(SVNRemoteStorage.java:479)
    at org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage.asLocalResource(SVNRemoteStorage.java:283)
    - locked <0x14d809a0> (a org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage)
    at org.eclipse.team.svn.core.utility.FileUtility.checkForResourcesPresence(FileUtility.java:328)
    at org.eclipse.team.svn.ui.action.FilterManager.checkForResourcesPresence(FilterManager.java:105)
    at org.eclipse.team.svn.ui.action.FilterManager.checkForResourcesPresenceRecursive(FilterManager.java:68)
    at org.eclipse.team.svn.ui.action.AbstractLocalTeamAction.checkForResourcesPresenceRecursive(AbstractLocalTeamAction.java:58)
    at org.eclipse.team.svn.ui.action.local.EditConflictsAction.isEnabled(EditConflictsAction.java:34)
    at org.eclipse.team.internal.ui.actions.TeamAction.setActionEnablement(TeamAction.java:284)
    at org.eclipse.team.internal.ui.actions.TeamAction.selectionChanged(TeamAction.java:269)
    at org.eclipse.team.svn.ui.action.AbstractSVNTeamAction.selectionChanged(AbstractSVNTeamAction.java:103)
    at org.eclipse.ui.internal.PluginAction.refreshEnablement(PluginAction.java:211)
    at org.eclipse.ui.internal.PluginAction.selectionChanged(PluginAction.java:282)
    at org.eclipse.ui.internal.ObjectActionContributor$1.run(ObjectActionContributor.java:156)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
    at org.eclipse.ui.internal.ObjectActionContributor.contributeObjectActions(ObjectActionContributor.java:159)
    at org.eclipse.ui.internal.ObjectActionContributorManager.contributeObjectActions(ObjectActionContributorManager.java:96)
    at org.eclipse.ui.internal.PopupMenuExtender.addObjectActions(PopupMenuExtender.java:261)
    at org.eclipse.ui.internal.PopupMenuExtender.menuAboutToShow(PopupMenuExtender.java:337)
    at org.eclipse.jface.action.MenuManager.fireAboutToShow(MenuManager.java:290)
    at org.eclipse.jface.action.MenuManager.handleAboutToShow(MenuManager.java:395)
    at org.eclipse.jface.action.MenuManager.access$1(MenuManager.java:391)
    at org.eclipse.jface.action.MenuManager$2.menuShown(MenuManager.java:417)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:962)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:943)
    at org.eclipse.swt.widgets.Control.WM_INITMENUPOPUP(Control.java:3981)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:3698)
    at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:291)
    at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1554)
    at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:1753)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:4351)
    at org.eclipse.swt.internal.win32.OS.TrackPopupMenu(Native Method)
    at org.eclipse.swt.widgets.Menu._setVisible(Menu.java:228)
    at org.eclipse.swt.widgets.Display.runPopups(Display.java:3708)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3287)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
    at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:508)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
Comment 2 Alexander Gurov CLA 2008-03-04 11:37:22 EST
<Report and stack trace are copied from newsgroup. Reported by Pavel Zuev>
Comment 3 Alexander Gurov CLA 2008-04-01 10:00:43 EDT
Fix will be available in the next Subversive build at the end of this week.

Remarks:
1) Repository root will be accessed when plug-in operates with URLs shorter than URL specified in repository location.
2) Due to issue in previous versions of Subversive repository root URL is not saved in already registered locations. So, once per session, when root URL is accessed, plug-in can connect to remote host. (Workaround for this problem consists in modification and then saving corresponding repository location).