| 797 | } |
| 798 | |
| 799 | int cbm_compare_versions(const char *a, const char *b) { |
| 800 | int pa[SEMVER_PARTS]; |
| 801 | int pb[SEMVER_PARTS]; |
| 802 | parse_semver(a, pa); |
| 803 | parse_semver(b, pb); |
| 804 | |
| 805 | for (int i = 0; i < SEMVER_PARTS; i++) { |
| 806 | if (pa[i] != pb[i]) { |
| 807 | return pa[i] - pb[i]; |
| 808 | } |
| 809 | } |
| 810 | |
| 811 | /* Same base version — non-dev beats dev */ |
| 812 | bool a_pre = has_prerelease(a); |
| 813 | bool b_pre = has_prerelease(b); |
| 814 | if (a_pre && !b_pre) { |
| 815 | return CLI_ERR; |
| 816 | } |
| 817 | if (!a_pre && b_pre) { |
| 818 | return CLI_TRUE; |
| 819 | } |
| 820 | return 0; |
| 821 | } |
| 822 | |
| 823 | /* ── Shell RC detection ───────────────────────────────────────── */ |
| 824 |
no test coverage detected