예제 #1
0
 private void AddPackageItemToDictionary(Dictionary <string, PackageItem> packageItems, PackageItem packageItem)
 {
     if (packageItems.ContainsKey(packageItem.Name))
     {
         if (comparer == null)
         {
             comparer = new VersionComparer(VersionComparison.VersionRelease);
         }
         if (comparer.Compare(packageItems[packageItem.Name].Version, packageItem.Version) != 0 && UseNewestAvailablePackages != true)
         {
             Log.LogError("Package named {0} already exists.  Cannot have multiple packages with the same name.\n", packageItem.Name);
             Log.LogError("To permit package name clashes and take latest, specify 'UseNewestAvailablePackages=true'.\n");
             Log.LogError("Package {0} version {1} clashes with {2}", packageItem.Name, packageItems[packageItem.Name].Version.ToFullString(), packageItem.Version.ToFullString());
         }
         else if (UseNewestAvailablePackages == true)
         {
             PackageItem item = (comparer.Compare(packageItems[packageItem.Name].Version, packageItem.Version) < 0) ? packageItem : packageItems[packageItem.Name];
             packageItems[packageItem.Name] = item;
         }
     }
     else
     {
         packageItems.Add(packageItem.Name, packageItem);
     }
 }
예제 #2
0
        public ActionResult ViewIgChanges(int id)
        {
            if (!CheckPoint.Instance.GrantViewImplementationGuide(id))
            {
                throw new AuthorizationException("You do not have access to view this implementation guide's changes.");
            }

            ImplementationGuide lGuide       = this.tdb.ImplementationGuides.Single(ig => ig.Id == id);
            ViewChangesModel    lModel       = new ViewChangesModel();
            IGSettingsManager   igSettings   = new IGSettingsManager(this.tdb, lGuide.Id);
            IIGTypePlugin       igTypePlugin = lGuide.ImplementationGuideType.GetPlugin();
            VersionComparer     lComparer    = VersionComparer.CreateComparer(tdb, igTypePlugin, igSettings);

            lModel.IgName = lGuide.Name;

            // Modified templates
            foreach (Template lNewTemplate in lGuide.ChildTemplates.Where(t => t.PreviousVersionTemplateId.HasValue))
            {
                Template         lPreviousVersion = this.tdb.Templates.Single(t => t.Id == lNewTemplate.PreviousVersionTemplateId.Value);
                ComparisonResult lResult          = lComparer.Compare(lPreviousVersion, lNewTemplate);

                lModel.TemplateDifferences.Add(
                    new DifferenceModel(lResult)
                {
                    Id                   = lNewTemplate.Id,
                    IsAdded              = false,
                    TemplateName         = lNewTemplate.Name,
                    PreviousTemplateName = string.Format("{0} ({1})", lPreviousVersion.Name, lPreviousVersion.Oid),
                    PreviousTemplateId   = lPreviousVersion.Id,
                    Difference           = lResult,
                    InlineConstraints    = GetInlineConstraintChanges(lResult)
                });
            }

            // Added templates
            foreach (Template lNewTemplate in lGuide.ChildTemplates.Where(t => !t.PreviousVersionTemplateId.HasValue))
            {
                ComparisonResult lResult = lComparer.Compare(new Template(), lNewTemplate);

                lModel.TemplateDifferences.Add(
                    new DifferenceModel(lResult)
                {
                    Id           = lNewTemplate.Id,
                    IsAdded      = true,
                    TemplateName = lNewTemplate.Name
                });
            }

            return(View(lModel));
        }
