@huozi-ai/git-kit 0.1.0-alpha.0

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 (51) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +6 -0
  3. package/dist/commands.d.ts +17 -0
  4. package/dist/commands.d.ts.map +1 -0
  5. package/dist/commands.js +62 -0
  6. package/dist/commands.js.map +1 -0
  7. package/dist/configure.d.ts +43 -0
  8. package/dist/configure.d.ts.map +1 -0
  9. package/dist/configure.js +146 -0
  10. package/dist/configure.js.map +1 -0
  11. package/dist/credential.d.ts +40 -0
  12. package/dist/credential.d.ts.map +1 -0
  13. package/dist/credential.js +61 -0
  14. package/dist/credential.js.map +1 -0
  15. package/dist/git.d.ts +50 -0
  16. package/dist/git.d.ts.map +1 -0
  17. package/dist/git.js +71 -0
  18. package/dist/git.js.map +1 -0
  19. package/dist/index.d.ts +18 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +11 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/lfs/client.d.ts +47 -0
  24. package/dist/lfs/client.d.ts.map +1 -0
  25. package/dist/lfs/client.js +216 -0
  26. package/dist/lfs/client.js.map +1 -0
  27. package/dist/lfs/filter.d.ts +39 -0
  28. package/dist/lfs/filter.d.ts.map +1 -0
  29. package/dist/lfs/filter.js +148 -0
  30. package/dist/lfs/filter.js.map +1 -0
  31. package/dist/lfs/pktline.d.ts +33 -0
  32. package/dist/lfs/pktline.d.ts.map +1 -0
  33. package/dist/lfs/pktline.js +127 -0
  34. package/dist/lfs/pktline.js.map +1 -0
  35. package/dist/lfs/pointer.d.ts +20 -0
  36. package/dist/lfs/pointer.d.ts.map +1 -0
  37. package/dist/lfs/pointer.js +56 -0
  38. package/dist/lfs/pointer.js.map +1 -0
  39. package/dist/lfs/push.d.ts +20 -0
  40. package/dist/lfs/push.d.ts.map +1 -0
  41. package/dist/lfs/push.js +94 -0
  42. package/dist/lfs/push.js.map +1 -0
  43. package/dist/lfs/store.d.ts +28 -0
  44. package/dist/lfs/store.d.ts.map +1 -0
  45. package/dist/lfs/store.js +98 -0
  46. package/dist/lfs/store.js.map +1 -0
  47. package/dist/ops.d.ts +39 -0
  48. package/dist/ops.d.ts.map +1 -0
  49. package/dist/ops.js +130 -0
  50. package/dist/ops.js.map +1 -0
  51. package/package.json +39 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/lfs/filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { Writable } from "node:stream";
