public void ItShouldReturnListOfManifestFiles() { Initialize(nameof(ItShouldReturnListOfManifestFiles)); NuGetPackageDownloader nuGetPackageDownloader = new NuGetPackageDownloader(new DirectoryPath(_updaterDir), null, new MockFirstPartyNuGetPackageSigningVerifier(), new NullLogger(), restoreActionConfig: new RestoreActionConfig(NoCache: true)); MockWorkloadResolver mockWorkloadResolver = new(Enumerable.Empty <WorkloadResolver.WorkloadInfo>()); WorkloadManifestUpdater workloadManifestUpdater = new WorkloadManifestUpdater(new BufferedReporter(), mockWorkloadResolver, nuGetPackageDownloader, _updaterDir, _updaterDir, new MockInstallationRecordRepository()); string package = DownloadSamplePackage(new PackageId("Microsoft.NET.Workload.Emscripten.Manifest-6.0.100"), NuGetVersion.Parse("6.0.0-preview.7.21377.2"), nuGetPackageDownloader); workloadManifestUpdater.ExtractManifestPackagesToTempDirAsync(new List <string> { package }, new DirectoryPath(_manifestDirectory)).GetAwaiter().GetResult(); TempDirectoryWorkloadManifestProvider tempDirectoryWorkloadManifestProvider = new TempDirectoryWorkloadManifestProvider(_manifestDirectory, mockWorkloadResolver.GetSdkFeatureBand()); IEnumerable <(string manifestId, string informationalPath, Func <Stream> openManifestStream, Func <Stream> openLocalizationStream)> manifest = tempDirectoryWorkloadManifestProvider.GetManifests(); manifest.First().manifestId.Should() .NotBe("microsoft.net.workload.emscripten.manifest-6.0.100.6.0.0-preview.7.21377.2"); manifest.First().manifestId.Should() .BeEquivalentTo("microsoft.net.workload.emscripten"); }
private async Task DownloadToOfflineCacheAsync(DirectoryPath offlineCache, bool includePreviews) { var manifestPackagePaths = await _workloadManifestUpdater.DownloadManifestPackagesAsync(includePreviews, offlineCache); var tempManifestDir = Path.Combine(offlineCache.Value, "temp-manifests"); try { await _workloadManifestUpdater.ExtractManifestPackagesToTempDirAsync(manifestPackagePaths, new DirectoryPath(tempManifestDir)); var overlayManifestProvider = new TempDirectoryWorkloadManifestProvider(tempManifestDir, _sdkVersion.ToString()); _workloadResolver = WorkloadResolver.Create(overlayManifestProvider, _dotnetPath, _sdkVersion.ToString(), _userProfileDir); if (_workloadInstaller.GetInstallationUnit().Equals(InstallationUnit.Packs)) { var installer = _workloadInstaller.GetPackInstaller(); var packsToUpdate = GetUpdatablePacks(installer); foreach (var pack in packsToUpdate) { installer.DownloadToOfflineCache(pack, new DirectoryPath(_downloadToCacheOption), _includePreviews); } } else { throw new NotImplementedException(); } } finally { if (!string.IsNullOrWhiteSpace(tempManifestDir) && Directory.Exists(tempManifestDir)) { Directory.Delete(tempManifestDir, true); } } }
private async Task UseTempManifestsToResolvePacksAsync(DirectoryPath tempPath, bool includePreview) { var manifestPackagePaths = await _workloadManifestUpdater.DownloadManifestPackagesAsync(includePreview, tempPath); await _workloadManifestUpdater.ExtractManifestPackagesToTempDirAsync(manifestPackagePaths, tempPath); var overlayManifestProvider = new TempDirectoryWorkloadManifestProvider(tempPath.Value, _sdkVersion.ToString()); _workloadResolver = WorkloadResolver.Create(overlayManifestProvider, _dotnetPath, _sdkVersion.ToString(), _userProfileDir); }
public IEnumerable <WorkloadId> GetUpdatableWorkloadsToAdvertise(IEnumerable <WorkloadId> installedWorkloads) { try { var overlayProvider = new TempDirectoryWorkloadManifestProvider(Path.Combine(_userProfileDir, "sdk-advertising", _sdkFeatureBand.ToString()), _sdkFeatureBand.ToString()); var advertisingManifestResolver = _workloadResolver.CreateOverlayResolver(overlayProvider); return(_workloadResolver.GetUpdatedWorkloads(advertisingManifestResolver, installedWorkloads)); } catch { return(Array.Empty <WorkloadId>()); } }
private async Task DownloadToOfflineCacheAsync(IEnumerable <WorkloadId> workloadIds, DirectoryPath offlineCache, bool skipManifestUpdate, bool includePreviews) { string tempManifestDir = null; if (!skipManifestUpdate) { var manifestPackagePaths = await _workloadManifestUpdater.DownloadManifestPackagesAsync(includePreviews, offlineCache); if (manifestPackagePaths != null && manifestPackagePaths.Any()) { tempManifestDir = Path.Combine(offlineCache.Value, "temp-manifests"); await _workloadManifestUpdater.ExtractManifestPackagesToTempDirAsync(manifestPackagePaths, new DirectoryPath(tempManifestDir)); var overlayProvider = new TempDirectoryWorkloadManifestProvider(tempManifestDir, _sdkVersion.ToString()); _workloadResolver = _workloadResolver.CreateOverlayResolver(overlayProvider); } else { Reporter.WriteLine(LocalizableStrings.SkippingManifestUpdate); } var installedWorkloads = _workloadInstaller.GetWorkloadInstallationRecordRepository().GetInstalledWorkloads(new SdkFeatureBand(_sdkVersion)); workloadIds = workloadIds.Concat(installedWorkloads).Distinct(); } if (_workloadInstaller.GetInstallationUnit().Equals(InstallationUnit.Packs)) { var installer = _workloadInstaller.GetPackInstaller(); var workloadPacks = GetPacksToInstall(workloadIds); foreach (var pack in workloadPacks) { installer.DownloadToOfflineCache(pack, offlineCache, includePreviews); } } else { var installer = _workloadInstaller.GetWorkloadInstaller(); foreach (var workloadId in workloadIds) { installer.DownloadToOfflineCache(workloadId, offlineCache, includePreviews); } } if (!string.IsNullOrWhiteSpace(tempManifestDir) && Directory.Exists(tempManifestDir)) { Directory.Delete(tempManifestDir, true); } }
private async Task UseTempManifestsToResolvePacksAsync(DirectoryPath tempPath, bool includePreview) { var manifestPackagePaths = await _workloadManifestUpdater.DownloadManifestPackagesAsync(includePreview, tempPath); if (manifestPackagePaths == null || !manifestPackagePaths.Any()) { Reporter.WriteLine(LocalizableStrings.SkippingManifestUpdate); return; } await _workloadManifestUpdater.ExtractManifestPackagesToTempDirAsync(manifestPackagePaths, tempPath); var overlayProvider = new TempDirectoryWorkloadManifestProvider(tempPath.Value, _sdkVersion.ToString()); _workloadResolver = _workloadResolver.CreateOverlayResolver(overlayProvider); }