예제 #3
0
        /// <summary>
        /// If this IG is a new version of a previous IG, scan the templates for new versions and add them as an appendix
        /// </summary>
        private void LoadChangesAppendix()
        {
            List <IGDifferenceViewModel> lDifferences = new List <IGDifferenceViewModel>();

            if (this.implementationGuide.PreviousVersionImplementationGuideId.HasValue)
            {
                VersionComparer lComparer          = VersionComparer.CreateComparer(_tdb);
                var             versionedTemplates = this._templates.Where(y => y.OwningImplementationGuideId == this.implementationGuide.Id);

                foreach (Template lChildTemplate in versionedTemplates)
                {
                    IGDifferenceViewModel lModel
                        = new IGDifferenceViewModel()
                        {
                        TemplateName     = lChildTemplate.Name,
                        TemplateOid      = lChildTemplate.Oid,
                        TemplateBookmark = lChildTemplate.Bookmark
                        };

                    if (lChildTemplate.PreviousVersionTemplateId.HasValue)
                    {
                        Template lPreviousTemplate = _tdb.Templates.Single(t => t.Id == lChildTemplate.PreviousVersionTemplateId);
                        lModel.Difference = lComparer.Compare(lPreviousTemplate, lChildTemplate);
                        lDifferences.Add(lModel);
                    }
                }

                this.LoadDifferencesAsAppendix(this.implementationGuide.Name, lDifferences);
            }
        }
        public void CompareRightNull()
        {
            SemanticVersion left = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            Assert.Equal(1, comparer.Compare(left, null));
        }
예제 #5
0
        public void CompareLeftNull()
        {
            SemanticVersion right = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            Assert.Equal(-1, comparer.Compare(null, right));
        }
예제 #6
0
        public void CompareRightNull()
        {
            SemanticVersion left = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            Assert.Equal(1, comparer.Compare(left, null));
        }
        public void CompareLeftNull()
        {
            SemanticVersion right = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            Assert.Equal(-1, comparer.Compare(null, right));
        }
예제 #8
0
        public void VersionRelease_Compare_Test(string v1, string v2, int expectedResult)
        {
            var version1 = NuGet.Versioning.NuGetVersion.Parse(v1);
            var version2 = NuGet.Versioning.NuGetVersion.Parse(v2);

            var result = VersionComparer.Compare(version1, version2, VersionComparison.VersionRelease);

            Assert.Equal(expectedResult, result);
        }
        public void Compare()
        {
            SemanticVersion left = new SemanticVersion(1, 0, 0);
            SemanticVersion right = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            Assert.Equal(0,comparer.Compare(left, right));
        }
예제 #10
0
        public void Compare()
        {
            SemanticVersion left  = new SemanticVersion(1, 0, 0);
            SemanticVersion right = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            Assert.Equal(0, comparer.Compare(left, right));
        }
예제 #11
0
        private void compareToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (compareToolStripMenuItem.Text == __Compare)
            {
                if (lvwVersions.SelectedItems.Count == 2)
                {
                    VersionComparer.Compare(VersionObjectType, ObjectName, (IdpeVersion)lvwVersions.SelectedItems[0].Tag, (IdpeVersion)lvwVersions.SelectedItems[1].Tag);
                }
            }
            else if (compareToolStripMenuItem.Text == __SetToTheVersion)
            {
                if (lvwVersions.SelectedItems.Count == 1)
                {
                    IdpeVersion version = lvwVersions.SelectedItems[0].Tag as IdpeVersion;
                    if (MessageBox.Show(string.Format("Are you sure you want to revert '{0}' to Version {1}?", ObjectName, version.Version)
                                        , "Revert Version", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == System.Windows.Forms.DialogResult.Yes)
                    {
                        try
                        {
                            this.Cursor = Cursors.WaitCursor;
                            switch (VersionObjectType)
                            {
                            case VersionObjectTypes.Attribute:
                                break;

                            case VersionObjectTypes.DataSource:
                                DataSourceBundle dataSourceBundle = VersionComparer.ConvertToSreVersionObject(VersionObjectTypes.DataSource, version) as DataSourceBundle;
                                dataSourceBundle.Import();
                                Reverted = true;
                                break;

                            case VersionObjectTypes.Rule:
                                DataSourcePatch dataSourcePatch = VersionComparer.ConvertToSreVersionObject(VersionObjectTypes.Rule, version) as DataSourcePatch;
                                dataSourcePatch.Import();
                                Reverted = true;
                                break;
                            }
                            //this.Close();
                        }
                        catch (Exception ex)
                        {
                            //toolStripStatusLabel1.Text = ex.Message;
                        }
                        finally
                        {
                            this.Cursor = Cursors.Default;
                        }
                    }
                }
            }

            if (Reverted)
            {
                this.ParentForm.DialogResult = DialogResult.OK;
                this.ParentForm.Close();
            }
        }
