public async Task <bool> IsAvailableAsync(string id, string version, CancellationToken token) { var request = new HttpSourceRequest(() => { var url = _urlBuilder.GetVsixUrl(id, version); // Ideally this would be an HTTP HEAD request, but MyGet does not seem to support // this. As an alternative, make an HTTP GET range request for 0 bytes. var requestMessage = new HttpRequestMessage(HttpMethod.Get, url); requestMessage.Headers.Range = new RangeHeaderValue(0, 0); return(requestMessage); }); request.IgnoreNotFounds = true; var output = await _httpSource.ProcessStreamAsync( request, stream => { var isAvailable = stream != null; return(Task.FromResult(isAvailable)); }, _logger, token); return(output); }
public async Task ExecuteAsync(FeedMirrorRequest request, ILogger logger, CancellationToken token) { var settings = new InMemorySettings(); SettingsUtility.SetConfigValue( settings, "globalPackagesFolder", request.PackagesDirectory); // Set up the source logic. var sourceUrlBuilder = new MyGetUrlBuilder(request.Source); var sourceRepository = Repository.Factory.GetCoreV3(request.Source); var sourceDownloaderResource = await sourceRepository.GetResourceAsync<DownloadResource>(token); var sourceHttpSourceResource = await sourceRepository.GetResourceAsync<HttpSourceResource>(token); var sourceHttpSource = sourceHttpSourceResource.HttpSource; var sourceSymbolsPackageDownloader = new MyGetNuGetSymbolsPackageDownloader(sourceUrlBuilder, sourceHttpSource, logger); var sourcePackageSearchResource = await sourceRepository.GetResourceAsync<PackageSearchResource>(token); var sourceVsixPackageDownloader = new MyGetVsixPackageDownloader(sourceUrlBuilder, sourceHttpSource, logger); // Set up enumeration logic for the source. var nuGetPackageEnumerator = new NuGetPackageEnumerator(sourcePackageSearchResource, logger); var vsixPackageEnumerator = new VsixPackageEnumerator(sourceUrlBuilder.GetVsixUrl(), sourceHttpSource, logger); // Set up the destination logic. var destinationUrlBuilder = new MyGetUrlBuilder(request.Destination); var destinationRepository = Repository.Factory.GetCoreV3(request.Destination); var destinationHttpSourceResource = await destinationRepository.GetResourceAsync<HttpSourceResource>(token); var destinationHttpSource = destinationHttpSourceResource.HttpSource; var destinationMetadataResource = await destinationRepository.GetResourceAsync<MetadataResource>(token); var destinationSymbolsPackageDownloader = new MyGetNuGetSymbolsPackageDownloader(destinationUrlBuilder, destinationHttpSource, logger); var destinationExistenceChecker = new NuGetPackageExistenceChecker(destinationMetadataResource, destinationSymbolsPackageDownloader, logger); var destinationVsixPackageDownloader = new MyGetVsixPackageDownloader(destinationUrlBuilder, destinationHttpSource, logger); // Set up push logic for the destination. var nuGetPackagePusher = new NuGetPackagePusher(destinationUrlBuilder.GetNuGetPushUrl(), request.DestinationApiKey, destinationHttpSource, logger); var vsixPackagePusher = new MyGetVsixPackagePusher(destinationUrlBuilder.GetVsixPushUrl(), request.DestinationApiKey, destinationHttpSource, logger); // Set up the mirror logic. var nuGetPackageMirror = new NuGetPackageMirrorCommand( request.OverwriteExisting, request.IncludeNuGetSymbols, sourceDownloaderResource, sourceSymbolsPackageDownloader, destinationExistenceChecker, nuGetPackagePusher, settings, logger); var nuGetMirror = new NuGetMirrorCommand( request.MaxDegreeOfParallelism, nuGetPackageEnumerator, nuGetPackageMirror, logger); var vsixPackageMirror = new VsixPackageMirrorCommand( request.OverwriteExisting, sourceVsixPackageDownloader, destinationVsixPackageDownloader, vsixPackagePusher); var vsixMirror = new VsixMirrorCommand( request.MaxDegreeOfParallelism, vsixPackageEnumerator, vsixPackageMirror, logger); // Execute. if (request.IncludeNuGet) { await nuGetMirror.Execute(token); } if (request.IncludeVsix) { await vsixMirror.Execute(token); } }
public async Task ExecuteAsync(FeedMirrorRequest request, ILogger logger, CancellationToken token) { var settings = new InMemorySettings(); SettingsUtility.SetConfigValue( settings, "globalPackagesFolder", request.PackagesDirectory); // Set up the source logic. var sourceUrlBuilder = new MyGetUrlBuilder(request.Source); var sourceRepository = Repository.Factory.GetCoreV3(request.Source); var sourceDownloaderResource = await sourceRepository.GetResourceAsync <DownloadResource>(token); var sourceHttpSourceResource = await sourceRepository.GetResourceAsync <HttpSourceResource>(token); var sourceHttpSource = sourceHttpSourceResource.HttpSource; var sourceSymbolsPackageDownloader = new MyGetNuGetSymbolsPackageDownloader(sourceUrlBuilder, sourceHttpSource, logger); var sourcePackageSearchResource = await sourceRepository.GetResourceAsync <PackageSearchResource>(token); var sourceVsixPackageDownloader = new MyGetVsixPackageDownloader(sourceUrlBuilder, sourceHttpSource, logger); // Set up enumeration logic for the source. var nuGetPackageEnumerator = new NuGetPackageEnumerator(sourcePackageSearchResource, logger); var vsixPackageEnumerator = new VsixPackageEnumerator(sourceUrlBuilder.GetVsixUrl(), sourceHttpSource, logger); // Set up the destination logic. var destinationUrlBuilder = new MyGetUrlBuilder(request.Destination); var destinationRepository = Repository.Factory.GetCoreV3(request.Destination); var destinationHttpSourceResource = await destinationRepository.GetResourceAsync <HttpSourceResource>(token); var destinationHttpSource = destinationHttpSourceResource.HttpSource; var destinationMetadataResource = await destinationRepository.GetResourceAsync <MetadataResource>(token); var destinationSymbolsPackageDownloader = new MyGetNuGetSymbolsPackageDownloader(destinationUrlBuilder, destinationHttpSource, logger); var destinationExistenceChecker = new NuGetPackageExistenceChecker(destinationMetadataResource, destinationSymbolsPackageDownloader, logger); var destinationVsixPackageDownloader = new MyGetVsixPackageDownloader(destinationUrlBuilder, destinationHttpSource, logger); // Set up push logic for the destination. var nuGetPackagePusher = new NuGetPackagePusher(destinationUrlBuilder.GetNuGetPushUrl(), request.DestinationApiKey, destinationHttpSource, logger); var vsixPackagePusher = new MyGetVsixPackagePusher(destinationUrlBuilder.GetVsixPushUrl(), request.DestinationApiKey, destinationHttpSource, logger); // Set up the mirror logic. var nuGetPackageMirror = new NuGetPackageMirrorCommand( request.OverwriteExisting, request.IncludeNuGetSymbols, sourceDownloaderResource, sourceSymbolsPackageDownloader, destinationExistenceChecker, nuGetPackagePusher, settings, logger); var nuGetMirror = new NuGetMirrorCommand( request.MaxDegreeOfParallelism, nuGetPackageEnumerator, nuGetPackageMirror, logger); var vsixPackageMirror = new VsixPackageMirrorCommand( request.OverwriteExisting, sourceVsixPackageDownloader, destinationVsixPackageDownloader, vsixPackagePusher); var vsixMirror = new VsixMirrorCommand( request.MaxDegreeOfParallelism, vsixPackageEnumerator, vsixPackageMirror, logger); // Execute. if (request.IncludeNuGet) { await nuGetMirror.Execute(token); } if (request.IncludeVsix) { await vsixMirror.Execute(token); } }