Files snapshot from new-header
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
7e40e5 Tucker McKnight
7e40e5 Tucker McKnight
b1c071 Tucker McKnight
fb82fe Tucker McKnight
b1c071 Tucker McKnight
fb82fe Tucker McKnight
99f634 Tucker McKnight
b30bd9 Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
fb82fe Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
c69df8 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
c69df8 Tucker McKnight
c69df8 Tucker McKnight
22ad3b Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 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
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
b1c071 Tucker McKnight
import { type Repository } from "./dataTypes.ts"
type Commit = ReturnType<Repository['commits']['get']>
type FlatPatchRecord = {
commit: Commit,
repoName: string,
refName: string,
type: "branch" | "tag",
}
let cachedFlatPatches: Array<FlatPatchRecord> | null = null
let cachedRepoCommits: Array<{
repoName: string,
commit: Commit,
}> | null = null
const flatPatches = (repos: Array<Repository>)
: 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
}
const commitsInRepo = (repos: Array<Repository>) : Array<{repoName: string, commit: Commit}> => {
if (cachedRepoCommits !== null) { return cachedRepoCommits }
cachedRepoCommits = repos.flatMap((repo) => {
return Array.from(repo.commits.values()).map((commit) => {
return {
repoName: repo.name,
commit,
}
})
})
return cachedRepoCommits
}
export {
flatPatches,
commitsInRepo,
}