| 826 | } |
| 827 | |
| 828 | int cbm_compare_versions(const char *a, const char *b) { |
| 829 | int pa[SEMVER_PARTS]; |
| 830 | int pb[SEMVER_PARTS]; |
| 831 | parse_semver(a, pa); |
| 832 | parse_semver(b, pb); |
| 833 | |
| 834 | for (int i = 0; i < SEMVER_PARTS; i++) { |
| 835 | if (pa[i] != pb[i]) { |
| 836 | return pa[i] - pb[i]; |
| 837 | } |
| 838 | } |
| 839 | |
| 840 | /* Same base version — non-dev beats dev */ |
| 841 | bool a_pre = has_prerelease(a); |
| 842 | bool b_pre = has_prerelease(b); |
| 843 | if (a_pre && !b_pre) { |
| 844 | return CLI_ERR; |
| 845 | } |
| 846 | if (!a_pre && b_pre) { |
| 847 | return CLI_TRUE; |
| 848 | } |
| 849 | return 0; |
| 850 | } |
| 851 | |
| 852 | /* ── Shell RC detection ───────────────────────────────────────── */ |
| 853 |
no test coverage detected