Ejemplo n.º 1
0
        async private Task connectToUrlAsyncInternal(string url, UrlParser.ParsedMergeRequestUrl parsedUrl)
        {
            labelWorkflowStatus.Text = String.Format("Connecting to {0}...", url);
            MergeRequestKey mrk = parseUrlIntoMergeRequestKey(parsedUrl);

            GitLabInstance gitLabInstance = new GitLabInstance(mrk.ProjectKey.HostName, Program.Settings);
            MergeRequest   mergeRequest   = await Shortcuts
                                            .GetMergeRequestAccessor(gitLabInstance, _modificationNotifier, mrk.ProjectKey)
                                            .SearchMergeRequestAsync(mrk.IId, false);

            if (mergeRequest == null)
            {
                throw new UrlConnectionException("Merge request does not exist. ", null);
            }
            labelWorkflowStatus.Text = String.Empty;

            bool canOpenAtLiveTab = mergeRequest.State == "opened" && checkIfCanOpenAtLiveTab(mrk, true);
            bool needReload       = (canOpenAtLiveTab && getDataCache(canOpenAtLiveTab).MergeRequestCache == null) ||
                                    mrk.ProjectKey.HostName != getHostName();

            if (needReload)
            {
                Trace.TraceInformation("[MainForm.ExternalCalls] Restart workflow for url {0}", url);
                await restartWorkflowByUrlAsync(mrk.ProjectKey.HostName);
            }

            if (!canOpenAtLiveTab || !await openUrlAtLiveTabAsync(mrk, url, !needReload))
            {
                await openUrlAtSearchTabAsync(mrk);
            }
        }
Ejemplo n.º 2
0
        async private Task connectToUrlAsyncInternal(string url, UrlParser.ParsedMergeRequestUrl parsedUrl)
        {
            MergeRequestKey mrk = parseUrlIntoMergeRequestKey(parsedUrl);

            // First, try to select a MR from lists of visible MRs
            bool tryOpenAtLiveTab = true;

            switch (trySelectMergeRequest(mrk))
            {
            case SelectionResult.NotFound:
                break;

            case SelectionResult.Selected:
                addOperationRecord("Merge Request was found in cache and selected");
                return;

            case SelectionResult.Hidden:
                tryOpenAtLiveTab = false;
                break;
            }

            bool isConnected = getDataCache(EDataCacheType.Live)?.ConnectionContext != null;
            bool needReload  = mrk.ProjectKey.HostName != getHostName() || !isConnected;

            if (needReload)
            {
                Trace.TraceInformation("[MainForm.ExternalCalls] Restart workflow for url {0}", url);
                await restartWorkflowByUrlAsync(mrk.ProjectKey.HostName);
            }

            // If MR is not found at the Live tab at all or user rejected to unhide it,
            // don't try to open it at the Live tab.
            // Otherwise, check if requested MR match workflow filters.
            tryOpenAtLiveTab = tryOpenAtLiveTab && (await checkLiveDataCacheFilterAsync(mrk, url));
            if (!tryOpenAtLiveTab || !await openUrlAtLiveTabAsync(mrk, url, !needReload))
            {
                await openUrlAtSearchTabAsync(mrk);
            }
        }
Ejemplo n.º 3
0
        internal static object Parse(string originalUrl)
        {
            if (String.IsNullOrEmpty(originalUrl))
            {
                return(null);
            }

            string url = trimPrefix(originalUrl);

            List <Exception> exceptions = new List <Exception>();

            try
            {
                UrlParser.ParsedMergeRequestUrl originalParsed  = UrlParser.ParseMergeRequestUrl(url);
                UrlParser.ParsedMergeRequestUrl mergeRequestUrl = new UrlParser.ParsedMergeRequestUrl(
                    StringUtils.GetHostWithPrefix(originalParsed.Host), originalParsed.Project, originalParsed.IId);
                return(mergeRequestUrl);
            }
            catch (Exception ex)
            {
                // ok, let's try another parser
                exceptions.Add(ex);
            }

            try
            {
                return(NewMergeRequestUrlParser.Parse(url));
            }
            catch (Exception ex)
            {
                // ok, input string cannot be parsed
                exceptions.Add(ex);
            }

            exceptions.ForEach(ex => ExceptionHandlers.Handle("Input URL cannot be parsed", ex));
            return(null);
        }
Ejemplo n.º 4
0
 private MergeRequestKey parseUrlIntoMergeRequestKey(UrlParser.ParsedMergeRequestUrl parsedUrl)
 {
     return(new MergeRequestKey(new ProjectKey(parsedUrl.Host, parsedUrl.Project), parsedUrl.IId));
 }