Changeset 1476

Show
Ignore:
Timestamp:
06/29/08 11:32:57 (6 months ago)
Author:
klattimer
Message:

added compare versions method

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • wine-doors/branches/0.2/src/utils.py

    r1475 r1476  
    1515    Compare two version strings for <major>.<minor>-<release> 
    1616    Minor can include multiple decimals. 
     17    Returns either -1, B is larger than A, 0 versions are the same 
     18    or 1 where A is larger than B 
    1719    """ 
    18     pass 
     20    if ver_a == ver_b: 
     21        return 0 
     22 
     23    (a_major, a_minor, a_release) = SplitVersionString(ver_a) 
     24    (b_major, b_minor, b_release) = SplitVersionString(ver_b) 
     25 
     26    if a_major > b_major: 
     27        return 1 
     28    elif b_major > a_major: 
     29        return -1 
     30 
     31    if a_minor != b_minor: 
     32        re_largest_val = re.compile('(.*?)\.(.*)') 
     33        str_a = a_minor 
     34        str_b = b_minor         
     35        while 1: 
     36            if str_a.find(".") >= 0: 
     37                m = re_largest_val.match(str_a) 
     38                val_a = m.group(1) 
     39                str_a = m.group(2) 
     40            else: 
     41                val_a = str_a 
     42 
     43            if str_b.find(".") >= 0: 
     44                m = re_largest_val.match(str_b) 
     45                val_b = m.group(1) 
     46                str_b = m.group(2) 
     47            else: 
     48                val_b = str_b 
     49 
     50            if val_a > val_b: 
     51                return 1 
     52            elif val_b > val_a: 
     53                return -1 
     54 
     55            if str_a.find(".") < 0 and  str_b.find("."): 
     56                break 
     57 
     58    if a_release > b_release: 
     59        return 1 
     60    elif b_release > a_release: 
     61        return -1 
     62 
     63    # We should have returned by now, if we haven't we'll return something unexpected 
     64    return None 
    1965 
    2066def SplitPackageString ( package_string ):