Пример #1
0
        public async Task <Package> DownloadPackage(string packageName, bool?useFullNameOverride = null)
        {
            var depInfo = ResolvePackageName(packageName);

            var useFullName = Repo.Config.UseVersionedPackageFolders;
            var name        = depInfo.GetFullName();

            if (useFullNameOverride.HasValue)
            {
                useFullName = useFullNameOverride.Value;
            }

            await GetAndAddPackage(depInfo).ConfigureAwait(false);

            var package = Package.Factory.Open(Repo,
                                               Repo.Config.OperationMode == RepositoryOperationMode.Default
                    ? WorkDir.GetChildDirectoryWithName(useFullName ? name : depInfo.Name)
                    : WorkDir,
                                               name);

            await
            UpdateMultiple(package.GetNeededObjects(), new[] { package }, FindRemotesWithPackage(name).ToArray())
            .ConfigureAwait(false);

            return(package);
        }
Пример #2
0
        async Task ResolveDependencies(List <string> list, List <string> list2, List <Package> packages,
                                       SpecificVersion depInfo, List <SpecificVersion> done, bool useFullName = false, bool noCheckout = false)
        {
            if (!noCheckout && list.Contains(depInfo.Name.ToLower()))
            {
                Repository.Log("Conflicting package, not resolving {0}", depInfo);
                return;
            }
            var name = depInfo.GetFullName();

            if (list2.Contains(name))
            {
                Repository.Log("Duplicate package, skipping {0}", name);
                return;
            }
            list2.Add(name);

            if (!done.Contains(depInfo))
            {
                await GetAndAddPackage(depInfo).ConfigureAwait(false);

                done.Add(depInfo);
            }

            var package = Package.Factory.Open(Repo,
                                               WorkDir.GetChildDirectoryWithName(useFullName ? name : depInfo.Name), name);

            list.Add(depInfo.Name);
            packages.Add(package);

            // TODO: Higher level policy can be overwritten by dependencies (e.g specified dependency contraints). We dont want this.
            foreach (var dep in package.MetaData.GetDependencies())
            {
                await
                ResolveDependencies(list, list2, packages, ResolvePackageName(dep.GetFullName()), done, useFullName,
                                    noCheckout).ConfigureAwait(false);
            }

            OrderPackageLast(list, packages, package);
        }