private void CheckResult(Uri repositoryUri) { using (SvnPoolRemoteSession session = GetSession(repositoryUri)) { SvnRemoteNodeKindArgs nka = new SvnRemoteNodeKindArgs(); nka.ThrowOnError = true; SvnNodeKind kind; string path = session.MakeRelativePath(repositoryUri); if (session.GetNodeKind(path, nka, out kind)) { switch (kind) { case SvnNodeKind.Directory: { Uri parentUri = new Uri(repositoryUri, repositoryUri.PathAndQuery.EndsWith("/", StringComparison.Ordinal) ? "../" : "./"); return; } case SvnNodeKind.File: { SvnRemoteCommonArgs ca = new SvnRemoteCommonArgs(); ca.ThrowOnError = true; Uri parentUri = new Uri(repositoryUri, "./"); Uri reposRoot; if (!session.GetRepositoryRoot(ca, out reposRoot)) { return; } return; } } } } }
private void CheckResult(Uri combined, bool forceLoad) { using (SvnPoolRemoteSession session = GetSession(combined)) { SvnRemoteCommonArgs ca = new SvnRemoteCommonArgs(); ca.ThrowOnError = false; SvnRemoteNodeKindArgs nka = new SvnRemoteNodeKindArgs(); nka.ThrowOnError = false; SvnRemoteStatArgs sa = new SvnRemoteStatArgs(); sa.ThrowOnError = false; SvnNodeKind kind; string path = session.MakeRelativePath(combined); if (session.GetNodeKind(path, nka, out kind)) { Invoke((AnkhAction) delegate { switch (kind) { case SvnNodeKind.Directory: { Uri parentUri = new Uri(combined, combined.PathAndQuery.EndsWith("/", StringComparison.Ordinal) ? "../" : "./"); if (!forceLoad && parentUri.ToString() != urlBox.Text) { return; // The user selected something else while we where busy } // The user typed a directory Url without ending '/' fileNameBox.Text = combined.ToString().TrimEnd('/') + '/'; UpdateDirectories(); return; } case SvnNodeKind.File: { Uri parentUri = new Uri(combined, "./"); if (parentUri.ToString() != urlBox.Text) { return; // The user selected something else while we where busy } SelectedUri = combined; Uri reposRoot; if (!session.GetRepositoryRoot(ca, out reposRoot)) { return; } SelectedRepositoryRoot = reposRoot; DialogResult = DialogResult.OK; return; } } }); } } }
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); }
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; }