コード例 #1
0
        public Task UpdateBuildConfigs(string connectionId, IEnumerable <BuildConfig> buildsConfigs)
        {
            return(Task.Run(
                       () =>
            {
                var buildCiIds = buildsConfigs
                                 .Where(b => !string.IsNullOrEmpty(b.CiExternalId) && !b.CiExternalId.StartsWith("-"))
                                 .Select(b => b.CiExternalId)
                                 .ToList()
                                 .ToList();

                Parallel.ForEach(
                    buildCiIds,
                    build =>
                {
                    if (BuildsPerConnId.ContainsKey(connectionId) &&
                        !BuildsPerConnId[connectionId].Contains(build))
                    {
                        BuildsPerConnId[connectionId].Add(build);
                    }
                });

                Parallel.ForEach(
                    buildCiIds,
                    build =>
                {
                    if (!BuildsToBeRefreshed.ContainsKey(build))
                    {
                        BuildsToBeRefreshed.TryAdd(build, build);
                    }
                });
            }));
        }
コード例 #2
0
        public Task RemoveAllBuildConfigs(string connectionId)
        {
            return(Task.Run(
                       () =>
            {
                var builds = new List <string>();
                if (BuildsPerConnId.ContainsKey(connectionId))
                {
                    BuildsPerConnId.TryRemove(connectionId, out builds);
                }

                Parallel.ForEach(
                    builds,
                    build =>
                {
                    var exists = BuildsPerConnId.Values
                                 .SelectMany(b => b)
                                 .Contains(build);
                    if (exists)
                    {
                        return;
                    }
                    string bOut;
                    BuildsToBeRefreshed.TryRemove(build, out bOut);
                });

                Logger.Debug("Remove builds for {connectionId}", connectionId);
            }));
        }
コード例 #3
0
        public Task RemoveBuildConfig(string connectionId, BuildConfig buildConfig)
        {
            return(Task.Run(
                       () =>
            {
                var buildId = buildConfig.CiExternalId;
                if (BuildsPerConnId.ContainsKey(connectionId) && BuildsPerConnId[connectionId].Contains(buildId))
                {
                    BuildsPerConnId[connectionId].Remove(buildId);
                }

                var exists = BuildsPerConnId.Values
                             .SelectMany(b => b)
                             .Contains(buildId);
                if (exists)
                {
                    return;
                }

                string bOut;
                BuildsToBeRefreshed.TryRemove(buildId, out bOut);

                Logger.Debug("Remove build {buildId} for {connectionId}", buildId, connectionId);
            }));
        }
コード例 #4
0
        public async Task AddBuildConfigs(string connectionId, IEnumerable <BuildConfig> buildsConfigs)
        {
            // remove any existing builds for this connection
            await RemoveAllBuildConfigs(connectionId);

            var buildCiIds = buildsConfigs
                             .Where(b => !string.IsNullOrEmpty(b.CiExternalId) && !b.CiExternalId.StartsWith("-"))
                             .Select(b => b.CiExternalId)
                             .ToList()
                             .ToList();

            BuildsPerConnId.AddOrUpdate(connectionId, buildCiIds, (oldkey, oldvalue) => buildCiIds);

            Parallel.ForEach(buildCiIds,
                             build =>
            {
                if (!BuildsToBeRefreshed.ContainsKey(build))
                {
                    BuildsToBeRefreshed.TryAdd(build, build);
                }
            });
        }