예제 #12
0
        public void Comparisons()
        {
            var comparer = new VersionComparer();

            int c1 = comparer.Compare("0.10.0", "0.2");

            Assert.Equal(1, c1);

            int c2 = comparer.Compare(default, "0.2");
예제 #13
0
        public void ComparePrereleaseNonnumeric()
        {
            SemanticVersion left  = new SemanticVersion(1, 0, 0, "42.alpha");
            SemanticVersion right = new SemanticVersion(1, 0, 0, "42.beta");

            VersionComparer comparer = new VersionComparer();

            // "identifiers with letters or hyphens are compared lexically in ASCII sort order"
            Assert.Equal(-1, comparer.Compare(left, right));
        }
예제 #14
0
        public void ComparePrereleaseNumeric()
        {
            SemanticVersion left  = new SemanticVersion(1, 0, 0, "alpha.23");
            SemanticVersion right = new SemanticVersion(1, 0, 0, "alpha.5");

            VersionComparer comparer = new VersionComparer();

            // "identifiers consisting of only digits are compared numerically"
            Assert.Equal(1, comparer.Compare(left, right));
        }
예제 #15
0
        static async Task <UpdateResult> DoUpdate(bool useMaster = false)
        {
            try
            {
                string tree;
                var    repo = XianxiaRepo;

                if (useMaster)
                {
                    tree = "master-wip";
                }
                else
                {
                    tree = await GitHubGetters.GetLatestVersion(repo);
                }
                var xmlPath = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
                xmlPath = Path.Combine(xmlPath, XmlData.Files.Xianxia);
                XmlDataSet fileData = XmlData._LoadXmlData(xmlPath);

                if (useMaster == false)
                {
                    var currentVersion   = NuGetVersion.Parse(fileData.Version);
                    var availableVersion = NuGetVersion.Parse(tree);
                    //If current version is at or greater than the available version, return
                    if (VersionComparer.Compare(currentVersion, availableVersion, VersionComparison.Default) >= 0)
                    {
                        Console.WriteLine("Xianxia data file is current, no need for update");
                        return(UpdateResult.NoneNecessary);
                    }
                }
                if (await UpdateStatusEffects(repo, tree, fileData) != UpdateResult.UpdatedFiles)
                {
                    Console.WriteLine("Error! Could not parse status file!");
                    return(UpdateResult.Error);
                }
                if (await UpdateFlags(repo, tree, fileData) != UpdateResult.UpdatedFiles)
                {
                    Console.WriteLine("Error! Could not parse flag file!");
                    return(UpdateResult.Error);
                }
                fileData.Version = tree;
                if (XmlData._SaveXml(xmlPath, fileData) != XmlLoadingResult.Success)
                {
                    Console.WriteLine("Error! Could not save xml!");
                    return(UpdateResult.Error);
                }
                Console.WriteLine("saved xml!");
            }
            catch (Exception e)
            {
                Console.WriteLine("Error! " + e.ToString());
                return(UpdateResult.Error);
            }
            return(UpdateResult.UpdatedFiles);
        }
예제 #16
0
        public void ComparePrereleaseNumericVsOther()
        {
            SemanticVersion left  = new SemanticVersion(1, 0, 0, "alpha.1");
            SemanticVersion right = new SemanticVersion(1, 0, 0, "alpha.beta");

            VersionComparer comparer = new VersionComparer();

            // "Numeric identifiers always have lower precedence than non-numeric identifiers."
            // Meaning: "... precede ..." (as per the above example from the spec).
            Assert.Equal(-1, comparer.Compare(left, right));
        }
예제 #17
0
        public void ComparePrereleaseRelease()
        {
            SemanticVersion left  = new SemanticVersion(1, 0, 0, "beta");
            SemanticVersion right = new SemanticVersion(1, 0, 0);

            VersionComparer comparer = new VersionComparer();

            // "When major, minor, and patch are equal, a pre-release
            // version has lower precedence than a normal version."
            Assert.Equal(-1, comparer.Compare(left, right));
        }
예제 #18
0
        private static int CompareOneWay(VersionComparer comparer, string version1, string version2)
        {
            // Arrange
            var a = Version.Parse(version1);
            var b = Version.Parse(version2);
            var c = Version.Parse(version1);
            var d = Version.Parse(version2);

            // Act
            var results = new List <int>();

            results.Add(comparer.Compare(a, b));
            results.Add(comparer.Compare(a, d));
            results.Add(comparer.Compare(c, b));
            results.Add(comparer.Compare(c, d));

            // Assert
            Assert.True(results.FindAll(x => x == results[0]).Count == results.Count);

            return(results[0]);
        }
예제 #19
0
        public void ComparePrereleaseFieldNumber()
        {
            SemanticVersion left  = new SemanticVersion(1, 0, 0, "alpha");
            SemanticVersion right = new SemanticVersion(1, 0, 0, "alpha.1");

            VersionComparer comparer = new VersionComparer();

            // "A larger set of pre-release fields has a higher
            // precedence than a smaller set, if all of the preceding
            // identifiers are equal."
            Assert.Equal(-1, comparer.Compare(left, right));
        }
예제 #20
0
        public async Task <ActionResult <Models.ReleaseModel> > CheckAppVersionUpdateAsync([Required] string product, [Required] string platform, [Required] string arch, [Required] string version)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var latest = await _updater.FindLatestVersionAsync(product, platform, arch);

            if (latest != null && _vComparer.Compare(version, latest.Version) < 0)
            {
                // convert to a Squirrel response
                var squirrel = latest.ToSquirrelWindows();
                return(Content(squirrel, "text/plain"));
            }

            return(NoContent());
        }
