コード例 #1
0
        public async Task <ISet <int> > FilterInsensitiveItems(ICollection <int> affectedItems,
                                                               ReuseSensitivityCollector sensitivityCollector,
                                                               IReuseRepository reuseRepository)
        {
            var modifiedArtifacts = GetModifiedArtifacts(affectedItems, sensitivityCollector);
            var result            = new HashSet <int>();

            if (modifiedArtifacts.IsEmpty())
            {
                return(result);
            }
            // TODO: we can improve the artifact type Id retrieval as the inforamtion is already loaded into memory
            var artifactId2StandardTypeId =
                await
                reuseRepository.GetStandardTypeIdsForArtifactsIdsAsync(
                    modifiedArtifacts.ToHashSet());

            var reuseTemplatesDic = await reuseRepository.GetReuseItemTypeTemplatesAsyc(
                artifactId2StandardTypeId.Values.Where(v => v?.InstanceTypeId != null).
                Select(v => v.InstanceTypeId.Value).ToHashSet());

            foreach (var itemId in modifiedArtifacts)
            {
                SqlItemTypeInfo standardTypeInfo;
                if (!artifactId2StandardTypeId.TryGetValue(itemId, out standardTypeInfo) || standardTypeInfo == null)
                {
                    continue;
                }

                ItemTypeReuseTemplate settings;
                if (reuseTemplatesDic.TryGetValue(standardTypeInfo.InstanceTypeId.GetValueOrDefault(0), out settings) && settings != null)
                {
                    var modification = sensitivityCollector.ArtifactModifications[itemId];

                    if ((modification.ArtifactAspects & (~settings.SensitivitySettings)) !=
                        ItemTypeReuseTemplateSetting.None
                        ||
                        await HasSensitiveModifiedProperty(modification, settings, standardTypeInfo.ItemTypePredefined, reuseRepository))
                    {
                        result.Add(itemId);
                    }
                }
                else
                {
                    // If no template settings - everything sensitive by default
                    result.Add(itemId);
                }
            }
            return(result);
        }
コード例 #2
0
 public StateChangeExecutorRepositories(IArtifactVersionsRepository artifactVersionsRepository,
                                        IWorkflowRepository workflowRepository,
                                        IVersionControlService versionControlService,
                                        IReuseRepository reuseRepository,
                                        ISaveArtifactRepository saveArtifactRepository,
                                        IApplicationSettingsRepository applicationSettingsRepository,
                                        IServiceLogRepository serviceLogRepository,
                                        IUsersRepository usersRepository,
                                        IWebhooksRepository webhooksRepository,
                                        IProjectMetaRepository projectMetaRepository)
 {
     ArtifactVersionsRepository    = artifactVersionsRepository;
     WorkflowRepository            = workflowRepository;
     VersionControlService         = versionControlService;
     ReuseRepository               = reuseRepository;
     SaveArtifactRepository        = saveArtifactRepository;
     ApplicationSettingsRepository = applicationSettingsRepository;
     ServiceLogRepository          = serviceLogRepository;
     UsersRepository               = usersRepository;
     WebhooksRepository            = webhooksRepository;
     ProjectMetaRepository         = projectMetaRepository;
 }
コード例 #3
0
 public SqlPublishReuseProcessingRepository(IReuseRepository reuseRepository,
                                            ISensitivityCommonHelper sensitivityCommonHelper)
 {
     _reuseRepository         = reuseRepository;
     _sensitivityCommonHelper = sensitivityCommonHelper;
 }
コード例 #4
0
        private async Task <bool> HasSensitiveModifiedProperty(
            ReuseSensitivityCollector.ArtifactModification modification,
            ItemTypeReuseTemplate itemTypeReuseTemplate,
            ItemTypePredefined artifacTypePredefined,
            IReuseRepository reuseRepository)
        {
            HashSet <int> modifiedPropertyTypes = new HashSet <int>();

            foreach (var modifiedPropertyType in modification.ModifiedPropertyTypes)
            {
                modifiedPropertyTypes.Add(modifiedPropertyType.Item1);
            }
            var propertyTypesToStandardPropertyTypeDict =
                await reuseRepository.GetStandardPropertyTypeIdsForPropertyIdsAsync(modifiedPropertyTypes);

            foreach (var modifiedPropertyType in modification.ModifiedPropertyTypes)
            {
                var propertyTypePredefined = modifiedPropertyType.Item2;
                if (propertyTypePredefined.IsCustom())
                {
                    SqlPropertyTypeInfo propInfo;
                    if (
                        !propertyTypesToStandardPropertyTypeDict.TryGetValue(modifiedPropertyType.Item1, out propInfo) ||
                        !propInfo.InstancePropertyTypeId.HasValue)
                    {
                        continue;
                    }

                    PropertyTypeReuseTemplate propertyTemplate;
                    // Get corresponding property type template for standard property
                    if (
                        !itemTypeReuseTemplate.PropertyTypeReuseTemplates.TryGetValue(
                            propInfo.InstancePropertyTypeId.Value,
                            out propertyTemplate))
                    {
                        continue;
                    }

                    if (!propertyTemplate.Settings.HasFlag(PropertyTypeReuseTemplateSettings.ChangesIgnored))
                    {
                        return(true);
                    }
                }
                else if (!propertyTypePredefined.IsFake())
                {
                    ItemTypeReuseTemplateSetting correspondingReuseTemplateSetting;

                    if (propertyTypePredefined == PropertyTypePredefined.Description)
                    {
                        correspondingReuseTemplateSetting = ItemTypeReuseTemplateSetting.Description;
                    }
                    else
                    {
                        var reconcileProperty =
                            ReuseSystemPropertiesMap.Instance.GetCorrespondingReconcileProperty(propertyTypePredefined,
                                                                                                artifacTypePredefined);

                        correspondingReuseTemplateSetting =
                            ReuseTemplateSettingsMap.GetCorrespondingReuseTemplateSetting(reconcileProperty);
                    }

                    if ((correspondingReuseTemplateSetting & ~itemTypeReuseTemplate.SensitivitySettings) !=
                        ItemTypeReuseTemplateSetting.None)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }