Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
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;
        }