2
+ /**
3
+ * pkt-line framing (https://git-scm.com/docs/protocol-common#_pkt_line_format): four hex digits
4
+ * give the length including themselves; `0000` is a flush packet. Used by git's long-running
5
+ * filter protocol.
6
+ */
7
+ export declare const MAX_PACKET_DATA = 65516;
8
+ export declare class PktReader {
9
+ private readonly source;
10
+ private buffer;
11
+ private done;
12
+ constructor(input: AsyncIterable<Buffer | Uint8Array>);
13
+ private fill;
14
+ /** The next packet's data, `null` for a flush packet, `undefined` at the end of input. */
15
+ read(): Promise<Buffer | null | undefined>;
16
+ /** Text packets up to the next flush, without trailing newlines. `undefined` at the end of input. */
17
+ readList(): Promise<string[] | undefined>;
18
+ /**
19
+ * Data packets up to the next flush. A consumer that stops early still leaves the reader at the
20
+ * next message: the rest of the content is skipped.
21
+ */
22
+ readContent(): AsyncGenerator<Buffer>;
23
+ }
24
+ export declare class PktWriter {
25
+ private readonly out;
26
+ constructor(out: Writable);
27
+ private write;
28
+ packet(data: Buffer | string): Promise<void>;
29
+ flush(): Promise<void>;
30
+ /** Text packets, each ending in a newline, then a flush. */
31
+ list(lines: string[]): Promise<void>;
32
+ }
33
+ //# sourceMappingURL=pktline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pktline.d.ts","sourceRoot":"","sources":["../../src/lfs/pktline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,IAAI,CAAS;gBAET,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC;YAIvC,IAAI;IAalB,0FAA0F;IACpF,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAqBhD,qGAAqG;IAC/F,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;IAa/C;;;OAGG;IACI,WAAW,IAAI,cAAc,CAAC,MAAM,CAAC;CAmB7C;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;gBAEnB,GAAG,EAAE,QAAQ;IAIzB,OAAO,CAAC,KAAK;IAUP,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,4DAA4D;IACtD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAI3C"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * pkt-line framing (https://git-scm.com/docs/protocol-common#_pkt_line_format): four hex digits
3
+ * give the length including themselves; `0000` is a flush packet. Used by git's long-running
4
+ * filter protocol.
5
+ */
6
+ export const MAX_PACKET_DATA = 65516;
7
+ export class PktReader {
8
+ source;
9
+ buffer = Buffer.alloc(0);
10
+ done = false;
11
+ constructor(input) {
12
+ this.source = input[Symbol.asyncIterator]();
13
+ }
14
+ async fill(bytes) {
15
+ while (this.buffer.length < bytes) {
16
+ if (this.done)
17
+ return false;
18
+ const next = await this.source.next();
19
+ if (next.done) {
20
+ this.done = true;
21
+ return false;
22
+ }
23
+ this.buffer = Buffer.concat([this.buffer, Buffer.from(next.value)]);
24
+ }
25
+ return true;
26
+ }
27
+ /** The next packet's data, `null` for a flush packet, `undefined` at the end of input. */
28
+ async read() {
29
+ if (!(await this.fill(4))) {
30
+ if (this.buffer.length === 0)
31
+ return undefined;
32
+ throw new Error("Truncated pkt-line header");
33
+ }
34
+ const length = Number.parseInt(this.buffer.subarray(0, 4).toString("latin1"), 16);
35
+ if (Number.isNaN(length) || (length > 0 && length < 4))
36
+ throw new Error("Bad pkt-line length");
37
+ if (length === 0) {
38
+ this.buffer = this.buffer.subarray(4);
39
+ return null;
40
+ }
41
+ if (!(await this.fill(length)))
42
+ throw new Error("Truncated pkt-line");
43
+ const data = this.buffer.subarray(4, length);
44
+ this.buffer = this.buffer.subarray(length);
45
+ return data;
46
+ }
47
+ /** Text packets up to the next flush, without trailing newlines. `undefined` at the end of input. */
48
+ async readList() {
49
+ const lines = [];
50
+ for (;;) {
51
+ const packet = await this.read();
52
+ if (packet === undefined) {
53
+ if (lines.length === 0)
54
+ return undefined;
55
+ throw new Error("Input ended inside a list");
56
+ }
57
+ if (packet === null)
58
+ return lines;
59
+ lines.push(packet.toString("utf8").replace(/\n$/, ""));
60
+ }
61
+ }
62
+ /**
63
+ * Data packets up to the next flush. A consumer that stops early still leaves the reader at the
64
+ * next message: the rest of the content is skipped.
65
+ */
66
+ async *readContent() {
67
+ let finished = false;
68
+ try {
69
+ for (;;) {
70
+ const packet = await this.read();
71
+ if (packet === undefined)
72
+ throw new Error("Input ended inside content");
73
+ if (packet === null) {
74
+ finished = true;
75
+ return;
76
+ }
77
+ yield packet;
78
+ }
79
+ }
80
+ finally {
81
+ while (!finished) {
82
+ const packet = await this.read();
83
+ finished = packet === null || packet === undefined;
84
+ }
85
+ }
86
+ }
87
+ }
88
+ export class PktWriter {
89
+ out;
90
+ constructor(out) {
91
+ this.out = out;
92
+ }
93
+ write(data) {
94
+ return new Promise((resolve, reject) => {
95
+ const ok = this.out.write(data, (error) => {
96
+ if (error)
97
+ reject(error);
98
+ });
99
+ if (ok)
100
+ resolve();
101
+ else
102
+ this.out.once("drain", resolve);
103
+ });
104
+ }
105
+ async packet(data) {
106
+ const bytes = typeof data === "string" ? Buffer.from(data, "utf8") : data;
107
+ for (let i = 0; i < bytes.length || i === 0; i += MAX_PACKET_DATA) {
108
+ const part = bytes.subarray(i, i + MAX_PACKET_DATA);
109
+ if (part.length === 0)
110
+ return;
111
+ await this.write(Buffer.concat([
112
+ Buffer.from((part.length + 4).toString(16).padStart(4, "0"), "latin1"),
113
+ part,
114
+ ]));
115
+ }
116
+ }
117
+ async flush() {
118
+ await this.write(Buffer.from("0000", "latin1"));
119
+ }
120
+ /** Text packets, each ending in a newline, then a flush. */
121
+ async list(lines) {
122
+ for (const line of lines)
123
+ await this.packet(`${line}\n`);
124
+ await this.flush();
125
+ }
126
+ }
127
+ //# sourceMappingURL=pktline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pktline.js","sourceRoot":"","sources":["../../src/lfs/pktline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Git LFS pointer files (https://github.com/git-lfs/git-lfs/blob/main/docs/spec.md):
3
+ *
4
+ * version https://git-lfs.github.com/spec/v1
5
+ * oid sha256:<64 hex>
6
+ * size <bytes>
7
+ *
8
+ * Keys after `version` are sorted; every line ends with `\n`; a pointer is under 1024 bytes.
9
+ */
10
+ export declare const POINTER_VERSION = "https://git-lfs.github.com/spec/v1";
11
+ /** Anything this large or larger is content, not a pointer. */
12
+ export declare const MAX_POINTER_SIZE = 1024;
13
+ export interface LfsPointer {
14
+ oid: string;
15
+ size: number;
16
+ }
17
+ export declare function formatPointer({ oid, size }: LfsPointer): string;
18
+ /** The pointer in these bytes, or `null` when they are not a valid pointer. */
19
+ export declare function parsePointer(data: Buffer | string): LfsPointer | null;
20
+ //# sourceMappingURL=pointer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../src/lfs/pointer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,uCAAuC,CAAC;AACpE,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,UAAU,GAAG,MAAM,CAE/D;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAgCrE"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Git LFS pointer files (https://github.com/git-lfs/git-lfs/blob/main/docs/spec.md):
3
+ *
4
+ * version https://git-lfs.github.com/spec/v1
5
+ * oid sha256:<64 hex>
6
+ * size <bytes>
7
+ *
8
+ * Keys after `version` are sorted; every line ends with `\n`; a pointer is under 1024 bytes.
9
+ */
10
+ export const POINTER_VERSION = "https://git-lfs.github.com/spec/v1";
11
+ /** Anything this large or larger is content, not a pointer. */
12
+ export const MAX_POINTER_SIZE = 1024;
13
+ export function formatPointer({ oid, size }) {
14
+ return `version ${POINTER_VERSION}\noid sha256:${oid}\nsize ${String(size)}\n`;
15
+ }
16
+ /** The pointer in these bytes, or `null` when they are not a valid pointer. */
17
+ export function parsePointer(data) {
18
+ const text = typeof data === "string"
19
+ ? data
20
+ : data.length >= MAX_POINTER_SIZE
21
+ ? ""
22
+ : data.toString("utf8");
23
+ if (text === "" || text.length >= MAX_POINTER_SIZE || !text.endsWith("\n"))
24
+ return null;
25
+ const lines = text.slice(0, -1).split("\n");
26
+ if (lines[0] !== `version ${POINTER_VERSION}`)
27
+ return null;
28
+ let oid;
29
+ let size;
30
+ let previous = "";
31
+ for (const line of lines.slice(1)) {
32
+ const space = line.indexOf(" ");
33
+ if (space <= 0)
34
+ return null;
35
+ const key = line.slice(0, space);
36
+ const value = line.slice(space + 1);
37
+ if (!/^[a-z0-9.-]+$/.test(key) || key <= previous)
38
+ return null;
39
+ previous = key;
40
+ if (key === "oid") {
41
+ const match = /^sha256:([0-9a-f]{64})$/.exec(value);
42
+ if (!match)
43
+ return null;
44
+ oid = match[1];
45
+ }
46
+ else if (key === "size") {
47
+ if (!/^\d+$/.test(value))
48
+ return null;
49
+ size = Number(value);
50
+ if (!Number.isSafeInteger(size))
51
+ return null;
52
+ }
53
+ }
54
+ return oid !== undefined && size !== undefined ? { oid, size } : null;
55
+ }
56
+ //# sourceMappingURL=pointer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointer.js","sourceRoot":"","sources":["../../src/lfs/pointer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,oCAAoC,CAAC;AACpE,+DAA+D;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAOrC,MAAM,UAAU,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,EAAc;IACrD,OAAO,WAAW,eAAe,gBAAgB,GAAG,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACjF,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,YAAY,CAAC,IAAqB;IAChD,MAAM,IAAI,GACR,OAAO,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,gBAAgB;YAC/B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,gBAAgB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,eAAe,EAAE;QAAE,OAAO,IAAI,CAAC;IAC3D,IAAI,GAAuB,CAAC;IAC5B,IAAI,IAAwB,CAAC;IAC7B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC/D,QAAQ,GAAG,GAAG,CAAC;QACf,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;aAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxE,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type LfsPointer } from "./pointer.js";
2
+ /** One line of pre-push input: `<local ref> <local sha> <remote ref> <remote sha>`. */
3
+ export interface RefUpdate {
4
+ localRef: string;
5
+ localSha: string;
6
+ remoteRef: string;
7
+ remoteSha: string;
8
+ }
9
+ export declare function parsePrePushInput(text: string): RefUpdate[];
10
+ /**
11
+ * The LFS pointers in commits reachable from `include` and not from `exclude` or the remote's
12
+ * tracking refs: every blob smaller than a pointer's maximum size that parses as a pointer.
13
+ */
14
+ export declare function pointersBetween(cwd: string, include: string[], exclude: string[], remote: string): Promise<LfsPointer[]>;
15
+ /**
16
+ * The pre-push hook: uploads the LFS objects of the pushed commits that the server does not have.
17
+ * `remote` and `url` are the hook's arguments; `input` is its stdin. Returns how many were sent.
18
+ */
19
+ export declare function prePush(cwd: string, remote: string, url: string, input: string): Promise<number>;
20
+ //# sourceMappingURL=push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/lfs/push.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/E,uFAAuF;AACvF,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAW3D;AAUD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,EAAE,CAAC,CA0DvB;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAejB"}
@@ -0,0 +1,94 @@
1
+ import { runGit } from "../git.js";
2
+ import { LfsClient, lfsEndpoint } from "./client.js";
3
+ import { MAX_POINTER_SIZE, parsePointer } from "./pointer.js";
4
+ import { LocalObjects } from "./store.js";
5
+ const ZERO = /^0+$/;
6
+ export function parsePrePushInput(text) {
7
+ return text
8
+ .split("\n")
9
+ .map((line) => line.trim().split(/\s+/))
10
+ .filter((parts) => parts.length === 4)
11
+ .map(([localRef = "", localSha = "", remoteRef = "", remoteSha = ""]) => ({
12
+ localRef,
13
+ localSha,
14
+ remoteRef,
15
+ remoteSha,
16
+ }));
17
+ }
18
+ async function exists(cwd, sha) {
19
+ const { code } = await runGit(["cat-file", "-e", `${sha}^{commit}`], {
20
+ cwd,
21
+ okCodes: [1, 128],
22
+ });
23
+ return code === 0;
24
+ }
25
+ /**
26
+ * The LFS pointers in commits reachable from `include` and not from `exclude` or the remote's
27
+ * tracking refs: every blob smaller than a pointer's maximum size that parses as a pointer.
28
+ */
29
+ export async function pointersBetween(cwd, include, exclude, remote) {
30
+ if (include.length === 0)
31
+ return [];
32
+ const known = [];
33
+ for (const sha of exclude)
34
+ if (!ZERO.test(sha) && (await exists(cwd, sha)))
35
+ known.push(sha);
36
+ const listed = await runGit([
37
+ "rev-list",
38
+ "--objects",
39
+ ...include,
40
+ "--not",
41
+ ...known,
42
+ `--remotes=${remote}`,
43
+ ], { cwd });
44
+ const ids = listed.stdout
45
+ .toString("utf8")
46
+ .split("\n")
47
+ .map((line) => line.split(" ")[0] ?? "")
48
+ .filter((id) => id !== "");
49
+ if (ids.length === 0)
50
+ return [];
51
+ const checked = await runGit(["cat-file", "--batch-check=%(objectname) %(objecttype) %(objectsize)"], {
52
+ cwd,
53
+ input: `${ids.join("\n")}\n`,
54
+ });
55
+ const small = checked.stdout
56
+ .toString("utf8")
57
+ .split("\n")
58
+ .map((line) => line.split(" "))
59
+ .filter(([, type, size]) => type === "blob" && Number(size) < MAX_POINTER_SIZE)
60
+ .map(([id]) => id ?? "");
61
+ if (small.length === 0)
62
+ return [];
63
+ const contents = (await runGit(["cat-file", "--batch"], {
64
+ cwd,
65
+ input: `${small.join("\n")}\n`,
66
+ })).stdout;
67
+ const pointers = new Map();
68
+ let at = 0;
69
+ while (at < contents.length) {
70
+ const eol = contents.indexOf(0x0a, at);
71
+ if (eol === -1)
72
+ break;
73
+ const size = Number(contents.subarray(at, eol).toString("utf8").split(" ")[2]);
74
+ const body = contents.subarray(eol + 1, eol + 1 + size);
75
+ at = eol + 1 + size + 1;
76
+ const pointer = parsePointer(body);
77
+ if (pointer)
78
+ pointers.set(pointer.oid, pointer);
79
+ }
80
+ return [...pointers.values()];
81
+ }
82
+ /**
83
+ * The pre-push hook: uploads the LFS objects of the pushed commits that the server does not have.
84
+ * `remote` and `url` are the hook's arguments; `input` is its stdin. Returns how many were sent.
85
+ */
86
+ export async function prePush(cwd, remote, url, input) {
87
+ const updates = parsePrePushInput(input).filter((u) => !ZERO.test(u.localSha));
88
+ const pointers = await pointersBetween(cwd, updates.map((u) => u.localSha), updates.map((u) => u.remoteSha), remote);
89
+ if (pointers.length === 0)
90
+ return 0;
91
+ const endpoint = await lfsEndpoint(cwd, url || remote);
92
+ return new LfsClient(cwd, endpoint, await LocalObjects.open(cwd)).upload(pointers);
93
+ }
94
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/lfs/push.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /** Bytes read from a stream: kept in memory while small, spilled to a temporary file once large. */
2
+ export interface Spooled {
3
+ oid: string;
4
+ size: number;
5
+ /** The bytes, when fewer than `MAX_POINTER_SIZE`. */
6
+ small?: Buffer;
7
+ /** The temporary file holding the bytes otherwise. */
8
+ file?: string;
9
+ }
10
+ /**
11
+ * The local LFS object store, laid out like git-lfs: `.git/lfs/objects/<aa>/<bb>/<oid>`, with
12
+ * temporary files in `.git/lfs/tmp`. Shared by every worktree of the repository.
13
+ */
14
+ export declare class LocalObjects {
15
+ readonly root: string;
16
+ constructor(gitCommonDir: string);
17
+ static open(cwd: string): Promise<LocalObjects>;
18
+ path(oid: string): string;
19
+ /** True when the object is here with the expected size. */
20
+ has(oid: string, size: number): Promise<boolean>;
21
+ tempFile(): Promise<string>;
22
+ /** Reads a stream to the end, hashing it. */
23
+ spool(input: AsyncIterable<Buffer | Uint8Array>): Promise<Spooled>;
24
+ /** Moves spooled bytes into the store under their oid. */
25
+ adopt(spooled: Spooled): Promise<void>;
26
+ discard(spooled: Spooled): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lfs/store.ts"],"names":[],"mappings":"AAaA,oGAAoG;AACpG,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,YAAY,EAAE,MAAM;WAInB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAKrD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAKzB,2DAA2D;IACrD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQhD,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAMjC,6CAA6C;IACvC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAmCxE,0DAA0D;IACpD,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBtC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/C"}
@@ -0,0 +1,98 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { mkdir, open, rename, rm, stat, } from "node:fs/promises";
3
+ import { dirname, isAbsolute, join, resolve } from "node:path";
4
+ import { gitText } from "../git.js";
5
+ import { MAX_POINTER_SIZE } from "./pointer.js";
6
+ /**
7
+ * The local LFS object store, laid out like git-lfs: `.git/lfs/objects/<aa>/<bb>/<oid>`, with
8
+ * temporary files in `.git/lfs/tmp`. Shared by every worktree of the repository.
9
+ */
10
+ export class LocalObjects {
11
+ root;
12
+ constructor(gitCommonDir) {
13
+ this.root = join(gitCommonDir, "lfs");
14
+ }
15
+ static async open(cwd) {
16
+ const dir = await gitText(["rev-parse", "--git-common-dir"], { cwd });
17
+ return new LocalObjects(isAbsolute(dir) ? dir : resolve(cwd, dir));
18
+ }
19
+ path(oid) {
20
+ if (!/^[0-9a-f]{64}$/.test(oid))
21
+ throw new Error(`Invalid LFS oid: ${oid}`);
22
+ return join(this.root, "objects", oid.slice(0, 2), oid.slice(2, 4), oid);
23
+ }
24
+ /** True when the object is here with the expected size. */
25
+ async has(oid, size) {
26
+ try {
27
+ return (await stat(this.path(oid))).size === size;
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ }
33
+ async tempFile() {
34
+ const dir = join(this.root, "tmp");
35
+ await mkdir(dir, { recursive: true });
36
+ return join(dir, randomUUID());
37
+ }
38
+ /** Reads a stream to the end, hashing it. */
39
+ async spool(input) {
40
+ const hash = createHash("sha256");
41
+ const head = [];
42
+ let size = 0;
43
+ let file;
44
+ let handle;
45
+ try {
46
+ for await (const raw of input) {
47
+ const chunk = Buffer.from(raw);
48
+ hash.update(chunk);
49
+ size += chunk.length;
50
+ if (handle) {
51
+ await handle.write(chunk);
52
+ continue;
53
+ }
54
+ head.push(chunk);
55
+ if (size >= MAX_POINTER_SIZE) {
56
+ file = await this.tempFile();
57
+ handle = await open(file, "w");
58
+ await handle.write(Buffer.concat(head));
59
+ head.length = 0;
60
+ }
61
+ }
62
+ }
63
+ catch (error) {
64
+ await handle?.close();
65
+ if (file)
66
+ await rm(file, { force: true });
67
+ throw error;
68
+ }
69
+ await handle?.close();
70
+ const oid = hash.digest("hex");
71
+ return file
72
+ ? { oid, size, file }
73
+ : { oid, size, small: Buffer.concat(head) };
74
+ }
75
+ /** Moves spooled bytes into the store under their oid. */
76
+ async adopt(spooled) {
77
+ const target = this.path(spooled.oid);
78
+ await mkdir(dirname(target), { recursive: true });
79
+ if (spooled.file) {
80
+ await rename(spooled.file, target);
81
+ return;
82
+ }
83
+ const tmp = await this.tempFile();
84
+ const handle = await open(tmp, "w");
85
+ try {
86
+ await handle.write(spooled.small ?? Buffer.alloc(0));
87
+ }
88
+ finally {
89
+ await handle.close();
90
+ }
91
+ await rename(tmp, target);
92
+ }
93
+ async discard(spooled) {
94
+ if (spooled.file)
95
+ await rm(spooled.file, { force: true });
96
+ }
97
+ }
98
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/lfs/store.ts"],"names":[],"mappings":"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"}
package/dist/ops.d.ts ADDED
@@ -0,0 +1,39 @@
1
+ import { type ConfigureOptions } from "./configure.js";
2
+ /**
3
+ * What the CLI's `save`, `sync`, `status`, `history`, `restore` and revision commands do, with the
4
+ * git binary. Media goes through our LFS client (see `configureRepo`); nobody needs git-lfs.
5
+ */
6
+ export interface Identity {
7
+ name: string;
8
+ email: string;
9
+ }
10
+ /** The current branch. Throws `detached` when HEAD is not on a branch. */
11
+ export declare function currentBranch(dir: string): Promise<string>;
12
+ /** Uploads the LFS objects of commits the remote does not have yet. Returns how many were sent. */
13
+ export declare function uploadMedia(dir: string, refs?: string[]): Promise<number>;
14
+ export interface SaveResult {
15
+ /** False when there was nothing new to commit. */
16
+ committed: boolean;
17
+ branch: string;
18
+ sha: string;
19
+ /** False when the repository has no remote. */
20
+ pushed: boolean;
21
+ /** Media files uploaded. */
22
+ uploaded: number;
23
+ }
24
+ /** Stages everything, commits, uploads new media and pushes the current branch. */
25
+ export declare function save({ dir, message, author, }: {
26
+ dir: string;
27
+ message: string;
28
+ author?: Identity;
29
+ }): Promise<SaveResult>;
30
+ /**
31
+ * Clones a repository with our credential helper and LFS client from the start: clone without
32
+ * checkout, configure, then check out (media downloads through the smudge filter).
33
+ */
34
+ export declare function clone({ url, dir, branch, ...options }: {
35
+ url: string;
36
+ dir: string;
37
+ branch?: string;
38
+ } & ConfigureOptions): Promise<void>;
39
+ //# sourceMappingURL=ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAMxB;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AA2BD,0EAA0E;AAC1E,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE;AAED,mGAAmG;AACnG,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,MAAM,EAAa,GACxB,OAAO,CAAC,MAAM,CAAC,CASjB;AAmCD,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,mFAAmF;AACnF,wBAAsB,IAAI,CAAC,EACzB,GAAG,EACH,OAAO,EACP,MAAM,GACP,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB,GAAG,OAAO,CAAC,UAAU,CAAC,CAmCtB;AAED;;;GAGG;AACH,wBAAsB,KAAK,CAAC,EAC1B,GAAG,EACH,GAAG,EACH,MAAM,EACN,GAAG,OAAO,EACX,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCnC"}