Пример #1
0
            async Task <PackageAssembly> TryResolveInDependencyAsync(AssemblyNameReference name, PackageDependency dep, ConcurrentDictionary <string, bool> searchedPackages, CancellationTokenSource cts)
            {
                var lowerPackageId = dep.PackageId.ToLowerInvariant();

                if (searchedPackages.ContainsKey(lowerPackageId))
                {
                    return(null);
                }
                searchedPackages.TryAdd(lowerPackageId, true);

                try {
                    var package = await PackageData.GetAsync(dep.PackageId, dep.VersionSpec, cts.Token).ConfigureAwait(false);

                    if (cts.Token.IsCancellationRequested)
                    {
                        return(null);
                    }
                    var fw = package.FindClosestTargetFramework(packageTargetFramework.Moniker);
                    if (fw != null)
                    {
                        return(await TryResolveInFrameworkAsync(name, fw, searchedPackages, cts).ConfigureAwait(false));
                    }
                }
                catch {}
                return(null);
            }
Пример #2
0
            protected override async Task <ApiDiff> GetValueAsync(Tuple <string, string, string> packageSpec, string otherVersion, CancellationToken token)
            {
                var packageId      = packageSpec.Item1;
                var version        = packageSpec.Item2;
                var inputFramework = packageSpec.Item3;

                var package = await PackageData.GetAsync(packageId, version, token).ConfigureAwait(false);

                var otherPackage = await PackageData.GetAsync(packageId, otherVersion, token).ConfigureAwait(false);

                var framework      = package.FindClosestTargetFramework(inputFramework);
                var otherFramework = otherPackage.FindClosestTargetFramework(inputFramework);

                return(await Task.Run(() => new ApiDiff (package, framework, otherPackage, otherFramework)).ConfigureAwait(false));
            }
Пример #3
0
            async Task <PackageAssembly> TryResolveInDependencyAsync(
                AssemblyNameReference name,
                PackageDependency dep,
                ConcurrentDictionary <string, bool> searchedPackages,
                ConcurrentQueue <PackageAssembly> found)
            {
                if (found.Count > 0)
                {
                    return(null);
                }

                var lowerPackageId = dep.PackageId.ToLowerInvariant();

                if (!searchedPackages.TryAdd(lowerPackageId, true))
                {
                    return(null);
                }

                try {
                    var package = await PackageData.GetAsync(dep.PackageId, dep.VersionSpec, httpClient, CancellationToken.None).ConfigureAwait(false);

                    if (found.Count > 0)
                    {
                        return(null);
                    }
                    var fw = package.FindClosestTargetFramework(packageTargetFramework.Moniker);
                    if (fw != null)
                    {
                        var r = await TryResolveInFrameworkAsync(name, fw, searchedPackages, found).ConfigureAwait(false);

                        if (r != null)
                        {
                            found.Enqueue(r);
                        }
                        return(r);
                    }
                }
                catch (Exception ex) {
                    Debug.WriteLine(ex);
                }
                return(null);
            }
        async Task <string> DeepFindTypeUrlAsync(string typeFullName, ConcurrentDictionary <string, bool> tried, ConcurrentQueue <string> found)
        {
            var url = FindTypeUrl(typeFullName, shallow: true);

            if (url != null)
            {
                return(url);
            }

            if (found.Count > 0)
            {
                return(null);
            }

            var depFrameworks = new List <PackageTargetFramework> ();

            var shallowDepPackages = Dependencies.Select(async x => {
                if (!tried.TryAdd(x.PackageId, true))
                {
                    return(null);
                }
                //Console.WriteLine ("TRY " + x.PackageId);
                var data = await PackageData.GetAsync(x.PackageId, x.VersionSpec, CancellationToken.None).ConfigureAwait(false);
                if (found.Count > 0)
                {
                    return(null);
                }
                var fw = data.FindClosestTargetFramework(this.Moniker);
                if (fw == null)
                {
                    return(null);
                }
                depFrameworks.Add(fw);
                var r = fw.FindTypeUrl(typeFullName, shallow: true);
                if (r != null)
                {
                    found.Enqueue(r);
                }
                return(r);
            });
            var shallowResults = await Task.WhenAll(shallowDepPackages).ConfigureAwait(false);

            var shallowResult = shallowResults.FirstOrDefault(x => x != null);

            if (shallowResult != null)
            {
                return(shallowResult);
            }

            var deepDepPackages = depFrameworks.Select(async fw => {
                var r = await fw.DeepFindTypeUrlAsync(typeFullName, tried, found).ConfigureAwait(false);
                if (r != null)
                {
                    found.Enqueue(r);
                }
                return(r);
            });
            var results = await Task.WhenAll(deepDepPackages).ConfigureAwait(false);

            return(results.FirstOrDefault(x => x != null));
        }