Ejemplo n.º 1
0
        private bool InstallSinglePackage(PackageItem pkgItem, NuGetRequest request, ProgressTracker progressTracker)
        {
            bool        packageWasInstalled = false;
            PackageItem packageToBeInstalled;

            request.Debug(Messages.DebugInfoCallMethod, "NuGetFilesFeed3", "InstallSinglePackage");
            try
            {
                if (pkgItem == null || pkgItem.PackageSource == null || pkgItem.PackageSource.Repository == null)
                {
                    return(false);
                }

                // If the source location exists as a directory then we try to get the file location and provide to the packagelocal
                if (Directory.Exists(pkgItem.PackageSource.Location))
                {
                    var fileLocation = pkgItem.PackageSource.Repository.FindPackage(new NuGetSearchContext()
                    {
                        PackageInfo     = new PackageEntryInfo(pkgItem.Id),
                        RequiredVersion = new Provider.Utility.SemanticVersion(pkgItem.Version)
                    }, request).FullFilePath;
                    packageToBeInstalled = NuGetClient.InstallPackageLocal(pkgItem.Id, pkgItem.Version, request, pkgItem.PackageSource, fileLocation, progressTracker);
                }
                else
                {
                    string httpquery = MakeDownloadUri(pkgItem);

                    // wait for the result from installpackage
                    packageToBeInstalled = NuGetClient.InstallPackage(pkgItem.Id, pkgItem.Version, request, pkgItem.PackageSource,
                                                                      httpquery, pkgItem.Package.PackageHash, pkgItem.Package.PackageHashAlgorithm, progressTracker);
                }

                // Package is installed successfully
                if (packageToBeInstalled != null)
                {
                    // if this is a http repository, return metadata from online
                    if (!pkgItem.PackageSource.Repository.IsFile)
                    {
                        request.YieldPackage(pkgItem, packageToBeInstalled.PackageSource.Name, packageToBeInstalled.FullPath);
                    }
                    else
                    {
                        request.YieldPackage(packageToBeInstalled, packageToBeInstalled.PackageSource.Name, packageToBeInstalled.FullPath);
                    }


                    packageWasInstalled = true;
                }

                return(packageWasInstalled);
            }
            finally
            {
                request.Debug(Messages.DebugInfoReturnCall, "NuGetFilesFeed3", "InstallSinglePackage");
            }
        }