예제 #21
0
        /// <summary>
        /// -1 if the client needs to upgrade (supported caps are lower)
        /// 0 if the client and feed can work together.
        /// 1 if the feed requires an upgrade due to being incompatible with the newer client
        /// </summary>
        private static int CompareCapabilities(List <FeedCapability> supportedCaps, List <FeedCapability> requiredCaps)
        {
            foreach (var cap in requiredCaps)
            {
                var supportedCap = supportedCaps.FirstOrDefault(e => StringComparer.OrdinalIgnoreCase.Equals(e.Name, cap.Name));

                if (supportedCap == null)
                {
                    // The feed is newer
                    return(-1);
                }

                // Versions must be an exact match
                var result = VersionComparer.Compare(supportedCap.Version, cap.Version, VersionComparison.Version);

                if (result != 0)
                {
                    return(result);
                }
            }

            return(0);
        }
예제 #22
0
 private int CompareVersion(NuGetVersion v1, NuGetVersion v2)
 => VersionComparer.Compare(v1, v2, VersionComparison.Version);
예제 #23
0
        public void VersionComparerTest1()
        {
            Template parentTemplate = this.mockRepo.GenerateTemplate("3.2.1.4.3", this.documentType, "Parent Template", this.ig);

            Template aTemplate = this.mockRepo.GenerateTemplate("1.2.3.4", this.documentType, "Test Template", this.ig, description: "Test Description 1");

            aTemplate.IsOpen = false;
            this.mockRepo.GenerateConstraint(aTemplate, null, null, "id", "SHALL", "1..1", number: 1);
            this.mockRepo.GenerateConstraint(aTemplate, null, null, "effectiveTime", "SHALL", "1..1", number: 2);
            this.mockRepo.GenerateConstraint(aTemplate, null, null, "entryRelationship", "SHALL", "1..1", number: 3);

            Template bTemplate = this.mockRepo.GenerateTemplate("4.3.2.1", this.documentType, "New Test Template", this.ig, description: "Test Description 2", impliedTemplate: parentTemplate);

            bTemplate.IsOpen = true;
            this.mockRepo.GenerateConstraint(bTemplate, null, null, "id", "SHALL", "1..*", number: 1);
            this.mockRepo.GenerateConstraint(bTemplate, null, null, "entryRelationship", "SHALL", "1..1", number: 3);
            this.mockRepo.GenerateConstraint(bTemplate, null, null, "author", "SHALL", "1..1", number: 4);

            VersionComparer  comparer = VersionComparer.CreateComparer(mockRepo);
            ComparisonResult compared = comparer.Compare(aTemplate, bTemplate);

            // Test template changes
            Assert.AreEqual(5, compared.ChangedFields.Count, "Expected to find 5 template fields changed");

            var changedName = compared.ChangedFields.Single(y => y.Name == "Name");

            Assert.AreEqual(aTemplate.Name, changedName.Old);
            Assert.AreEqual(bTemplate.Name, changedName.New);

            var changedDescription = compared.ChangedFields.Single(y => y.Name == "Description");

            Assert.AreEqual(aTemplate.Description, changedDescription.Old);
            Assert.AreEqual(bTemplate.Description, changedDescription.New);

            var changedOid = compared.ChangedFields.Single(y => y.Name == "Oid");

            Assert.AreEqual(aTemplate.Oid, changedOid.Old);
            Assert.AreEqual(bTemplate.Oid, changedOid.New);

            var changedImpliedTemplate = compared.ChangedFields.Single(y => y.Name == "Implied Template");

            Assert.AreEqual("", changedImpliedTemplate.Old);
            Assert.AreEqual("Parent Template (3.2.1.4.3)", changedImpliedTemplate.New);

            var changedIsOpen = compared.ChangedFields.Single(y => y.Name == "Open/Closed");

            Assert.AreEqual("Closed", changedIsOpen.Old);
            Assert.AreEqual("Open", changedIsOpen.New);

            // Test constraint changes
            Assert.AreEqual(4, compared.ChangedConstraints.Count, "Expected to find 3 changed constraints");

            var removedConstraint = compared.ChangedConstraints.Single(y => y.Type == CompareStatuses.Removed);

            Assert.AreEqual("1-2", removedConstraint.Number);
            Assert.AreEqual(0, removedConstraint.ChangedFields.Count);
            Assert.IsFalse(string.IsNullOrEmpty(removedConstraint.OldNarrative));

            var addedConstraint = compared.ChangedConstraints.Single(y => y.Type == CompareStatuses.Added);

            Assert.AreEqual("1-4", addedConstraint.Number);
            Assert.AreEqual(0, addedConstraint.ChangedFields.Count);
            Assert.IsFalse(string.IsNullOrEmpty(addedConstraint.NewNarrative));

            var changedConstraint = compared.ChangedConstraints.Single(y => y.Type == CompareStatuses.Modified);

            Assert.AreEqual("1-1", changedConstraint.Number);
            Assert.IsFalse(string.IsNullOrEmpty(changedConstraint.NewNarrative));
            Assert.IsFalse(string.IsNullOrEmpty(changedConstraint.OldNarrative));
            Assert.AreNotEqual(changedConstraint.OldNarrative, changedConstraint.NewNarrative);
            Assert.AreEqual(1, changedConstraint.ChangedFields.Count);
            Assert.IsNotNull(changedConstraint.ChangedFields.SingleOrDefault(y => y.Name == "Cardinality"));

            var unchangedConstraint = compared.ChangedConstraints.Single(y => y.Type == CompareStatuses.Unchanged);

            Assert.AreEqual("1-3", unchangedConstraint.Number);
        }
