From 1d507e9b47fbdcb5bf2d48fd2a54e15e3349dfeb Mon Sep 17 00:00:00 2001 From: Pranav K Date: Tue, 25 Mar 2014 10:19:54 -0700 Subject: [PATCH] Change existence check to account for packages that are updated without revving version --- tools/ProjectKClone/MyService.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/ProjectKClone/MyService.cs b/tools/ProjectKClone/MyService.cs index 02c66b4564..326c585a4d 100644 --- a/tools/ProjectKClone/MyService.cs +++ b/tools/ProjectKClone/MyService.cs @@ -61,9 +61,15 @@ namespace NuGetClone var packages = remoteRepo.GetPackages() .Where(p => p.IsAbsoluteLatestVersion) .ToList(); + Parallel.ForEach(packages, package => { - if (!targetRepo.Exists(package)) + // Some packages are updated without revving the version. We'll only opt not to re-download + // a package if an identical version does not exist on disk. + var existingPackage = targetRepo.FindPackage(package.Id, package.Version); + var dataServicePackage = (DataServicePackage)package; + if (existingPackage == null || + !existingPackage.GetHash(dataServicePackage.PackageHashAlgorithm).Equals(dataServicePackage.PackageHash, StringComparison.Ordinal)) { PurgeOldVersions(targetRepo, package); @@ -85,7 +91,7 @@ namespace NuGetClone private void PurgeOldVersions(LocalPackageRepository targetRepo, IPackage package) { - foreach (var oldPackage in targetRepo.FindPackagesById(package.Id).Where(p => p.Version < package.Version)) + foreach (var oldPackage in targetRepo.FindPackagesById(package.Id).Where(p => p.Version <= package.Version)) { try {