dd_flutter_cli 0.3.0

A CLI tool for managing Dart and Flutter projects
use semver::Version;

/// 比较两个版本号
fn is_version_newer(current: &str, latest: &str) -> bool {
    // 处理特殊情况
    if current == "any" {
        return true;
    }

    // 清理版本号前缀
    let current_clean = current
        .trim_start_matches('^')
        .trim_start_matches('~')
        .trim_start_matches('>')
        .trim_start_matches('=')
        .trim_start_matches('<')
        .trim();
    let latest_clean = latest
        .trim_start_matches('^')
        .trim_start_matches('~')
        .trim_start_matches('>')
        .trim_start_matches('=')
        .trim_start_matches('<')
        .trim();

    // 尝试直接解析版本号
    if let (Ok(current_ver), Ok(latest_ver)) =
        (Version::parse(current_clean), Version::parse(latest_clean))
    {
        return latest_ver > current_ver;
    }

    // 如果直接解析失败,尝试标准化版本号格式
    let normalize_version = |v: &str| {
        let parts: Vec<&str> = v.split('.').collect();
        match parts.len() {
            1 => format!("{}.0.0", parts[0]),
            2 => format!("{}.{}.0", parts[0], parts[1]),
            _ => v.to_string(),
        }
    };

    let current_normalized = normalize_version(current_clean);
    let latest_normalized = normalize_version(latest_clean);

    if let (Ok(current_ver), Ok(latest_ver)) = (
        Version::parse(&current_normalized),
        Version::parse(&latest_normalized),
    ) {
        latest_ver > current_ver
    } else {
        // 如果解析失败,进行字符串比较作为后备方案
        latest_clean > current_clean
    }
}

fn main() {
    println!("Testing version comparison:");
    println!("^1.0.0 vs 1.0.8: {}", is_version_newer("^1.0.0", "1.0.8"));
    println!("1.0.0 vs 1.0.8: {}", is_version_newer("1.0.0", "1.0.8"));
    println!("^1.0.2 vs 1.0.8: {}", is_version_newer("^1.0.2", "1.0.8"));
}