Exemplo n.º 1
0
        async private Task <IEnumerable <UserEvents.MergeRequestEvent> > updateOneOnTimer(MergeRequestKey mrk)
        {
            if (_updating)
            {
                traceDetailed(String.Format("Cannot update !{0} in {1}", mrk.IId, mrk.ProjectKey.ProjectName));
                await TaskUtils.WhileAsync(() => _updating);

                traceDetailed(String.Format("Skipped update for !{0} in {1}", mrk.IId, mrk.ProjectKey.ProjectName));
                return(null);
            }

            IInternalCache oldDetails = _cache.Clone();

            traceDetailed(String.Format("Ready to update !{0} in {1}", mrk.IId, mrk.ProjectKey.ProjectName));
            try
            {
                _updating = true;
                if (_mergeRequestLoader != null)
                {
                    await _mergeRequestLoader.LoadMergeRequest(mrk);
                }
                MergeRequestRefreshed?.Invoke(mrk);
            }
            catch (BaseLoaderException ex)
            {
                ExceptionHandlers.Handle("Cannot perform a one-shot update", ex);
                return(null);
            }
            finally
            {
                _updating = false;
                traceDetailed(String.Format("Updated !{0} in {1}", mrk.IId, mrk.ProjectKey.ProjectName));
            }

            IEnumerable <UserEvents.MergeRequestEvent> updates = _checker.CheckForUpdates(oldDetails, _cache);

            int legalUpdates = updates.Count(x => x.Labels);

            Debug.Assert(legalUpdates == 0 || legalUpdates == 1);

            if (legalUpdates > 0)
            {
                traceInformation(
                    String.Format(
                        "Updated Labels: {0}. MRK: HostName={1}, ProjectName={2}, IId={3}",
                        legalUpdates, mrk.ProjectKey.HostName, mrk.ProjectKey.ProjectName, mrk.IId));
            }

            return(updates);
        }
 private void onMergeRequestRefreshed(MergeRequestKey mrk)
 {
     _mergeRequestRefreshTimestamps[mrk] = DateTime.Now;
     MergeRequestRefreshed?.Invoke(mrk);
 }