예제 #24
0
        public void Compare_min()
        {
            //arrange
            string stEtalon = "15.2.9";

            string stMajorMin = "14.2.9";
            string stMajorMax = "16.2.9";

            string stMinorMin = "15.1.9";
            string stMinorMax = "16.1.9";

            string stBuildMin = "15.2.8";
            string stBuildMax = "15.2.10";

            VersionComparer comp = new VersionComparer();

            //act
            int majMinRes = comp.Compare(stEtalon, stMajorMin);
            int majMaxRes = comp.Compare(stEtalon, stMajorMax);

            int minMinRes = comp.Compare(stEtalon, stMinorMin);
            int mimMaxRes = comp.Compare(stEtalon, stMinorMax);

            int buildMinRes = comp.Compare(stEtalon, stBuildMin);
            int buildMaxRes = comp.Compare(stBuildMin, stBuildMax);

            //assert
            Assert.AreEqual(-1, majMinRes);
            Assert.AreEqual(1, majMaxRes);
            Assert.AreEqual(-1, minMinRes);
            Assert.AreEqual(1, mimMaxRes);
            Assert.AreEqual(-1, buildMinRes);
            Assert.AreEqual(1, buildMaxRes);
        }
        public void CompareBothNull()
        {
            VersionComparer comparer = new VersionComparer();

            Assert.Equal(0, comparer.Compare(null, null));
        }
예제 #26
0
        public void CompareBothNull()
        {
            VersionComparer comparer = new VersionComparer();

            Assert.Equal(0, comparer.Compare(null, null));
        }
예제 #27
0
 public int Compare(Version version, Version otherVersion) => VersionComparer.Compare(version, otherVersion);