Files snapshot from new-commit-view
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
7e40e5 Tucker McKnight
b8a3bb Tucker McKnight
cdb797 Tucker McKnight
d71658 Tucker McKnight
cdb797 Tucker McKnight
cdb797 Tucker McKnight
2a54fe Tucker McKnight
cdb797 Tucker McKnight
2a54fe Tucker McKnight
d71658 Tucker McKnight
cdb797 Tucker McKnight
b8a3bb Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
b8a3bb Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
829283 Tucker McKnight
d71658 Tucker McKnight
829283 Tucker McKnight
829283 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
829283 Tucker McKnight
d71658 Tucker McKnight
b8a3bb Tucker McKnight
b8a3bb Tucker McKnight
2a54fe Tucker McKnight
d71658 Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
b8a3bb Tucker McKnight
b8a3bb Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
d71658 Tucker McKnight
import { type Repository } from "./dataTypes.ts"
let cachedFlatFiles: Array<FlatFileEntry> | null = null
export type FlatFileEntry = {
file: string,
refName: string,
repoName: string,
type: 'branch' | 'tag',
isDirectory: boolean,
}
const dirsFromRefFileList: (
ref: Repository['tags'][0],
repoName: string,
refType: 'branch' | 'tag'
) => Array<FlatFileEntry> = (ref, repoName, refType) => {
const filesAndDirs = new Set<string>()
for (const file of ref.fileList) {
const fileParts = file.split('/')
// Iterate through fileParts except for the last part, which will be
// the file name. Since we just want dirs here, we can ignore that.
const filePartsWithoutEnd = fileParts.slice(0, fileParts.length - 1)
for (const [index, _val] of filePartsWithoutEnd.entries()) {
const path = fileParts.slice(0, filePartsWithoutEnd.length - index).join('/')
if (filesAndDirs.has(path)) {
break
} else {
filesAndDirs.add(path)
}
}
}
return Array.from(filesAndDirs).map((file) => {
return {
file,
refName: ref.name,
repoName: repoName,
type: refType,
isDirectory: true,
}
})
}
const filesFromRefFileList: (
ref: Repository['tags'][0],
repoName: string,
refType: 'branch' | 'tag'
) => Array<FlatFileEntry> = (ref, repoName, refType) => {
return Array.from(ref.fileList).map((file) => {
return {
file,
refName: ref.name,
repoName: repoName,
type: refType,
isDirectory: false,
}
})
}
const flatFiles = (repos: Array<Repository>) : Array<FlatFileEntry> => {
if (cachedFlatFiles !== null) { return cachedFlatFiles }
const branches: FlatFileEntry[] = repos.flatMap((repo) => {
return repo.branches.flatMap(branch => filesFromRefFileList(branch, repo.name, 'branch'))
})
const tags: FlatFileEntry[] = repos.flatMap((repo) => {
return repo.tags.flatMap(tag => filesFromRefFileList(tag, repo.name, 'tag'))
})
cachedFlatFiles = [...branches, ...tags]
return cachedFlatFiles
}
const flatDirectories = (repos: Array<Repository>) : Array<FlatFileEntry> => {
const branches: FlatFileEntry[] = repos.flatMap((repo) => {
return repo.branches.flatMap(branch => dirsFromRefFileList(branch, repo.name, 'branch'))
})
const tags: FlatFileEntry[] = repos.flatMap((repo) => {
return repo.tags.flatMap(tag => dirsFromRefFileList(tag, repo.name, 'tag'))
})
return [...branches, ...tags]
}
export {
flatFiles,
flatDirectories,
}