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;
                    }
                    }
                }
            }
        }
Example #2
0
        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;
                            }
                        }
                    });
                }
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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;
        }