-
Notifications
You must be signed in to change notification settings - Fork 22
/
rev.ts
27 lines (23 loc) · 824 Bytes
/
rev.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import * as semver from "https://deno.land/x/semver@v1.4.0/mod.ts";
export function isSemver(rev: string): boolean {
return semver.clean(rev) != null;
}
export function compareRev(a: string, b: string): -1 | 0 | 1 {
const aa = semver.clean(a);
const bb = semver.clean(b);
if (aa != null && bb == null) return -1;
if (aa == null && bb != null) return 1;
if (aa != null && bb != null) {
if (semver.lt(aa, bb)) return -1;
if (semver.gt(aa, bb)) return 1;
}
return a == b ? 0 : a < b ? -1 : 1;
}
export type RevType = "commit" | "release" | "branch";
export function getRevType(rev: string): RevType {
return isSha1(rev) ? "commit" : isSemver(rev) ? "release" : "branch";
}
export function isSha1(text: string): boolean {
if (text.length !== 40) return false;
return !/[^0-9a-f]/.test(text);
}