@poe-platform/safe-bash 0.1.0 → 0.1.1
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.
- package/README.md +5 -2
- package/package.json +2 -2
- package/dist/safe-bash/commands/git/arguments.d.ts +0 -17
- package/dist/safe-bash/commands/git/arguments.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/arguments.js +0 -150
- package/dist/safe-bash/commands/git/arguments.js.map +0 -1
- package/dist/safe-bash/commands/git/codec.d.ts +0 -8
- package/dist/safe-bash/commands/git/codec.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/codec.js +0 -225
- package/dist/safe-bash/commands/git/codec.js.map +0 -1
- package/dist/safe-bash/commands/git/config.d.ts +0 -8
- package/dist/safe-bash/commands/git/config.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/config.js +0 -100
- package/dist/safe-bash/commands/git/config.js.map +0 -1
- package/dist/safe-bash/commands/git/crc.d.ts +0 -3
- package/dist/safe-bash/commands/git/crc.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/crc.js +0 -14
- package/dist/safe-bash/commands/git/crc.js.map +0 -1
- package/dist/safe-bash/commands/git/delta.d.ts +0 -4
- package/dist/safe-bash/commands/git/delta.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/delta.js +0 -62
- package/dist/safe-bash/commands/git/delta.js.map +0 -1
- package/dist/safe-bash/commands/git/diff.d.ts +0 -9
- package/dist/safe-bash/commands/git/diff.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/diff.js +0 -131
- package/dist/safe-bash/commands/git/diff.js.map +0 -1
- package/dist/safe-bash/commands/git/ignore.d.ts +0 -22
- package/dist/safe-bash/commands/git/ignore.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/ignore.js +0 -153
- package/dist/safe-bash/commands/git/ignore.js.map +0 -1
- package/dist/safe-bash/commands/git/index.d.ts +0 -7
- package/dist/safe-bash/commands/git/index.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/index.js +0 -66
- package/dist/safe-bash/commands/git/index.js.map +0 -1
- package/dist/safe-bash/commands/git/io.d.ts +0 -46
- package/dist/safe-bash/commands/git/io.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/io.js +0 -388
- package/dist/safe-bash/commands/git/io.js.map +0 -1
- package/dist/safe-bash/commands/git/limits.d.ts +0 -39
- package/dist/safe-bash/commands/git/limits.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/limits.js +0 -43
- package/dist/safe-bash/commands/git/limits.js.map +0 -1
- package/dist/safe-bash/commands/git/pack.d.ts +0 -14
- package/dist/safe-bash/commands/git/pack.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/pack.js +0 -273
- package/dist/safe-bash/commands/git/pack.js.map +0 -1
- package/dist/safe-bash/commands/git/queries.d.ts +0 -6
- package/dist/safe-bash/commands/git/queries.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/queries.js +0 -292
- package/dist/safe-bash/commands/git/queries.js.map +0 -1
- package/dist/safe-bash/commands/git/repository.d.ts +0 -49
- package/dist/safe-bash/commands/git/repository.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/repository.js +0 -473
- package/dist/safe-bash/commands/git/repository.js.map +0 -1
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import { inflatePackedFrame } from "./codec.js";
|
|
2
|
-
import { crc32 } from "./crc.js";
|
|
3
|
-
import { applyDelta } from "./delta.js";
|
|
4
|
-
import { GIT_LIMITS, demand } from "./limits.js";
|
|
5
|
-
const packName = /^pack-([0-9a-f]{40})\.(pack|idx|rev|bitmap|keep|mtimes)$/;
|
|
6
|
-
export class PackCatalogue {
|
|
7
|
-
session;
|
|
8
|
-
objects = new Map();
|
|
9
|
-
owners = new Set();
|
|
10
|
-
constructor(session) {
|
|
11
|
-
this.session = session;
|
|
12
|
-
session.onFinish(() => this.close());
|
|
13
|
-
}
|
|
14
|
-
close() {
|
|
15
|
-
for (const body of this.owners)
|
|
16
|
-
this.session.release(body);
|
|
17
|
-
this.owners.clear();
|
|
18
|
-
this.objects.clear();
|
|
19
|
-
}
|
|
20
|
-
async retain(oid, object) {
|
|
21
|
-
const prior = this.objects.get(oid);
|
|
22
|
-
if (!prior) {
|
|
23
|
-
this.owners.add(object.bytes);
|
|
24
|
-
this.objects.set(oid, object);
|
|
25
|
-
return object;
|
|
26
|
-
}
|
|
27
|
-
let same = prior.type === object.type && prior.bytes.length === object.bytes.length;
|
|
28
|
-
for (let offset = 0; same && offset < object.bytes.length; offset += 4096) {
|
|
29
|
-
const end = Math.min(object.bytes.length, offset + 4096);
|
|
30
|
-
await this.session.step(end - offset);
|
|
31
|
-
same = prior.bytes.subarray(offset, end).equals(object.bytes.subarray(offset, end));
|
|
32
|
-
}
|
|
33
|
-
demand(same, "conflicting Git packed duplicate object");
|
|
34
|
-
this.session.release(object.bytes);
|
|
35
|
-
return prior;
|
|
36
|
-
}
|
|
37
|
-
async admit(gitdir) {
|
|
38
|
-
const session = this.session;
|
|
39
|
-
const census = async () => {
|
|
40
|
-
const pairs = new Map();
|
|
41
|
-
const observations = [];
|
|
42
|
-
for (const part of ["pack", "info"]) {
|
|
43
|
-
const directory = session.path(gitdir, `objects/${part}`);
|
|
44
|
-
const parent = await session.stat(directory);
|
|
45
|
-
if (!parent) {
|
|
46
|
-
observations.push(`${part}:absent`);
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
demand(parent.type === "directory", "Git packed metadata directory required");
|
|
50
|
-
observations.push(`${part}:directory`);
|
|
51
|
-
for (const entry of await session.list(directory)) {
|
|
52
|
-
const path = session.path(directory, entry.name);
|
|
53
|
-
const stat = await session.stat(path);
|
|
54
|
-
demand(entry.type === "file" && stat?.type === "file", "Git packed sidecar/link/type refused");
|
|
55
|
-
demand(Number.isSafeInteger(stat.size) && stat.size >= 0, "invalid Git packed metadata size");
|
|
56
|
-
const matched = part === "pack" ? packName.exec(entry.name) : null;
|
|
57
|
-
if (matched) {
|
|
58
|
-
const name = matched[1], kind = matched[2];
|
|
59
|
-
if (!pairs.has(name)) {
|
|
60
|
-
session.reserve(256);
|
|
61
|
-
pairs.set(name, new Set());
|
|
62
|
-
}
|
|
63
|
-
pairs.get(name).add(kind);
|
|
64
|
-
demand(stat.size <= (kind === "pack" ? GIT_LIMITS.maxPackBytes : GIT_LIMITS.maxIndexBytes), "Git pack/idx/sidecar size exceeded");
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
demand(part === "pack" ? entry.name === "multi-pack-index" : entry.name === "packs" || entry.name === "commit-graph", "unsupported Git unknown/promisor packed storage");
|
|
68
|
-
demand(stat.size <= GIT_LIMITS.maxIndexBytes, "Git inert sidecar size exceeded");
|
|
69
|
-
}
|
|
70
|
-
const observation = `${part}/${entry.name}:${stat.type}:${stat.size}:${stat.mode}:${stat.mtimeMs}:${stat.ctimeMs}`;
|
|
71
|
-
session.reserve(observation.length * 2);
|
|
72
|
-
observations.push(observation);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
for (const kinds of pairs.values())
|
|
76
|
-
demand(kinds.has("pack") && kinds.has("idx"), "Git incomplete pack/idx pair");
|
|
77
|
-
demand(pairs.size <= GIT_LIMITS.maxPacks, "Git maxPacks exceeded");
|
|
78
|
-
return session.sorted(observations);
|
|
79
|
-
};
|
|
80
|
-
const before = await census();
|
|
81
|
-
session.observe(async () => {
|
|
82
|
-
const after = await census();
|
|
83
|
-
demand(after.length === before.length, "Git pack membership changed before output");
|
|
84
|
-
for (let index = 0; index < before.length; index++) {
|
|
85
|
-
await session.step(before[index].length + 1);
|
|
86
|
-
demand(after[index] === before[index], "Git pack/sidecar observations changed before output");
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
for (const row of before) {
|
|
90
|
-
const match = /^pack\/(pack-([0-9a-f]{40})\.pack):/.exec(row);
|
|
91
|
-
if (!match)
|
|
92
|
-
continue;
|
|
93
|
-
session.charge("maxPacks", 1);
|
|
94
|
-
await this.readPack(session.path(gitdir, `objects/pack/${match[1]}`), match[2]);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
async index(bytes, pack) {
|
|
98
|
-
const session = this.session;
|
|
99
|
-
demand(bytes.length >= 1072 && bytes.subarray(0, 8).equals(Buffer.from("ff744f6300000002", "hex")), "Git idx2 header/size refused");
|
|
100
|
-
demand(await session.hash(bytes.subarray(0, -20)) === bytes.subarray(-20).toString("hex"), "Git idx checksum mismatch");
|
|
101
|
-
demand(bytes.subarray(-40, -20).equals(pack.subarray(-20)), "Git idx pack checksum mismatch");
|
|
102
|
-
const count = bytes.readUInt32BE(1028);
|
|
103
|
-
session.charge("maxEntries", count);
|
|
104
|
-
const base = 1072 + count * 28, extra = bytes.length - base;
|
|
105
|
-
demand(Number.isSafeInteger(base) && extra >= 0 && extra % 8 === 0 && (count === 0 ? extra === 0 : extra / 8 <= count - 1), "Git idx extent refused");
|
|
106
|
-
demand(pack.readUInt32BE(8) === count, "Git pack/index object count mismatch");
|
|
107
|
-
const largeStart = 1032 + count * 28, largeCount = extra / 8;
|
|
108
|
-
session.reserve(count * 256);
|
|
109
|
-
const slots = session.allocate(largeCount);
|
|
110
|
-
let buckets;
|
|
111
|
-
try {
|
|
112
|
-
buckets = session.allocate(1024);
|
|
113
|
-
const rows = [];
|
|
114
|
-
let previous = "";
|
|
115
|
-
for (let index = 0; index < count; index++) {
|
|
116
|
-
await session.step(40);
|
|
117
|
-
const oid = bytes.subarray(1032 + index * 20, 1052 + index * 20).toString("hex");
|
|
118
|
-
demand(oid > previous, "Git idx OID order/duplicate refused");
|
|
119
|
-
previous = oid;
|
|
120
|
-
const bucket = bytes[1032 + index * 20];
|
|
121
|
-
buckets.writeUInt32BE(buckets.readUInt32BE(bucket * 4) + 1, bucket * 4);
|
|
122
|
-
const value = bytes.readUInt32BE(1032 + count * 24 + index * 4);
|
|
123
|
-
let offset = value;
|
|
124
|
-
if (value >= 0x80000000) {
|
|
125
|
-
const slot = value - 0x80000000;
|
|
126
|
-
demand(slot < largeCount && slots[slot] === 0, "Git idx large slot invalid/duplicate");
|
|
127
|
-
slots[slot] = 1;
|
|
128
|
-
const large = bytes.readBigUInt64BE(largeStart + slot * 8);
|
|
129
|
-
demand(large <= BigInt(Number.MAX_SAFE_INTEGER), "Git idx offset unsafe");
|
|
130
|
-
offset = Number(large);
|
|
131
|
-
}
|
|
132
|
-
demand(offset >= 12 && offset < pack.length - 20, "Git idx offset outside pack");
|
|
133
|
-
rows.push({ oid, offset, crc: bytes.readUInt32BE(1032 + count * 20 + index * 4), end: 0, type: 0, declared: 0, compressed: 0, base: undefined, state: 0, depth: 0, object: undefined });
|
|
134
|
-
}
|
|
135
|
-
for (let slot = 0; slot < largeCount; slot++) {
|
|
136
|
-
await session.step();
|
|
137
|
-
demand(slots[slot] === 1, "unused Git idx large slot");
|
|
138
|
-
}
|
|
139
|
-
let cumulative = 0;
|
|
140
|
-
for (let bucket = 0; bucket < 256; bucket++) {
|
|
141
|
-
await session.step();
|
|
142
|
-
cumulative += buckets.readUInt32BE(bucket * 4);
|
|
143
|
-
demand(bytes.readUInt32BE(8 + bucket * 4) === cumulative, "Git idx fanout mismatch");
|
|
144
|
-
}
|
|
145
|
-
return rows;
|
|
146
|
-
}
|
|
147
|
-
finally {
|
|
148
|
-
session.release(slots);
|
|
149
|
-
if (buckets)
|
|
150
|
-
session.release(buckets);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
async readPack(path, name) {
|
|
154
|
-
const session = this.session;
|
|
155
|
-
const pack = await session.readExact(path, GIT_LIMITS.maxPackBytes);
|
|
156
|
-
let index;
|
|
157
|
-
try {
|
|
158
|
-
demand(pack.length >= 32 && pack.subarray(0, 4).toString("ascii") === "PACK", "Git pack header refused");
|
|
159
|
-
demand(pack.readUInt32BE(4) === 2 || pack.readUInt32BE(4) === 3, "Git pack version refused");
|
|
160
|
-
const checksum = pack.subarray(-20).toString("hex");
|
|
161
|
-
demand(await session.hash(pack.subarray(0, -20)) === checksum && name === checksum, "Git pack checksum/name mismatch");
|
|
162
|
-
index = await session.readExact(path.slice(0, -5) + ".idx", GIT_LIMITS.maxIndexBytes);
|
|
163
|
-
const rows = await this.index(index, pack);
|
|
164
|
-
const byOid = new Map();
|
|
165
|
-
const byOffset = new Map();
|
|
166
|
-
const offsets = [];
|
|
167
|
-
for (const row of rows) {
|
|
168
|
-
await session.step(4);
|
|
169
|
-
byOid.set(row.oid, row);
|
|
170
|
-
byOffset.set(row.offset, row);
|
|
171
|
-
offsets.push(row.offset.toString().padStart(10, "0"));
|
|
172
|
-
}
|
|
173
|
-
demand(byOffset.size === rows.length, "duplicate Git idx pack offset");
|
|
174
|
-
const order = await session.sorted(offsets);
|
|
175
|
-
const ordered = [];
|
|
176
|
-
for (const offset of order) {
|
|
177
|
-
await session.step();
|
|
178
|
-
ordered.push(byOffset.get(Number(offset)));
|
|
179
|
-
}
|
|
180
|
-
if (!ordered.length)
|
|
181
|
-
demand(pack.length === 32, "Git empty pack trailing bytes");
|
|
182
|
-
for (let position = 0; position < ordered.length; position++) {
|
|
183
|
-
const row = ordered[position];
|
|
184
|
-
demand(position !== 0 || row.offset === 12, "Git first pack entry offset mismatch");
|
|
185
|
-
row.end = ordered[position + 1]?.offset ?? pack.length - 20;
|
|
186
|
-
demand(await crc32(session, pack.subarray(row.offset, row.end)) === row.crc, "Git pack entry CRC mismatch");
|
|
187
|
-
let cursor = row.offset;
|
|
188
|
-
const byte = () => { demand(cursor < row.end, "truncated Git pack entry header"); return pack[cursor++]; };
|
|
189
|
-
let part = byte(), factor = 16;
|
|
190
|
-
row.type = (part >>> 4) & 7;
|
|
191
|
-
demand([1, 2, 3, 4, 6, 7].includes(row.type), "Git pack entry type refused");
|
|
192
|
-
row.declared = part & 15;
|
|
193
|
-
while (part >= 128) {
|
|
194
|
-
await session.step();
|
|
195
|
-
part = byte();
|
|
196
|
-
row.declared += (part & 127) * factor;
|
|
197
|
-
demand(Number.isSafeInteger(row.declared) && row.declared <= GIT_LIMITS.maxObjectBytes, "Git pack declared size exceeded");
|
|
198
|
-
factor *= 128;
|
|
199
|
-
demand(Number.isSafeInteger(factor), "Git pack size overflow");
|
|
200
|
-
}
|
|
201
|
-
if (row.type === 6) {
|
|
202
|
-
part = byte();
|
|
203
|
-
let distance = part & 127;
|
|
204
|
-
while (part >= 128) {
|
|
205
|
-
await session.step();
|
|
206
|
-
part = byte();
|
|
207
|
-
distance = (distance + 1) * 128 + (part & 127);
|
|
208
|
-
demand(Number.isSafeInteger(distance), "Git OFS distance overflow");
|
|
209
|
-
}
|
|
210
|
-
row.base = byOffset.get(row.offset - distance);
|
|
211
|
-
demand(distance > 0 && row.base && row.base.offset < row.offset, "Git OFS base is not earlier entry");
|
|
212
|
-
}
|
|
213
|
-
else if (row.type === 7) {
|
|
214
|
-
demand(cursor + 20 <= row.end, "truncated Git REF base");
|
|
215
|
-
row.base = byOid.get(pack.subarray(cursor, cursor + 20).toString("hex"));
|
|
216
|
-
cursor += 20;
|
|
217
|
-
demand(row.base, "Git REF base outside same pack");
|
|
218
|
-
}
|
|
219
|
-
row.compressed = cursor;
|
|
220
|
-
}
|
|
221
|
-
for (const target of ordered) {
|
|
222
|
-
const pending = [];
|
|
223
|
-
let current = target;
|
|
224
|
-
while (current.state !== 2) {
|
|
225
|
-
await session.step();
|
|
226
|
-
demand(current.state === 0, "Git delta cycle");
|
|
227
|
-
current.state = 1;
|
|
228
|
-
pending.push(current);
|
|
229
|
-
demand(pending.length <= GIT_LIMITS.maxDeltaDepth + 1, "Git delta depth exceeded");
|
|
230
|
-
if (!current.base)
|
|
231
|
-
break;
|
|
232
|
-
current = current.base;
|
|
233
|
-
}
|
|
234
|
-
while (pending.length) {
|
|
235
|
-
const row = pending.pop();
|
|
236
|
-
row.depth = row.base ? row.base.depth + 1 : 0;
|
|
237
|
-
demand(row.depth <= GIT_LIMITS.maxDeltaDepth, "Git delta intrinsic depth exceeded");
|
|
238
|
-
const inflated = await inflatePackedFrame(session, pack.subarray(row.compressed, row.end), row.declared);
|
|
239
|
-
let object;
|
|
240
|
-
let transferred = false;
|
|
241
|
-
try {
|
|
242
|
-
if (row.base) {
|
|
243
|
-
demand(row.base.state === 2 && row.base.object, "Git delta base not verified");
|
|
244
|
-
object = await applyDelta(session, row.base.object, inflated, row.oid);
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
const type = ["commit", "tree", "blob", "tag"][row.type - 1];
|
|
248
|
-
demand(await session.hash(inflated, type) === row.oid, "Git packed object hash mismatch");
|
|
249
|
-
object = { type, bytes: inflated };
|
|
250
|
-
}
|
|
251
|
-
row.object = await this.retain(row.oid, object);
|
|
252
|
-
transferred = true;
|
|
253
|
-
row.state = 2;
|
|
254
|
-
}
|
|
255
|
-
finally {
|
|
256
|
-
if (row.base || !transferred)
|
|
257
|
-
session.release(inflated);
|
|
258
|
-
if (object && !transferred)
|
|
259
|
-
session.release(object.bytes);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
await session.observeExact(path, GIT_LIMITS.maxPackBytes, pack);
|
|
264
|
-
await session.observeExact(path.slice(0, -5) + ".idx", GIT_LIMITS.maxIndexBytes, index);
|
|
265
|
-
}
|
|
266
|
-
finally {
|
|
267
|
-
session.release(pack);
|
|
268
|
-
if (index)
|
|
269
|
-
session.release(index);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
//# sourceMappingURL=pack.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../../../src/commands/git/pack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { type Arguments } from "./arguments.js";
|
|
2
|
-
import { Repository } from "./repository.js";
|
|
3
|
-
export declare function status(repository: Repository, parsed: Arguments): Promise<number>;
|
|
4
|
-
export declare function diff(repository: Repository, parsed: Arguments): Promise<number>;
|
|
5
|
-
export declare function query(repository: Repository, parsed: Arguments): Promise<number>;
|
|
6
|
-
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/commands/git/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK5E,OAAO,EAAE,UAAU,EAAc,MAAM,iBAAiB,CAAC;AA6GzD,wBAAsB,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBvF;AAED,wBAAsB,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BrF;AAED,wBAAsB,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA+CtF"}
|
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
import { relativePath } from "../../contracts/index.js";
|
|
2
|
-
import { pathspecs, quote, selected } from "./arguments.js";
|
|
3
|
-
import { patch } from "./diff.js";
|
|
4
|
-
import { ignored, ignoreFile } from "./ignore.js";
|
|
5
|
-
import { objectPath, parent } from "./io.js";
|
|
6
|
-
import { GIT_LIMITS, GitFailure, demand } from "./limits.js";
|
|
7
|
-
import { Repository } from "./repository.js";
|
|
8
|
-
function change(before, after) {
|
|
9
|
-
if (!before)
|
|
10
|
-
return after ? "A" : " ";
|
|
11
|
-
if (!after)
|
|
12
|
-
return "D";
|
|
13
|
-
if ((before.mode & 0o170000) !== (after.mode & 0o170000))
|
|
14
|
-
return "T";
|
|
15
|
-
return before.mode !== after.mode || before.oid !== after.oid ? "M" : " ";
|
|
16
|
-
}
|
|
17
|
-
async function blob(repository, entry) {
|
|
18
|
-
if (!entry)
|
|
19
|
-
return undefined;
|
|
20
|
-
const object = await repository.object(entry.oid);
|
|
21
|
-
demand(object.type === "blob", "Git index/tree leaf is not a blob");
|
|
22
|
-
return { ...entry, bytes: object.bytes };
|
|
23
|
-
}
|
|
24
|
-
async function attributes(repository, specs, maps, worktree) {
|
|
25
|
-
const session = repository.session;
|
|
26
|
-
const check = async (bytes) => {
|
|
27
|
-
for (const line of session.text(bytes).split("\n")) {
|
|
28
|
-
await session.step(line.length + 1);
|
|
29
|
-
demand(!line.trim() || line.trimStart().startsWith("#"), "M1A active Git attributes unsupported");
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
const info = await session.read(session.path(repository.gitdir, "info/attributes"), GIT_LIMITS.maxMetadataBytes, true, true);
|
|
33
|
-
if (info) {
|
|
34
|
-
try {
|
|
35
|
-
await check(info);
|
|
36
|
-
}
|
|
37
|
-
finally {
|
|
38
|
-
session.release(info);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
const names = new Set([".gitattributes"]);
|
|
42
|
-
for (const map of maps)
|
|
43
|
-
for (const name of map.keys()) {
|
|
44
|
-
if (!selected(name, specs))
|
|
45
|
-
continue;
|
|
46
|
-
let directory = parent(name);
|
|
47
|
-
while (directory !== "." && directory !== "/") {
|
|
48
|
-
names.add(directory + "/.gitattributes");
|
|
49
|
-
directory = parent(directory);
|
|
50
|
-
}
|
|
51
|
-
if (name.endsWith("/.gitattributes"))
|
|
52
|
-
names.add(name);
|
|
53
|
-
}
|
|
54
|
-
for (const spec of specs) {
|
|
55
|
-
let directory = spec;
|
|
56
|
-
while (directory && directory !== "." && directory !== "/") {
|
|
57
|
-
names.add(directory + "/.gitattributes");
|
|
58
|
-
directory = parent(directory);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
for (const name of names) {
|
|
62
|
-
for (const map of maps) {
|
|
63
|
-
const entry = map.get(name);
|
|
64
|
-
if (!entry)
|
|
65
|
-
continue;
|
|
66
|
-
demand(entry.mode !== 0o120000, "symlinked Git attributes unsupported");
|
|
67
|
-
const value = await blob(repository, entry);
|
|
68
|
-
demand(value.bytes.length <= GIT_LIMITS.maxMetadataBytes, "Git attributes size exceeded");
|
|
69
|
-
await check(value.bytes);
|
|
70
|
-
}
|
|
71
|
-
if (worktree && repository.root) {
|
|
72
|
-
let directory = parent(name), obstructed = false;
|
|
73
|
-
while (directory !== "." && directory !== "/") {
|
|
74
|
-
const stat = await session.stat(session.path(repository.root, directory));
|
|
75
|
-
if (!stat || stat.type !== "directory") {
|
|
76
|
-
obstructed = true;
|
|
77
|
-
break;
|
|
78
|
-
}
|
|
79
|
-
directory = parent(directory);
|
|
80
|
-
}
|
|
81
|
-
if (obstructed)
|
|
82
|
-
continue;
|
|
83
|
-
const value = await session.read(session.path(repository.root, name), GIT_LIMITS.maxMetadataBytes, true, true);
|
|
84
|
-
if (value) {
|
|
85
|
-
try {
|
|
86
|
-
await check(value);
|
|
87
|
-
}
|
|
88
|
-
finally {
|
|
89
|
-
session.release(value);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
async function untracked(repository, parsed, tracked) {
|
|
96
|
-
const session = repository.session, root = repository.root;
|
|
97
|
-
const specs = pathspecs(parsed, root);
|
|
98
|
-
const directories = new Set();
|
|
99
|
-
for (const path of tracked) {
|
|
100
|
-
let directory = parent(path);
|
|
101
|
-
while (directory !== "." && directory !== "/") {
|
|
102
|
-
await session.step(directory.length + 1);
|
|
103
|
-
if (!directories.has(directory)) {
|
|
104
|
-
session.reserve(directory.length * 2 + 24);
|
|
105
|
-
directories.add(directory);
|
|
106
|
-
}
|
|
107
|
-
directory = parent(directory);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
const initial = await ignoreFile(session, session.path(repository.gitdir, "info/exclude"), "");
|
|
111
|
-
const walk = async (directory, inherited, depth) => {
|
|
112
|
-
demand(depth <= GIT_LIMITS.maxDepth, "Git worktree depth exceeded");
|
|
113
|
-
const absolute = session.path(root, directory);
|
|
114
|
-
const rules = [...inherited, ...await ignoreFile(session, session.path(absolute, ".gitignore"), directory)];
|
|
115
|
-
const output = [];
|
|
116
|
-
for (const name of await session.sorted((await session.list(absolute)).map(entry => entry.name))) {
|
|
117
|
-
if (name.toLowerCase() === ".git") {
|
|
118
|
-
demand(!directory && name === ".git", "nested/case-aliased Git repository unsupported");
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
const path = directory ? directory + "/" + name : name;
|
|
122
|
-
objectPath(path);
|
|
123
|
-
const stat = (await session.stat(session.path(root, path)));
|
|
124
|
-
demand(stat, "Git directory changed during scan");
|
|
125
|
-
const hasTracked = tracked.has(path) || directories.has(path);
|
|
126
|
-
await session.step(path.length + 1);
|
|
127
|
-
if (!hasTracked && await ignored(session, rules, path, stat.type === "directory"))
|
|
128
|
-
continue;
|
|
129
|
-
if (stat.type === "directory") {
|
|
130
|
-
const children = await walk(path, rules, depth + 1);
|
|
131
|
-
if (children.length && !hasTracked && parsed.untracked === "normal" && selected(path, specs))
|
|
132
|
-
output.push(path + "/");
|
|
133
|
-
else
|
|
134
|
-
output.push(...children);
|
|
135
|
-
}
|
|
136
|
-
else if (!tracked.has(path) && selected(path, specs)) {
|
|
137
|
-
demand(stat.type === "file" || stat.type === "symlink", "unsupported Git worktree entry");
|
|
138
|
-
output.push(path);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return output;
|
|
142
|
-
};
|
|
143
|
-
return walk("", initial, 0);
|
|
144
|
-
}
|
|
145
|
-
function display(repository, parsed, path, porcelain = false) {
|
|
146
|
-
const name = porcelain ? path : relativePath(parsed.cwd, repository.session.path(repository.root ?? repository.cwd, path)) + (path.endsWith("/") ? "/" : "");
|
|
147
|
-
return parsed.flags.has("-z") ? name : quote(name);
|
|
148
|
-
}
|
|
149
|
-
export async function status(repository, parsed) {
|
|
150
|
-
demand(repository.root, "Git status requires a worktree");
|
|
151
|
-
const session = repository.session, specs = pathspecs(parsed, repository.root);
|
|
152
|
-
const index = await repository.index(), head = await repository.tree(await repository.revision("HEAD", true));
|
|
153
|
-
const cached = new Map(index.filter(entry => entry.stage === 0).map(entry => [entry.path, entry]));
|
|
154
|
-
await attributes(repository, specs, [head, cached], true);
|
|
155
|
-
const stages = new Map();
|
|
156
|
-
for (const entry of index)
|
|
157
|
-
if (entry.stage)
|
|
158
|
-
stages.set(entry.path, (stages.get(entry.path) ?? 0) | 1 << (entry.stage - 1));
|
|
159
|
-
const rows = [];
|
|
160
|
-
const conflict = { 1: "DD", 2: "AU", 4: "UA", 3: "UD", 5: "DU", 6: "AA", 7: "UU" };
|
|
161
|
-
for (const path of await session.sorted(new Set([...head.keys(), ...cached.keys(), ...stages.keys()]))) {
|
|
162
|
-
if (!selected(path, specs))
|
|
163
|
-
continue;
|
|
164
|
-
if (stages.has(path)) {
|
|
165
|
-
rows.push({ path, code: conflict[stages.get(path)] });
|
|
166
|
-
continue;
|
|
167
|
-
}
|
|
168
|
-
const entry = cached.get(path), working = entry ? await repository.working(entry) : undefined;
|
|
169
|
-
const code = change(head.get(path), entry) + (entry ? change(entry, working) : " ");
|
|
170
|
-
if (working)
|
|
171
|
-
session.release(working.bytes);
|
|
172
|
-
if (code !== " ")
|
|
173
|
-
rows.push({ path, code });
|
|
174
|
-
}
|
|
175
|
-
if (parsed.untracked !== "no")
|
|
176
|
-
for (const path of await untracked(repository, parsed, new Set(index.map(entry => entry.path))))
|
|
177
|
-
rows.push({ path, code: "??" });
|
|
178
|
-
await session.unchanged();
|
|
179
|
-
const porcelain = ["--porcelain", "--porcelain=v1", "-z"].some(flag => parsed.flags.has(flag));
|
|
180
|
-
for (const row of rows)
|
|
181
|
-
await session.output(`${row.code} ${display(repository, parsed, row.path, porcelain)}${parsed.flags.has("-z") ? "\0" : "\n"}`);
|
|
182
|
-
return 0;
|
|
183
|
-
}
|
|
184
|
-
export async function diff(repository, parsed) {
|
|
185
|
-
const session = repository.session, specs = pathspecs(parsed, repository.root);
|
|
186
|
-
const cached = parsed.flags.has("--cached") || parsed.flags.has("--staged");
|
|
187
|
-
demand(!cached || parsed.operands.length <= 1, "cached Git diff takes at most one revision");
|
|
188
|
-
const working = !cached && parsed.operands.length < 2;
|
|
189
|
-
demand(!working || repository.root, "working Git diff requires a worktree");
|
|
190
|
-
const index = cached || working ? await repository.index() : [];
|
|
191
|
-
demand(!index.some(entry => entry.stage && selected(entry.path, specs)), "selected unmerged Git diff unsupported");
|
|
192
|
-
const indexMap = new Map(index.filter(entry => !entry.stage).map(entry => [entry.path, entry]));
|
|
193
|
-
const before = parsed.operands[0] || cached ? await repository.tree(await repository.revision(parsed.operands[0] ?? "HEAD", cached && !parsed.operands[0])) : indexMap;
|
|
194
|
-
const after = parsed.operands[1] ? await repository.tree(await repository.revision(parsed.operands[1])) : indexMap;
|
|
195
|
-
await attributes(repository, specs, [before, after], working);
|
|
196
|
-
await session.unchanged();
|
|
197
|
-
let different = false;
|
|
198
|
-
const paths = new Set([...before.keys(), ...after.keys()]);
|
|
199
|
-
for (const path of await session.sorted(paths)) {
|
|
200
|
-
if (!selected(path, specs))
|
|
201
|
-
continue;
|
|
202
|
-
const original = await blob(repository, before.get(path));
|
|
203
|
-
const replacement = working ? after.has(path) ? await repository.working(after.get(path)) : undefined : await blob(repository, after.get(path));
|
|
204
|
-
try {
|
|
205
|
-
const code = change(original, replacement);
|
|
206
|
-
if (code === " ")
|
|
207
|
-
continue;
|
|
208
|
-
different = true;
|
|
209
|
-
if (parsed.flags.has("--quiet"))
|
|
210
|
-
continue;
|
|
211
|
-
if (parsed.flags.has("--name-only") || parsed.flags.has("--name-status")) {
|
|
212
|
-
const prefix = parsed.flags.has("--name-status") ? code + (parsed.flags.has("-z") ? "\0" : "\t") : "";
|
|
213
|
-
await session.output(prefix + (parsed.flags.has("-z") ? path : quote(path)) + (parsed.flags.has("-z") ? "\0" : "\n"));
|
|
214
|
-
}
|
|
215
|
-
else
|
|
216
|
-
await patch(repository, parsed, path, original, replacement);
|
|
217
|
-
}
|
|
218
|
-
finally {
|
|
219
|
-
if (working && replacement)
|
|
220
|
-
session.release(replacement.bytes);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
return different && (parsed.flags.has("--quiet") || parsed.flags.has("--exit-code")) ? 1 : 0;
|
|
224
|
-
}
|
|
225
|
-
export async function query(repository, parsed) {
|
|
226
|
-
const session = repository.session;
|
|
227
|
-
if (parsed.command === "status")
|
|
228
|
-
return status(repository, parsed);
|
|
229
|
-
if (parsed.command === "diff")
|
|
230
|
-
return diff(repository, parsed);
|
|
231
|
-
if (parsed.command === "ls-files") {
|
|
232
|
-
const specs = pathspecs(parsed, repository.root), rows = (await repository.index()).filter(entry => selected(entry.path, specs));
|
|
233
|
-
await session.unchanged();
|
|
234
|
-
for (const entry of rows)
|
|
235
|
-
await session.output(`${parsed.flags.has("-s") || parsed.flags.has("--stage") ? `${entry.mode.toString(8)} ${entry.oid} ${entry.stage}\t` : ""}${display(repository, parsed, entry.path)}${parsed.flags.has("-z") ? "\0" : "\n"}`);
|
|
236
|
-
return 0;
|
|
237
|
-
}
|
|
238
|
-
if (parsed.command === "rev-parse") {
|
|
239
|
-
let value;
|
|
240
|
-
if (parsed.flags.has("--show-toplevel")) {
|
|
241
|
-
demand(repository.root, "bare Git repository has no toplevel");
|
|
242
|
-
value = repository.root;
|
|
243
|
-
}
|
|
244
|
-
else if (parsed.flags.has("--absolute-git-dir"))
|
|
245
|
-
value = repository.gitdir;
|
|
246
|
-
else if (parsed.flags.has("--is-bare-repository"))
|
|
247
|
-
value = String(!repository.root);
|
|
248
|
-
else if (parsed.flags.has("--is-inside-work-tree"))
|
|
249
|
-
value = String(Boolean(repository.root));
|
|
250
|
-
else
|
|
251
|
-
value = (await repository.revision(parsed.operands[0]));
|
|
252
|
-
await session.unchanged();
|
|
253
|
-
await session.output(value + "\n");
|
|
254
|
-
return 0;
|
|
255
|
-
}
|
|
256
|
-
if (parsed.command === "show" && !parsed.flags.has("--no-patch")) {
|
|
257
|
-
const operand = parsed.operands[0], colon = operand.indexOf(":");
|
|
258
|
-
demand(colon > 0 && !parsed.format, "M1A show requires REV:path or --no-patch --format");
|
|
259
|
-
const name = operand.slice(colon + 1);
|
|
260
|
-
objectPath(name);
|
|
261
|
-
const entries = await repository.tree(await repository.revision(operand.slice(0, colon)));
|
|
262
|
-
const entry = entries.get(name);
|
|
263
|
-
demand(entry, "Git tree path not found");
|
|
264
|
-
const content = (await blob(repository, entry));
|
|
265
|
-
await session.unchanged();
|
|
266
|
-
await session.output(content.bytes);
|
|
267
|
-
return 0;
|
|
268
|
-
}
|
|
269
|
-
let oid = await repository.revision(parsed.operands[0] ?? "HEAD");
|
|
270
|
-
const limit = parsed.command === "show" ? 1 : parsed.count ?? GIT_LIMITS.maxCommits;
|
|
271
|
-
const seen = new Set();
|
|
272
|
-
await session.unchanged();
|
|
273
|
-
for (let index = 0; oid && index < limit; index++) {
|
|
274
|
-
oid = await repository.peel(oid, "commit");
|
|
275
|
-
demand(!seen.has(oid), "cyclic Git history");
|
|
276
|
-
seen.add(oid);
|
|
277
|
-
const commit = await repository.commit(oid);
|
|
278
|
-
let text = parsed.format === "oneline" ? await repository.abbreviation(oid) : oid;
|
|
279
|
-
if (parsed.format !== "%H") {
|
|
280
|
-
const message = session.text(commit.message), newline = message.indexOf("\n");
|
|
281
|
-
const subject = newline < 0 ? message : message.slice(0, newline);
|
|
282
|
-
demand(!/[\x00-\x1f\x7f]/.test(subject) && (newline < 0 || newline === message.length - 1 || message[newline + 1] === "\n"), "unsupported Git commit subject");
|
|
283
|
-
text += " " + subject;
|
|
284
|
-
}
|
|
285
|
-
await session.output(text + "\n");
|
|
286
|
-
oid = commit.parents[0];
|
|
287
|
-
if (index + 1 === GIT_LIMITS.maxCommits && parsed.count === undefined && oid)
|
|
288
|
-
throw new GitFailure("Git history limit exceeded");
|
|
289
|
-
}
|
|
290
|
-
return 0;
|
|
291
|
-
}
|
|
292
|
-
//# sourceMappingURL=queries.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/commands/git/queries.ts"],"names":[],"mappings":"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"}
|