예제 #1
0
        public void IfToStringReturnName()
        {
            var package = new PackageVersion();

            package.Name = "test";
            Assert.AreEqual("Name", package.ToString().Substring(0, 4));
        }
예제 #2
0
//----------------------------------------------------------------------------------------------------------------------


        private void CreateAndCheckPackageVersion(string semanticVer, int major, int minor, int patch, PackageLifecycle lifecycle,
                                                  string additionalMetadata)
        {
            PackageVersion packageVersion = new PackageVersion(semanticVer);

            Assert.AreEqual(major, packageVersion.Major);
            Assert.AreEqual(minor, packageVersion.Minor);
            Assert.AreEqual(patch, packageVersion.Patch);
            Assert.AreEqual(lifecycle, packageVersion.Lifecycle);
            Assert.AreEqual(additionalMetadata, packageVersion.AdditionalMetadata);
            Assert.AreEqual(semanticVer, packageVersion.ToString());
        }
예제 #3
0
        public static string GetFullVersion(this AssemblyDefinition assembly, PackageVersion packageVersion)
        {
            if (!Enum.IsDefined(typeof(PackageVersion), packageVersion))
            {
                throw new InvalidEnumArgumentException(nameof(packageVersion), (int)packageVersion, typeof(PackageVersion));
            }

            if (packageVersion == PackageVersion.AssemblyVersionAttribute)
            {
                return(assembly.Name.Version.ToString());
            }

            return(assembly.CustomAttributes.GetFirstAttributeValueOrDefault(packageVersion.ToString(), assembly.Name.Version.ToString));
        }
예제 #4
0
        public void ToStringTest()
        {
            PackageVersion v;
            String         version;


            //
            // Prepare the test.
            //
            version = "1.3.7";

            //
            // Run the test.
            //
            v = new PackageVersion(version);

            //
            // Verify the test.
            //
            Assert.AreEqual(version, v.ToString());
        }
