/// <summary>
        /// Add a single package
        /// </summary>
        public void AddPackageFromSingleVersionLookup(
            Configuration.PackageSource source,
            PackageIdentity identity,
            NuGetFramework framework,
            SourcePackageDependencyInfo package)
        {
            var key = new GatherSingleCacheKey(identity, source, framework);

            _singleVersion.TryAdd(key, package);
        }
        /// <summary>
        /// Retrieve an exact version of a package
        /// </summary>
        public GatherCacheResult GetPackage(
            Configuration.PackageSource source,
            PackageIdentity package,
            NuGetFramework framework)
        {
            var key = new GatherSingleCacheKey(package, source, framework);

            var hasEntry = false;

            SourcePackageDependencyInfo result;

            hasEntry = _singleVersion.TryGetValue(key, out result);

            if (!hasEntry)
            {
                // Try finding the packages from cached all packages results
                var allPackagesResult = GetPackages(source, package.Id, framework);

                if (allPackagesResult.HasEntry)
                {
                    hasEntry = true;

                    // Find the exact package version in the list. The result may be null
                    // if that version does not exist.
                    result = allPackagesResult.Packages
                             .Where(p => package.Equals(p))
                             .FirstOrDefault();
                }
            }

            var packages = new List <SourcePackageDependencyInfo>(1);

            if (result != null)
            {
                packages.Add(result);
            }

            return(new GatherCacheResult(hasEntry, packages));
        }