@poe-platform/safe-bash 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +5 -2
  2. package/package.json +2 -2
  3. package/dist/safe-bash/commands/git/arguments.d.ts +0 -17
  4. package/dist/safe-bash/commands/git/arguments.d.ts.map +0 -1
  5. package/dist/safe-bash/commands/git/arguments.js +0 -150
  6. package/dist/safe-bash/commands/git/arguments.js.map +0 -1
  7. package/dist/safe-bash/commands/git/codec.d.ts +0 -8
  8. package/dist/safe-bash/commands/git/codec.d.ts.map +0 -1
  9. package/dist/safe-bash/commands/git/codec.js +0 -225
  10. package/dist/safe-bash/commands/git/codec.js.map +0 -1
  11. package/dist/safe-bash/commands/git/config.d.ts +0 -8
  12. package/dist/safe-bash/commands/git/config.d.ts.map +0 -1
  13. package/dist/safe-bash/commands/git/config.js +0 -100
  14. package/dist/safe-bash/commands/git/config.js.map +0 -1
  15. package/dist/safe-bash/commands/git/crc.d.ts +0 -3
  16. package/dist/safe-bash/commands/git/crc.d.ts.map +0 -1
  17. package/dist/safe-bash/commands/git/crc.js +0 -14
  18. package/dist/safe-bash/commands/git/crc.js.map +0 -1
  19. package/dist/safe-bash/commands/git/delta.d.ts +0 -4
  20. package/dist/safe-bash/commands/git/delta.d.ts.map +0 -1
  21. package/dist/safe-bash/commands/git/delta.js +0 -62
  22. package/dist/safe-bash/commands/git/delta.js.map +0 -1
  23. package/dist/safe-bash/commands/git/diff.d.ts +0 -9
  24. package/dist/safe-bash/commands/git/diff.d.ts.map +0 -1
  25. package/dist/safe-bash/commands/git/diff.js +0 -131
  26. package/dist/safe-bash/commands/git/diff.js.map +0 -1
  27. package/dist/safe-bash/commands/git/ignore.d.ts +0 -22
  28. package/dist/safe-bash/commands/git/ignore.d.ts.map +0 -1
  29. package/dist/safe-bash/commands/git/ignore.js +0 -153
  30. package/dist/safe-bash/commands/git/ignore.js.map +0 -1
  31. package/dist/safe-bash/commands/git/index.d.ts +0 -7
  32. package/dist/safe-bash/commands/git/index.d.ts.map +0 -1
  33. package/dist/safe-bash/commands/git/index.js +0 -66
  34. package/dist/safe-bash/commands/git/index.js.map +0 -1
  35. package/dist/safe-bash/commands/git/io.d.ts +0 -46
  36. package/dist/safe-bash/commands/git/io.d.ts.map +0 -1
  37. package/dist/safe-bash/commands/git/io.js +0 -388
  38. package/dist/safe-bash/commands/git/io.js.map +0 -1
  39. package/dist/safe-bash/commands/git/limits.d.ts +0 -39
  40. package/dist/safe-bash/commands/git/limits.d.ts.map +0 -1
  41. package/dist/safe-bash/commands/git/limits.js +0 -43
  42. package/dist/safe-bash/commands/git/limits.js.map +0 -1
  43. package/dist/safe-bash/commands/git/pack.d.ts +0 -14
  44. package/dist/safe-bash/commands/git/pack.d.ts.map +0 -1
  45. package/dist/safe-bash/commands/git/pack.js +0 -273
  46. package/dist/safe-bash/commands/git/pack.js.map +0 -1
  47. package/dist/safe-bash/commands/git/queries.d.ts +0 -6
  48. package/dist/safe-bash/commands/git/queries.d.ts.map +0 -1
  49. package/dist/safe-bash/commands/git/queries.js +0 -292
  50. package/dist/safe-bash/commands/git/queries.js.map +0 -1
  51. package/dist/safe-bash/commands/git/repository.d.ts +0 -49
  52. package/dist/safe-bash/commands/git/repository.d.ts.map +0 -1
  53. package/dist/safe-bash/commands/git/repository.js +0 -473
  54. package/dist/safe-bash/commands/git/repository.js.map +0 -1
