private void HookUI(AnkhSvnPoolRemoteSession client) { // Let SharpSvnUI handle login and SSL dialogs SvnUIBindArgs bindArgs = new SvnUIBindArgs(); bindArgs.ParentWindow = new OwnerWrapper(DialogOwner); bindArgs.UIService = GetService <IUIService>(); bindArgs.Synchronizer = _syncher; if (Config != null && Config.Instance.PreferPuttyAsSSH) { client.Configuration.SshOverride = SharpSvn.Implementation.SvnSshOverride.ForceSharpPlinkAfterConfig; } SvnUI.Bind(client, bindArgs); }
public bool ReturnClient(SvnPoolRemoteSession session) { AnkhSvnPoolRemoteSession pc = session as AnkhSvnPoolRemoteSession; if (pc != null && pc.ReturnCookie == _returnCookie && pc.SessionUri != null) { pc.ReturnTime = DateTime.Now; lock (_remoteSessions) { _remoteSessions.Insert(0, pc); ScheduleDisposeSessions(); return(true); } } return(false); }
public SvnPoolRemoteSession GetRemoteSession(Uri sessionUri, bool parentOk) { if (sessionUri == null) { throw new ArgumentNullException("sessionUri"); } SvnPoolRemoteSession reuse = null; lock (_remoteSessions) { if (_remoteSessions.Count > 0) { foreach (SvnPoolRemoteSession rs in _remoteSessions) { if (rs.SessionUri == sessionUri) { reuse = rs; _remoteSessions.Remove(rs); break; } } if (reuse == null) { string schemeAndServer = sessionUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped); foreach (SvnPoolRemoteSession rs in _remoteSessions) { Uri reposUri = rs.RepositoryRootUri ?? rs.SessionUri; if (reposUri == null || reposUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped) != schemeAndServer) { continue; } if (sessionUri.AbsolutePath.StartsWith(reposUri.AbsolutePath, StringComparison.Ordinal)) { reuse = rs; } } } if (reuse != null) { _remoteSessions.Remove(reuse); } } } if (reuse != null) { if (sessionUri != reuse.SessionUri) { if (!parentOk || !sessionUri.AbsolutePath.StartsWith(reuse.SessionUri.AbsolutePath)) { SvnRemoteCommonArgs rca = new SvnRemoteCommonArgs(); rca.ThrowOnError = false; if (!reuse.Reparent(sessionUri, rca)) { reuse = null; } } } if (reuse != null) { return(reuse); } // else -> GC will cleanup } AnkhSvnPoolRemoteSession session = new AnkhSvnPoolRemoteSession(this, true, _returnCookie); HookUI(session); session.Open(sessionUri); return(session); }
private void HookUI(AnkhSvnPoolRemoteSession client) { // Let SharpSvnUI handle login and SSL dialogs SvnUIBindArgs bindArgs = new SvnUIBindArgs(); bindArgs.ParentWindow = new OwnerWrapper(DialogOwner); bindArgs.UIService = GetService<IUIService>(); bindArgs.Synchronizer = _syncher; SvnUI.Bind(client, bindArgs); }
public SvnPoolRemoteSession GetRemoteSession(Uri sessionUri, bool parentOk) { if (sessionUri == null) throw new ArgumentNullException("sessionUri"); SvnPoolRemoteSession reuse = null; lock (_remoteSessions) { if (_remoteSessions.Count > 0) { foreach (SvnPoolRemoteSession rs in _remoteSessions) { if (rs.SessionUri == sessionUri) { reuse = rs; _remoteSessions.Remove(rs); break; } } if (reuse == null) { string schemeAndServer = sessionUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped); foreach (SvnPoolRemoteSession rs in _remoteSessions) { Uri reposUri = rs.RepositoryRootUri ?? rs.SessionUri; if (reposUri == null || reposUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped) != schemeAndServer) continue; if (sessionUri.AbsolutePath.StartsWith(reposUri.AbsolutePath, StringComparison.Ordinal)) { reuse = rs; } } } if (reuse != null) _remoteSessions.Remove(reuse); } } if (reuse != null) { if (sessionUri != reuse.SessionUri) { if (!parentOk || !sessionUri.AbsolutePath.StartsWith(reuse.SessionUri.AbsolutePath)) { SvnRemoteCommonArgs rca = new SvnRemoteCommonArgs(); rca.ThrowOnError = false; if (!reuse.Reparent(sessionUri, rca)) reuse = null; } } if (reuse != null) return reuse; // else -> GC will cleanup } AnkhSvnPoolRemoteSession session = new AnkhSvnPoolRemoteSession(this, true, _returnCookie); HookUI(session); session.Open(sessionUri); return session; }