Esempio n. 1
0
        private void ProcessRepo(ConcurrentBag <PackageInfo> processedPackages, RepositoryInfo repo)
        {
            var repoDirectory = Path.Combine(_dropFolder, repo.Name, _buildBranch);

            if (string.IsNullOrEmpty(repo.BuildNumber))
            {
                repo.BuildNumber = FindLatest(repoDirectory);
            }

            repoDirectory = Path.Combine(repoDirectory, repo.BuildNumber);

            var buildDirectory         = Path.Combine(repoDirectory, repo.BuildDirectory);
            var lineupPackageDirectory = Path.Combine(repoDirectory, repo.LineupPackageDirectory);
            var packageTargetDir       = Path.Combine(_outputPath, repo.PackagesDestinationDirectory);
            var symbolsTargetDir       = Path.Combine(_outputPath, "symbols");
            var buildTargetDirectory   = Path.Combine(_outputPath, "build");
            var lineupTargetDirectory  = Path.Combine(_outputPath, "lineups");

            Directory.CreateDirectory(symbolsTargetDir);
            Directory.CreateDirectory(packageTargetDir);
            Directory.CreateDirectory(buildTargetDirectory);
            Directory.CreateDirectory(lineupTargetDirectory);

            Parallel.ForEach(Directory.GetFiles(buildDirectory, "*"), file =>
            {
                var fileName = Path.GetFileName(file);

                if (file.EndsWith(".symbols.nupkg", StringComparison.OrdinalIgnoreCase))
                {
                    var targetPath = Path.Combine(symbolsTargetDir, fileName);
                    File.Copy(file, targetPath, overwrite: true);
                    return;
                }

                var buildTargetPath = Path.Combine(buildTargetDirectory, fileName);
                File.Copy(file, buildTargetPath, overwrite: true);
                if (file.EndsWith(".nupkg", StringComparison.OrdinalIgnoreCase))
                {
                    var targetPath = Path.Combine(packageTargetDir, fileName);
                    File.Copy(file, targetPath, overwrite: true);

                    var packageInfo = new PackageInfo
                    {
                        IsPartnerPackage = repo.Name == "CoreCLR",
                        PackagePath      = targetPath,
                    };
                    using (var fileStream = File.OpenRead(packageInfo.PackagePath))
                        using (var reader = new PackageArchiveReader(fileStream))
                        {
                            packageInfo.Identity = reader.GetIdentity();
                            packageInfo.PackageDependencyGroups = reader.GetPackageDependencies();
                        }

                    processedPackages.Add(packageInfo);
                }
            });

            if (Directory.Exists(lineupPackageDirectory))
            {
                Parallel.ForEach(Directory.GetFiles(lineupPackageDirectory, "*.nupkg"), file =>
                {
                    var fileName   = Path.GetFileName(file);
                    var targetPath = Path.Combine(lineupTargetDirectory, fileName);
                    File.Copy(file, targetPath, overwrite: true);

                    var packageInfo = new PackageInfo
                    {
                        IsLineupPackage = true,
                        PackagePath     = targetPath,
                    };

                    using (var fileStream = File.OpenRead(packageInfo.PackagePath))
                        using (var reader = new PackageArchiveReader(fileStream))
                        {
                            packageInfo.Identity = reader.GetIdentity();
                            packageInfo.PackageDependencyGroups = reader.GetPackageDependencies();
                        }

                    processedPackages.Add(packageInfo);
                });
            }
        }