@@ -1,49 +0,0 @@
1
- import { type Configuration } from "./config.js";
2
- import { type GitObject } from "./codec.js";
3
- import { type Session } from "./io.js";
4
- export interface Entry {
5
- readonly path: string;
6
- readonly mode: number;
7
- readonly oid: string;
8
- readonly stage: number;
9
- }
10
- export interface Commit {
11
- readonly tree: string;
12
- readonly parents: readonly string[];
13
- readonly message: Buffer;
14
- }
15
- export interface Working {
16
- readonly mode: number;
17
- readonly oid: string;
18
- readonly bytes: Buffer;
19
- }
20
- export declare function refName(name: string): void;
21
- export declare class Repository {
22
- readonly session: Session;
23
- readonly gitdir: string;
24
- readonly root: string | undefined;
25
- readonly cwd: string;
26
- private readonly refs;
27
- private readonly peeled;
28
- private readonly objects;
29
- private readonly commits;
30
- private indexData;
31
- private readonly names;
32
- private packs;
33
- config: Configuration;
34
- private constructor();
35
- static discover(session: Session, cwd: string): Promise<Repository>;
36
- private admit;
37
- private refFile;
38
- private resolveRef;
39
- object(oid: string): Promise<GitObject>;
40
- private headers;
41
- peel(oid: string, expected?: "commit" | "tree" | "blob"): Promise<string>;
42
- commit(oid: string): Promise<Commit>;
43
- revision(expression: string, unborn?: boolean): Promise<string | undefined>;
44
- tree(oid: string | undefined): Promise<Map<string, Entry>>;
45
- index(): Promise<Entry[]>;
46
- working(entry: Entry): Promise<Working | undefined>;
47
- abbreviation(oid: string): Promise<string>;
48
- }
49
- //# sourceMappingURL=repository.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/commands/git/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAA0C,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAI/E,MAAM,WAAW,KAAK;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACrH,MAAM,WAAW,MAAM;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAChH,MAAM,WAAW,OAAO;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAKhG,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAG1C;AAED,qBAAa,UAAU;IAUD,QAAQ,CAAC,OAAO,EAAE,OAAO;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM;IAT/H,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,KAAK,CAA4B;IACzC,MAAM,EAAG,aAAa,CAAC;IAEvB,OAAO;WAEM,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAyB3D,KAAK;YA6EL,OAAO;YAUP,UAAU;IAalB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;YAU/B,OAAO;IAsBf,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBzE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAepC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAoCzE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAkC1D,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAmDzB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IA6BnD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAQjD"}
@@ -1,473 +0,0 @@
1
- import { configuration, environment } from "./config.js";
2
- import { inflateObject } from "./codec.js";
3
- import { compare, component, objectPath, parent } from "./io.js";
4
- import { GIT_LIMITS, GitFailure, demand } from "./limits.js";
5
- import { PackCatalogue } from "./pack.js";
6
- const oidPattern = /^[0-9a-f]{40}$/;
7
- const modes = new Set([0o100644, 0o100755, 0o120000]);
8
- export function refName(name) {
9
- demand(name.startsWith("refs/") && !name.endsWith(".") && !name.includes("..") && !name.includes("@{") && !/[\x00-\x20\x7f~^:?*\[\\]/.test(name), "invalid Git ref name");
10
- for (const part of name.split("/")) {
11
- component(part);
12
- demand(!part.startsWith(".") && !part.endsWith(".lock"), "invalid Git ref component");
13
- }
14
- }
15
- export class Repository {
16
- session;
17
- gitdir;
18
- root;
19
- cwd;
20
- refs = new Map();
21
- peeled = new Map();
22
- objects = new Map();
23
- commits = new Map();
24
- indexData;
25
- names = [];
26
- packs;
27
- config;
28
- constructor(session, gitdir, root, cwd) {
29
- this.session = session;
30
- this.gitdir = gitdir;
31
- this.root = root;
32
- this.cwd = cwd;
33
- }
34
- static async discover(session, cwd) {
35
- environment(session.context.env);
36
- let cursor = session.path("/", cwd);
37
- for (let depth = 0; depth <= GIT_LIMITS.maxDepth; depth++) {
38
- await session.safe(cursor);
39
- demand((await session.stat(cursor))?.type === "directory", "Git cwd is not a directory");
40
- const marker = session.path(cursor, ".git");
41
- const git = await session.stat(marker);
42
- if (git) {
43
- demand(git.type === "directory", "M1A gitfile/symlink routing unsupported");
44
- const repository = new Repository(session, marker, cursor, cwd);
45
- await repository.admit();
46
- return repository;
47
- }
48
- if (await session.stat(session.path(cursor, "HEAD")) && await session.stat(session.path(cursor, "objects"))) {
49
- const repository = new Repository(session, cursor, undefined, cwd);
50
- await repository.admit();
51
- return repository;
52
- }
53
- if (cursor === session.boundary || cursor === "/")
54
- break;
55
- cursor = parent(cursor);
56
- }
57
- throw new GitFailure("not a supported Git repository");
58
- }
59
- async admit() {
60
- const session = this.session;
61
- await session.safe(this.gitdir);
62
- demand((await session.stat(session.path(this.gitdir, "HEAD")))?.type === "file", "missing/invalid Git HEAD");
63
- for (const name of ["commondir", "gitdir", "config.worktree", "worktrees", "shallow", "info/grafts", "objects/info/alternates", "objects/info/http-alternates", "refs/replace", "reftable"]) {
64
- demand(!(await session.stat(session.path(this.gitdir, name))), `M1A unsupported storage: ${name}`);
65
- }
66
- this.config = await configuration(session, this.gitdir, this.root === undefined);
67
- const objects = session.path(this.gitdir, "objects");
68
- for (const entry of await session.list(objects)) {
69
- const directory = session.path(objects, entry.name);
70
- demand(entry.type === "directory", "M1A unsupported object storage");
71
- if (entry.name === "pack" || entry.name === "info") {
72
- continue;
73
- }
74
- const children = await session.list(directory);
75
- demand(/^[0-9a-f]{2}$/.test(entry.name), "M1A unsupported object directory");
76
- for (const child of children) {
77
- demand(child.type === "file" && /^[0-9a-f]{38}$/.test(child.name), "M1A pack/idx/promisor or invalid loose object member");
78
- session.charge("maxObjects", 1);
79
- session.reserve(80);
80
- this.names.push(entry.name + child.name);
81
- }
82
- }
83
- this.packs = new PackCatalogue(session);
84
- await this.packs.admit(this.gitdir);
85
- session.reserve(this.names.length * 16);
86
- const names = new Set(this.names);
87
- for (const oid of this.packs.objects.keys()) {
88
- await session.step();
89
- if (names.has(oid))
90
- continue;
91
- session.charge("maxObjects", 1);
92
- session.reserve(80);
93
- names.add(oid);
94
- this.names.push(oid);
95
- }
96
- const packed = await session.read(session.path(this.gitdir, "packed-refs"), GIT_LIMITS.maxMetadataBytes, true, true);
97
- if (packed) {
98
- try {
99
- let preceding;
100
- for (const line of session.text(packed).split("\n")) {
101
- await session.step(line.length + 1);
102
- if (!line || line.startsWith("#"))
103
- continue;
104
- if (line.startsWith("^")) {
105
- demand(preceding && !this.peeled.has(preceding) && oidPattern.test(line.slice(1)), "invalid peeled packed ref");
106
- this.peeled.set(preceding, line.slice(1));
107
- continue;
108
- }
109
- demand(line.length > 41 && line[40] === " " && oidPattern.test(line.slice(0, 40)), "invalid packed ref");
110
- const name = line.slice(41);
111
- refName(name);
112
- demand(!name.startsWith("refs/replace/") && !this.refs.has(name), "unsupported/duplicate packed ref");
113
- session.charge("maxEntries", 1);
114
- this.refs.set(name, line.slice(0, 40));
115
- preceding = name;
116
- }
117
- }
118
- finally {
119
- session.release(packed);
120
- }
121
- }
122
- const walkRefs = async (prefix, depth) => {
123
- demand(depth <= GIT_LIMITS.maxDepth, "Git ref depth exceeded");
124
- const path = session.path(this.gitdir, prefix);
125
- const stat = await session.stat(path);
126
- if (!stat)
127
- return;
128
- if (stat.type === "directory") {
129
- for (const entry of await session.list(path))
130
- await walkRefs(`${prefix}/${entry.name}`, depth + 1);
131
- }
132
- else {
133
- demand(stat.type === "file", "Git ref symlink refused");
134
- refName(prefix);
135
- demand(!prefix.startsWith("refs/replace/"), "replace refs unsupported");
136
- this.refs.set(prefix, await this.refFile(path));
137
- }
138
- };
139
- await walkRefs("refs", 0);
140
- this.refs.set("HEAD", await this.refFile(session.path(this.gitdir, "HEAD")));
141
- for (const name of this.refs.keys())
142
- await this.resolveRef(name, name === "HEAD");
143
- }
144
- async refFile(path) {
145
- const bytes = (await this.session.read(path, GIT_LIMITS.maxMetadataBytes, false, true));
146
- try {
147
- const value = this.session.text(bytes).trim();
148
- if (value.startsWith("ref: "))
149
- refName(value.slice(5));
150
- else
151
- demand(oidPattern.test(value), "invalid loose Git ref");
152
- return value;
153
- }
154
- finally {
155
- this.session.release(bytes);
156
- }
157
- }
158
- async resolveRef(name, unborn = false) {
159
- const visited = new Set();
160
- for (let depth = 0; depth < GIT_LIMITS.maxRefDepth; depth++) {
161
- await this.session.step();
162
- demand(!visited.has(name), "cyclic Git symbolic ref");
163
- visited.add(name);
164
- const value = this.refs.get(name);
165
- if (!value) {
166
- demand(unborn && name.startsWith("refs/heads/"), "missing Git ref");
167
- return undefined;
168
- }
169
- if (value.startsWith("ref: ")) {
170
- name = value.slice(5);
171
- continue;
172
- }
173
- return value;
174
- }
175
- throw new GitFailure("Git ref chain limit exceeded");
176
- }
177
- async object(oid) {
178
- demand(oidPattern.test(oid), "invalid Git object ID");
179
- const cached = this.objects.get(oid) ?? this.packs?.objects.get(oid);
180
- if (cached) {
181
- await this.session.step();
182
- return cached;
183
- }
184
- const path = this.session.path(this.gitdir, `objects/${oid.slice(0, 2)}/${oid.slice(2)}`);
185
- const compressed = (await this.session.read(path, GIT_LIMITS.maxReadBytes));
186
- try {
187
- const object = await inflateObject(this.session, compressed, oid);
188
- this.objects.set(oid, object);
189
- return object;
190
- }
191
- finally {
192
- this.session.release(compressed);
193
- }
194
- }
195
- async headers(oid, type) {
196
- const object = await this.object(oid);
197
- demand(object.type === type, `Git object is not ${type}`);
198
- const separator = object.bytes.indexOf("\n\n");
199
- demand(separator >= 0 && separator <= GIT_LIMITS.maxMetadataBytes, "invalid Git object headers");
200
- const text = this.session.text(object.bytes.subarray(0, separator));
201
- demand(!text.includes("\0"), "invalid Git object headers");
202
- const values = new Map();
203
- for (const line of text.split("\n")) {
204
- await this.session.step(line.length + 1);
205
- const split = line.indexOf(" ");
206
- demand(split > 0, "invalid/continued Git header");
207
- const key = line.slice(0, split), value = line.slice(split + 1);
208
- const allowed = type === "commit" ? ["tree", "parent", "author", "committer"] : ["object", "type", "tag", "tagger"];
209
- demand(allowed.includes(key), `unsupported Git header: ${key}`);
210
- const previous = values.get(key) ?? [];
211
- demand(key === "parent" || previous.length === 0, "duplicate Git object header");
212
- previous.push(value);
213
- values.set(key, previous);
214
- }
215
- return { values, message: object.bytes.subarray(separator + 2) };
216
- }
217
- async peel(oid, expected) {
218
- const seen = new Set();
219
- for (let depth = 0; depth < GIT_LIMITS.maxRefDepth; depth++) {
220
- await this.session.step();
221
- demand(!seen.has(oid), "cyclic Git tag");
222
- seen.add(oid);
223
- const object = await this.object(oid);
224
- if (object.type !== "tag") {
225
- demand(!expected || object.type === expected, `Git object type must be ${expected}`);
226
- return oid;
227
- }
228
- const { values } = await this.headers(oid, "tag");
229
- const target = values.get("object")?.[0], type = values.get("type")?.[0], tag = values.get("tag")?.[0];
230
- demand(target && oidPattern.test(target) && type && ["blob", "tree", "commit", "tag"].includes(type) && tag && !/[\x00-\x20\x7f]/.test(tag), "invalid annotated Git tag");
231
- if (values.has("tagger"))
232
- identity(values.get("tagger")[0]);
233
- demand((await this.object(target)).type === type, "Git tag target type mismatch");
234
- oid = target;
235
- }
236
- throw new GitFailure("Git tag depth exceeded");
237
- }
238
- async commit(oid) {
239
- oid = await this.peel(oid, "commit");
240
- const cached = this.commits.get(oid);
241
- if (cached)
242
- return cached;
243
- this.session.charge("maxCommits", 1);
244
- const { values, message } = await this.headers(oid, "commit");
245
- const tree = values.get("tree")?.[0], author = values.get("author")?.[0], committer = values.get("committer")?.[0];
246
- demand(tree && oidPattern.test(tree) && author && committer, "missing Git commit headers");
247
- identity(author);
248
- identity(committer);
249
- const parents = values.get("parent") ?? [];
250
- demand(parents.every(parent => oidPattern.test(parent)), "invalid Git parent ID");
251
- demand((await this.object(tree)).type === "tree", "commit tree type mismatch");
252
- const result = { tree, parents, message };
253
- this.commits.set(oid, result);
254
- return result;
255
- }
256
- async revision(expression, unborn = false) {
257
- const split = expression.search(/[~^]/);
258
- const name = split < 0 ? expression : expression.slice(0, split);
259
- demand(name.length > 0 && !name.includes("@{") && !name.includes(":"), "unsupported Git revision");
260
- let oid;
261
- if (oidPattern.test(name))
262
- oid = name;
263
- else if (name === "HEAD" || name.startsWith("refs/")) {
264
- if (name !== "HEAD")
265
- refName(name);
266
- oid = await this.resolveRef(name, unborn && name === "HEAD");
267
- }
268
- else {
269
- const choices = [`refs/heads/${name}`, `refs/tags/${name}`].filter(ref => this.refs.has(ref));
270
- demand(choices.length === 1, "unknown/ambiguous Git revision");
271
- oid = await this.resolveRef(choices[0]);
272
- }
273
- if (!oid) {
274
- demand(split < 0, "unborn HEAD has no ancestry");
275
- return undefined;
276
- }
277
- await this.object(oid);
278
- let offset = split < 0 ? expression.length : split;
279
- while (offset < expression.length) {
280
- const operator = expression[offset++];
281
- demand(operator === "^" || operator === "~", "unsupported Git revision suffix");
282
- const start = offset;
283
- while (offset < expression.length && expression.charCodeAt(offset) >= 48 && expression.charCodeAt(offset) <= 57)
284
- offset++;
285
- const text = expression.slice(start, offset);
286
- demand(text.length <= 4, "Git ancestry count exceeded");
287
- const count = text ? Number(text) : 1;
288
- demand(count <= GIT_LIMITS.maxCommits, "Git ancestry count exceeded");
289
- oid = await this.peel(oid, "commit");
290
- if (operator === "^") {
291
- const commit = await this.commit(oid);
292
- if (count) {
293
- demand(commit.parents[count - 1], "missing Git parent");
294
- oid = commit.parents[count - 1];
295
- await this.peel(oid, "commit");
296
- }
297
- }
298
- else
299
- for (let turn = 0; turn < count; turn++) {
300
- const commit = await this.commit(oid);
301
- demand(commit.parents[0], "missing Git first parent");
302
- oid = commit.parents[0];
303
- }
304
- }
305
- await this.object(oid);
306
- return oid;
307
- }
308
- async tree(oid) {
309
- const result = new Map();
310
- if (!oid)
311
- return result;
312
- oid = await this.peel(oid);
313
- if ((await this.object(oid)).type === "commit")
314
- oid = (await this.commit(oid)).tree;
315
- const visit = async (treeId, prefix, depth, ancestors) => {
316
- demand(depth <= GIT_LIMITS.maxDepth && !ancestors.has(treeId), "Git tree cycle/depth exceeded");
317
- const object = await this.object(treeId);
318
- demand(object.type === "tree", "Git tree type mismatch");
319
- const next = new Set(ancestors);
320
- next.add(treeId);
321
- let offset = 0, previous;
322
- const siblings = new Set();
323
- while (offset < object.bytes.length) {
324
- const space = object.bytes.indexOf(32, offset), zero = object.bytes.indexOf(0, space + 1);
325
- demand(space > offset && space - offset <= 6 && zero > space && zero + 21 <= object.bytes.length, "truncated Git tree record");
326
- const rawMode = object.bytes.subarray(offset, space).toString("ascii");
327
- demand(["40000", "100644", "100755", "120000"].includes(rawMode), "unsupported Git tree mode/submodule");
328
- const mode = Number.parseInt(rawMode, 8), name = this.session.text(object.bytes.subarray(space + 1, zero));
329
- component(name);
330
- objectPath(name);
331
- demand(!siblings.has(name), "duplicate Git tree name");
332
- siblings.add(name);
333
- const ordering = Buffer.from(name + (mode === 0o40000 ? "/" : "\0"));
334
- demand(!previous || Buffer.compare(previous, ordering) < 0, "unsorted Git tree");
335
- previous = ordering;
336
- const childId = object.bytes.subarray(zero + 1, zero + 21).toString("hex");
337
- const path = prefix + name;
338
- this.session.charge("maxEntries", 1);
339
- this.session.reserve(80 + Buffer.byteLength(path) * 2);
340
- await this.session.step(zero + 21 - offset);
341
- offset = zero + 21;
342
- demand((await this.object(childId)).type === (mode === 0o40000 ? "tree" : "blob"), "Git tree entry target type mismatch");
343
- if (mode === 0o40000)
344
- await visit(childId, path + "/", depth + 1, next);
345
- else
346
- result.set(path, { path, mode, oid: childId, stage: 0 });
347
- }
348
- };
349
- await visit(oid, "", 0, new Set());
350
- return result;
351
- }
352
- async index() {
353
- demand(this.root, "Git index/worktree unavailable in bare repository");
354
- if (this.indexData)
355
- return this.indexData;
356
- const bytes = await this.session.read(this.session.path(this.gitdir, "index"), GIT_LIMITS.maxIndexBytes, true, true);
357
- if (!bytes)
358
- return this.indexData = [];
359
- try {
360
- demand(bytes.length >= 32 && bytes.subarray(0, 4).toString() === "DIRC", "invalid Git index header");
361
- const version = bytes.readUInt32BE(4), count = bytes.readUInt32BE(8), end = bytes.length - 20;
362
- demand(version === 2 || version === 3, "unsupported Git index version");
363
- demand(await this.session.hash(bytes.subarray(0, end)) === bytes.subarray(end).toString("hex"), "Git index checksum mismatch");
364
- demand(count <= Math.floor((end - 12) / 64), "invalid Git index count");
365
- this.session.charge("maxEntries", count);
366
- this.session.reserve(count * 80);
367
- const entries = [];
368
- let offset = 12;
369
- let previous;
370
- for (let index = 0; index < count; index++) {
371
- const start = offset;
372
- demand(offset + 62 <= end, "truncated Git index entry");
373
- const mode = bytes.readUInt32BE(offset + 24), oid = bytes.subarray(offset + 40, offset + 60).toString("hex"), flags = bytes.readUInt16BE(offset + 60);
374
- demand(modes.has(mode), "unsupported Git index mode/submodule");
375
- demand(!(flags & 0x8000), "assume-valid index entries unsupported");
376
- offset += 62;
377
- if (flags & 0x4000) {
378
- demand(version === 3 && offset + 2 <= end && bytes.readUInt16BE(offset) === 0, "unsupported Git extended index flags");
379
- offset += 2;
380
- }
381
- const zero = bytes.indexOf(0, offset);
382
- demand(zero >= offset && zero < end && zero - offset <= GIT_LIMITS.maxPathBytes, "invalid Git index path");
383
- const encodedLength = flags & 0xfff;
384
- demand(encodedLength === Math.min(zero - offset, 0xfff), "Git index path length mismatch");
385
- const path = this.session.text(bytes.subarray(offset, zero));
386
- objectPath(path);
387
- const stage = (flags >>> 12) & 3;
388
- const entry = { path, mode, oid, stage };
389
- if (previous)
390
- demand(compare(previous.path, path) < 0 || previous.path === path && previous.stage > 0 && stage > previous.stage, "unsorted/duplicate/mixed-stage Git index");
391
- entries.push(entry);
392
- previous = entry;
393
- offset = start + Math.ceil((zero - start + 1) / 8) * 8;
394
- demand(offset <= end && bytes.subarray(zero, offset).every(byte => byte === 0), "invalid Git index padding");
395
- await this.session.step(offset - start);
396
- }
397
- while (offset < end) {
398
- demand(offset + 8 <= end, "truncated Git index extension");
399
- const signature = bytes.subarray(offset, offset + 4).toString("ascii"), size = bytes.readUInt32BE(offset + 4);
400
- demand(/^[A-Z][A-Za-z0-9]{3}$/.test(signature), "unsupported mandatory Git index extension");
401
- demand(size <= end - offset - 8, "truncated Git index extension body");
402
- offset += 8 + size;
403
- await this.session.step(size + 8);
404
- }
405
- const paths = new Set(entries.map(entry => entry.path));
406
- for (const path of paths) {
407
- let directory = parent(path);
408
- while (directory !== "." && directory !== "/") {
409
- demand(!paths.has(directory), "Git index file/directory collision");
410
- directory = parent(directory);
411
- }
412
- }
413
- return this.indexData = entries;
414
- }
415
- finally {
416
- this.session.release(bytes);
417
- }
418
- }
419
- async working(entry) {
420
- demand(this.root, "bare Git repository has no working files");
421
- const path = this.session.path(this.root, entry.path);
422
- let ancestor = this.root;
423
- for (const name of entry.path.split("/").slice(0, -1)) {
424
- ancestor = this.session.path(ancestor, name);
425
- const stat = await this.session.stat(ancestor);
426
- if (!stat || stat.type === "file")
427
- return undefined;
428
- demand(stat.type === "directory", "Git working path ancestor symlink refused");
429
- }
430
- await this.session.safe(path, true);
431
- const stat = await this.session.stat(path);
432
- if (!stat || stat.type === "directory")
433
- return undefined;
434
- this.session.charge("maxEntries", 1);
435
- let bytes, mode;
436
- if (stat.type === "symlink") {
437
- demand(this.session.context.fs.readlink, "Git symlink text unavailable");
438
- const text = await this.session.call(() => this.session.context.fs.readlink(path, { signal: this.session.operation.signal }));
439
- demand(Buffer.from(text).toString("utf8") === text && Buffer.byteLength(text) <= GIT_LIMITS.maxWorkingFileBytes, "invalid Git symlink text");
440
- this.session.charge("maxReadBytes", Buffer.byteLength(text));
441
- bytes = this.session.copy(Buffer.from(text));
442
- mode = 0o120000;
443
- }
444
- else {
445
- demand(!this.config.fileMode || this.session.context.fs.capabilities.permissions === true, "Git executable-mode metadata unavailable; core.fileMode=false required");
446
- bytes = (await this.session.read(path, GIT_LIMITS.maxWorkingFileBytes));
447
- mode = this.config.fileMode ? stat.mode & 0o111 ? 0o100755 : 0o100644 : entry.mode === 0o120000 ? 0o100644 : entry.mode;
448
- }
449
- return { bytes, mode, oid: await this.session.hash(bytes, "blob") };
450
- }
451
- async abbreviation(oid) {
452
- for (let length = 7; length <= 40; length++) {
453
- const prefix = oid.slice(0, length);
454
- let matches = 0;
455
- for (const name of this.names) {
456
- await this.session.step();
457
- if (name !== oid && name.startsWith(prefix))
458
- matches++;
459
- }
460
- if (matches === 0)
461
- return prefix;
462
- }
463
- throw new GitFailure("Git abbreviation census conflict");
464
- }
465
- }
466
- function identity(value) {
467
- const split = value.lastIndexOf("> "), bracket = value.lastIndexOf(" <", split);
468
- demand(bracket > 0 && split > bracket && !/[\x00-\x1f\x7f]/.test(value), "invalid Git identity");
469
- const parts = value.slice(split + 2).split(" ");
470
- demand(parts.length === 2 && /^-?(0|[1-9][0-9]{0,15})$/.test(parts[0]) && Number.isSafeInteger(Number(parts[0])), "invalid Git timestamp");
471
- demand(/^[+-][0-9]{4}$/.test(parts[1]) && Number(parts[1].slice(1, 3)) <= 23 && Number(parts[1].slice(3)) <= 59, "invalid Git timezone");
472
- }
473
- //# sourceMappingURL=repository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/commands/git/repository.ts"],"names":[],"mappings":"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"}