Преглед изворни кода

AMBARI-9174 Improve compare method of repository versions. (atkach)

Andrii Tkach пре 10 година
родитељ
комит
e465ddad25
2 измењених фајлова са 12 додато и 9 уклоњено
  1. 9 9
      ambari-web/app/utils/string_utils.js
  2. 3 0
      ambari-web/test/utils/string_utils_test.js

+ 9 - 9
ambari-web/app/utils/string_utils.js

@@ -82,35 +82,35 @@ module.exports = {
    * @param second {string}
    * @return {number}
    */
-  compareVersions: function(first, second){
+  compareVersions: function (first, second) {
     if (!(typeof first === 'string' && typeof second === 'string')) {
       return -1;
     }
     if (first === '' || second === '') {
       return -1;
     }
-    var firstNumbers = first.split('.');
-    var secondNumbers = second.split('.');
+    var firstNumbers = first.split(/[\.-]/);
+    var secondNumbers = second.split(/[\.-]/);
     var length = 0;
     var i = 0;
     var result = false;
-    if(firstNumbers.length === secondNumbers.length) {
+    if (firstNumbers.length === secondNumbers.length) {
       length = firstNumbers.length;
-    } else if(firstNumbers.length < secondNumbers.length){
+    } else if (firstNumbers.length < secondNumbers.length) {
       length = secondNumbers.length;
     } else {
       length = firstNumbers.length;
     }
 
-    while(i < length && !result){
+    while (i < length && !result) {
       firstNumbers[i] = (firstNumbers[i] === undefined) ? 0 : window.parseInt(firstNumbers[i]);
       secondNumbers[i] = (secondNumbers[i] === undefined) ? 0 : window.parseInt(secondNumbers[i]);
-      if(firstNumbers[i] > secondNumbers[i]){
+      if (firstNumbers[i] > secondNumbers[i]) {
         result = 1;
         break;
-      } else if(firstNumbers[i] === secondNumbers[i]){
+      } else if (firstNumbers[i] === secondNumbers[i]) {
         result = 0;
-      } else if(firstNumbers[i] < secondNumbers[i]){
+      } else if (firstNumbers[i] < secondNumbers[i]) {
         result = -1;
         break;
       }

+ 3 - 0
ambari-web/test/utils/string_utils_test.js

@@ -63,6 +63,9 @@ describe('string_utils', function () {
       {m: '1.2.1 higher than 1.2', v1:'1.2.1', v2:'1.2', e: 1},
       {m: '11.2 higher than 2.2', v1:'11.2', v2:'2.2', e: 1},
       {m: '0.9 higher than 0.8', v1:'0.9', v2:'0.8', e: 1},
+      {m: '1.1-2  equal to 1.1-2 ', v1:'1.1-2', v2:'1.1-2', e: 0},
+      {m: '1.1-2 higher than 1.1-1', v1:'1.1-2', v2:'1.1-1', e: 1},
+      {m: '1.1-4 lower than 1.1-46', v1:'1.1-4', v2:'1.1-46', e: -1},
       {m: 'return false if no string passed', v1: '0.9', e: -1}
     ];
     tests.forEach(function(test) {