Files snapshot from file-caching
0
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
7e40e5 Tucker McKnight
7e40e5 Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
99f634 Tucker McKnight
b30bd9 Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
c69df8 Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
7e40e5 Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
22ad3b Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
import { type Repository } from "./dataTypes.ts"
type FlatPatchRecord = {
commit: ReturnType<Repository['commits']['get']>,
repoName: string,
refName: string,
type: "branch" | "tag",
}
let cachedFlatPatches: Array<FlatPatchRecord> | null = null
export default async (repos: Array<Repository>)
: Promise<Array<FlatPatchRecord>> => {
if (cachedFlatPatches !== null) { return cachedFlatPatches }
const itemsForRef: (
ref: Repository['tags'][0], refType: 'branch' | 'tag', repo: Repository
) => Array<FlatPatchRecord> = (ref, refType, repo) => {
const flatPatches: Array<FlatPatchRecord> = []
let currentCommit: ReturnType<Repository['commits']['get']> | undefined = repo.commits.get(ref.sha)
while (currentCommit !== undefined) {
flatPatches.push({
type: refType,
commit: currentCommit,
repoName: repo.name,
refName: ref.name
})
currentCommit = repo.commits.get(currentCommit.parent)
}
return flatPatches
}
cachedFlatPatches = repos.flatMap((repo) => {
const branches = repo.branches.flatMap(branch => itemsForRef(branch, 'branch', repo))
const tags = repo.tags.flatMap(tag => itemsForRef(tag, 'tag', repo))
return [...branches, ...tags]
})
return cachedFlatPatches
}