예제 #5
0
        /// <summary>
        /// Fetch, if not already downloaded, and install the package represented by
        /// (<paramref name="packageId"/>, <paramref name="version"/>).
        /// </summary>
        /// <remarks>It is safe to call it concurrently be cause we operations are done using the FileLock.</remarks>
        /// <param name="packageId">Name of package to install.</param>
        /// <param name="version">Version of package to install.</param>
        public async Task <NugetLocalPackage> InstallPackage(string packageId, PackageVersion version, IEnumerable <string> targetFrameworks, ProgressReport progress)
        {
            using (GetLocalRepositoryLock())
            {
                currentProgressReport = progress;
                try
                {
                    var identity = new PackageIdentity(packageId, version.ToNuGetVersion());

                    var resolutionContext = new ResolutionContext(
                        DependencyBehavior.Lowest,
                        true,
                        true,
                        VersionConstraints.None);

                    var repositories = PackageSources.Select(sourceRepositoryProvider.CreateRepository).ToArray();

                    var projectContext = new EmptyNuGetProjectContext()
                    {
                        ActionType = NuGetActionType.Install,
                        PackageExtractionContext = new PackageExtractionContext(PackageSaveMode.Defaultv3, XmlDocFileSaveMode.Skip, null, NativeLogger),
                    };

                    ActivityCorrelationId.StartNew();

                    {
                        var installPath = SettingsUtility.GetGlobalPackagesFolder(settings);

                        // In case it's a package without any TFM (i.e. Visual Studio plugin), we still need to specify one
                        if (!targetFrameworks.Any())
                        {
                            targetFrameworks = new string[] { "net6.0" }
                        }
                        ;

                        // Old version expects to be installed in GamePackages
                        if (packageId == "Xenko" && version < new PackageVersion(3, 0, 0, 0) && oldRootDirectory != null)
                        {
                            installPath = oldRootDirectory;
                        }

                        var projectPath = Path.Combine("StrideLauncher.json");
                        var spec        = new PackageSpec()
                        {
                            Name         = Path.GetFileNameWithoutExtension(projectPath), // make sure this package never collides with a dependency
                            FilePath     = projectPath,
                            Dependencies = new List <LibraryDependency>()
                            {
                                new LibraryDependency
                                {
                                    LibraryRange = new LibraryRange(packageId, new VersionRange(version.ToNuGetVersion()), LibraryDependencyTarget.Package),
                                }
                            },
                            RestoreMetadata = new ProjectRestoreMetadata
                            {
                                ProjectPath              = projectPath,
                                ProjectName              = Path.GetFileNameWithoutExtension(projectPath),
                                ProjectStyle             = ProjectStyle.PackageReference,
                                ProjectUniqueName        = projectPath,
                                OutputPath               = Path.Combine(Path.GetTempPath(), $"StrideLauncher-{packageId}-{version.ToString()}"),
                                OriginalTargetFrameworks = targetFrameworks.ToList(),
                                ConfigFilePaths          = settings.GetConfigFilePaths(),
                                PackagesPath             = installPath,
                                Sources         = SettingsUtility.GetEnabledSources(settings).ToList(),
                                FallbackFolders = SettingsUtility.GetFallbackPackageFolders(settings).ToList()
                            },
                        };
                        foreach (var targetFramework in targetFrameworks)
                        {
                            spec.TargetFrameworks.Add(new TargetFrameworkInformation {
                                FrameworkName = NuGetFramework.Parse(targetFramework)
                            });
                        }

                        using (var context = new SourceCacheContext {
                            MaxAge = DateTimeOffset.UtcNow
                        })
                        {
                            context.IgnoreFailedSources = true;

                            var dependencyGraphSpec = new DependencyGraphSpec();

                            dependencyGraphSpec.AddProject(spec);

                            dependencyGraphSpec.AddRestore(spec.RestoreMetadata.ProjectUniqueName);

                            IPreLoadedRestoreRequestProvider requestProvider = new DependencyGraphSpecRequestProvider(new RestoreCommandProvidersCache(), dependencyGraphSpec);

                            var restoreArgs = new RestoreArgs
                            {
                                AllowNoOp             = true,
                                CacheContext          = context,
                                CachingSourceProvider = new CachingSourceProvider(new PackageSourceProvider(settings)),
                                Log = NativeLogger,
                            };

                            // Create requests from the arguments
                            var requests = requestProvider.CreateRequests(restoreArgs).Result;

                            foreach (var request in requests)
                            {
                                // Limit concurrency to avoid timeout
                                request.Request.MaxDegreeOfConcurrency = 4;

                                var command = new RestoreCommand(request.Request);

                                // Act
                                var result = await command.ExecuteAsync();

                                if (!result.Success)
                                {
                                    throw new InvalidOperationException($"Could not restore package {packageId}");
                                }
                                foreach (var install in result.RestoreGraphs.Last().Install)
                                {
                                    var package = result.LockFile.Libraries.FirstOrDefault(x => x.Name == install.Library.Name && x.Version == install.Library.Version);
                                    if (package != null)
                                    {
                                        var packagePath = Path.Combine(installPath, package.Path);
                                        OnPackageInstalled(this, new PackageOperationEventArgs(new PackageName(install.Library.Name, install.Library.Version.ToPackageVersion()), packagePath));
                                    }
                                }
                            }
                        }

                        if (packageId == "Xenko" && version < new PackageVersion(3, 0, 0, 0))
                        {
                            UpdateTargetsHelper();
                        }
                    }

                    // Load the recently installed package
                    var installedPackages = GetPackagesInstalled(new[] { packageId });
                    return(installedPackages.FirstOrDefault(p => p.Version == version));
                }
                finally
                {
                    currentProgressReport = null;
                }
            }
        }
 public static NuGet.SemanticVersion ToSemanticVersion(this PackageVersion version)
 {
     return(version == null ? null : new NuGet.SemanticVersion(version.ToString()));
 }
 /// <summary>
 /// User has entered a value in the version field. It has already been
 /// validated and needs to be stored.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 void tbVersion_Validated(object sender, EventArgs e)
 {
     Version        = new PackageVersion(tbVersion.Text);
     tbVersion.Text = Version.ToString();
 }
