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); }
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; } } } } }
void OnFill(Uri uri) { if (uri == null) { throw new ArgumentNullException(); } try { using (SvnPoolRemoteSession session = GetSession(uri)) { string path = session.MakeRelativePath(uri); SvnRemoteListArgs la = new SvnRemoteListArgs(); la.ThrowOnError = false; la.RetrieveEntries = SvnDirEntryItems.Kind; Uri repositoryRoot = null; List <ListViewItem> items = new List <ListViewItem>(); SvnRemoteNodeKindArgs commonArgs = new SvnRemoteNodeKindArgs(); commonArgs.ThrowOnError = false; SvnNodeKind kind; session.GetNodeKind(path, commonArgs, out kind); session.GetRepositoryRoot(out repositoryRoot); bool ok = (kind == SvnNodeKind.File) || session.List(path, la, delegate(object sender, SvnRemoteListEventArgs e) { if (string.IsNullOrEmpty(e.Path)) { return; } ListViewItem lvi = new ListViewItem(); lvi.Tag = e.Uri; lvi.Text = SvnTools.GetFileName(e.Uri); lvi.ImageIndex = (e.Entry.NodeKind == SvnNodeKind.Directory) ? _dirOffset : _fileOffset; items.Add(lvi); }); if (IsHandleCreated) { Invoke((AnkhAction) delegate() { if (uri == _currentUri) { dirView.Items.Clear(); if (repositoryRoot != null && !_repositoryRoots.Contains(repositoryRoot)) { _repositoryRoots.Add(repositoryRoot); } if (ok) { IFileIconMapper mapper = Context != null ? Context.GetService <IFileIconMapper>() : null; foreach (ListViewItem item in items) { if (item.ImageIndex == _fileOffset) { string ext = Path.GetExtension(item.Text); if (!string.IsNullOrEmpty(ext)) { int n = mapper.GetIconForExtension(ext); if (n > 0) { item.ImageIndex = n; } } } } SetView(items.ToArray()); _walking[uri] = items; } else { string message = string.Format("<{0}>", la.LastException != null ? la.LastException.Message : "Nothing"); dirView.Items.Add(message); } } }); } } } catch (SvnException svnEx) { BeginInvoke((AnkhAction) delegate() { dirView.Items.Clear(); string message = string.Format("<{0}>", svnEx.Message); dirView.Items.Add(message); }); } finally { BeginInvoke((AnkhAction) delegate() { lock (_running) { _running.Remove(uri); if (_running.Count == 0) { if (_busy != null && _loading) { _loading = false; _busy.Hide(); } } } }); // Exception or something } }
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 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; }