Exemplo n.º 1
0
        /// <summary>
        /// Updates a package to the given value in the given files.
        /// </summary>
        /// <param name="ct"></param>
        /// <param name="operation"></param>
        /// <param name="targetFiles"></param>
        /// <returns></returns>
        private async Task <UpdateOperation[]> UpdateFiles(
            CancellationToken ct,
            UpdateOperation operation,
            Dictionary <FileType, string[]> targetFiles,
            Dictionary <string, XmlDocument> documents
            )
        {
            var operations = new List <UpdateOperation>();

            foreach (var files in targetFiles)
            {
                var fileType = files.Key;

                foreach (var path in files.Value)
                {
                    var document = documents.GetValueOrDefault(path);

                    if (document == null)
                    {
                        continue;
                    }

                    IEnumerable <UpdateOperation> updates = Array.Empty <UpdateOperation>();

                    var currentOperation = operation.WithFilePath(path);

                    if (fileType.HasFlag(FileType.Nuspec))
                    {
                        updates = document.UpdateDependencies(currentOperation);
                    }
                    else if (fileType.HasAnyFlag(FileType.DirectoryProps, FileType.DirectoryTargets, FileType.Csproj))
                    {
                        updates = document.UpdatePackageReferences(currentOperation);
                    }

                    if (!_parameters.IsDryRun && updates.Any(u => u.ShouldProceed()))
                    {
                        await document.Save(ct, path);
                    }

                    operations.AddRange(updates);
                }
            }

            return(operations.ToArray());
        }