예제 #8
0
        public List <ICodebaseAlert> GenerateAlerts(Codebase codebase)
        {
            var alerts = new List <CodebaseAlert>();

            foreach (var projectDirectory in codebase.ProjectDirectories)
            {
                Dictionary <string, List <ProjectDirectory> > qaOnlyPackages          = new Dictionary <string, List <ProjectDirectory> >();
                Dictionary <string, List <ProjectDirectory> > versionMismatchPackages = new Dictionary <string, List <ProjectDirectory> >();
                Dictionary <string, string> packagesUsingProdVersion = new Dictionary <string, string>();
                Dictionary <string, string> notFoundPackages         = new Dictionary <string, string>();

                if (projectDirectory.PackagesFile == null)
                {
                    continue;
                }

                foreach (var packageReference in projectDirectory.PackagesFile.PackageReferences)
                {
                    if (packageReference.PackageName == null)
                    {
                        continue;
                    }

                    var packageNameNormalised           = packageReference.PackageName.Normalised();
                    var packageNameAndVersionNormalised = packageNameNormalised + "_" + packageReference.Version;


                    //Already checked as in prod - OK
                    if (packagesUsingProdVersion.ContainsKey(packageNameAndVersionNormalised))
                    {
                        continue;
                    }
                    if (notFoundPackages.ContainsKey(packageNameAndVersionNormalised))
                    {
                        continue;
                    }


                    //We are not the first project directory to use this QA package
                    List <ProjectDirectory> directoriesWithQaPackageAlready = new List <ProjectDirectory>();
                    if (qaOnlyPackages.TryGetValue(packageNameAndVersionNormalised, out directoriesWithQaPackageAlready))
                    {
                        directoriesWithQaPackageAlready.Add(projectDirectory);
                        continue;
                    }

                    //We are the first to check this package essentially
                    NuGetPackage latestInProd;
                    NuGetPackage latestInQa;
                    codebase.NuGetSourceProduction.LatestVersionLookup.TryGetValue(packageNameNormalised, out latestInProd);
                    codebase.NuGetSourceQa.LatestVersionLookup.TryGetValue(packageNameNormalised, out latestInQa);

                    //Not in either feed! Better log this
                    if (latestInProd == null && latestInQa == null)
                    {
                        notFoundPackages.Add(packageNameAndVersionNormalised, packageNameAndVersionNormalised);
                        continue;
                    }

                    //If it is in prod - add to that index
                    if (latestInProd != null && packageReference.Version <= latestInProd.Version)
                    {
                        if (!packagesUsingProdVersion.ContainsKey(packageNameAndVersionNormalised))
                        {
                            packagesUsingProdVersion.Add(packageNameAndVersionNormalised, packageNameAndVersionNormalised);
                        }
                        continue;
                    }

                    directoriesWithQaPackageAlready.Add(projectDirectory);
                    qaOnlyPackages.Add(packageNameAndVersionNormalised, directoriesWithQaPackageAlready);
                }

                foreach (var notFoundPackage in notFoundPackages.Keys.OrderBy(k => k))
                {
                    var alert = new CodebaseAlert("Phantom NuGet Package Reference Alert", CodebaseAlertPriority.Critical, null)
                                .AddDetail("Package {0} is not found in either QA or Production Feeds", notFoundPackage);
                    alerts.Add(alert);
                }

                foreach (var qaOnlyPackage in qaOnlyPackages.Keys.OrderBy(k => k))
                {
                    var alert = new CodebaseAlert("QA NuGet Package Reference Alert", CodebaseAlertPriority.Warning, null)
                                .AddDetail("Package {0} is currently only found in QA feed", qaOnlyPackage);
                    alerts.Add(alert);
                }

                foreach (var versionMismatchPackage in versionMismatchPackages.Keys.OrderBy(k => k))
                {
                    PackageVersion expectedVersion = null;
                    var            alert           = new CodebaseAlert("NuGet Package Version Anomaly Alert", CodebaseAlertPriority.Critical, null)
                                                     .AddDetail("Package {0} is referenced instead of the standard version {1}", versionMismatchPackage, expectedVersion.ToString());

                    var affectedProjects = versionMismatchPackages[versionMismatchPackage];
                    foreach (var project in affectedProjects)
                    {
                        alert.AddDetail(" - {0}", project.DisplayPath(codebase.RootSourceDirectory));
                    }

                    alerts.Add(alert);
                }
            }


            return(alerts.ToList <ICodebaseAlert>());
        }
예제 #9
0
파일: Atom.cs 프로젝트: rcarz/fusion
        /// <summary>
        /// Makes a string representation of the package name, version, and slot number.
        /// </summary>
        /// <param name="pkg">package name</param>
        /// <param name="ver">package version</param>
        /// <param name="slot">slot number</param>
        /// <returns>formatted package version string</returns>
        public static string FormatPackageVersion(string pkg, PackageVersion ver, uint slot)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(pkg);

            if (ver != null)
                sb.Append(String.Format("-{0}", ver.ToString()));

            if (slot > 0)
                sb.Append(String.Format(":{0}", slot.ToString()));

            return sb.ToString();
        }