@mhalle/vost 0.9.4 → 0.9.6

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.
@@ -42,33 +42,65 @@ export declare class GitStore {
42
42
  /**
43
43
  * Push all refs to url, creating an exact mirror.
44
44
  *
45
- * Remote-only refs are deleted.
45
+ * Remote-only refs are deleted (unless `refs` filtering is used).
46
+ * Supports HTTP URLs, local bare-repo paths, and `.bundle` files.
46
47
  *
47
- * @param url - Remote repository URL (HTTPS or local path).
48
- * @param opts.http - HTTP client (isomorphic-git compatible).
48
+ * @param url - Remote repository URL, local path, or bundle file path.
49
+ * @param opts.http - HTTP client (required for HTTP URLs only).
49
50
  * @param opts.dryRun - Compute diff without pushing.
50
51
  * @param opts.onAuth - Optional authentication callback.
52
+ * @param opts.refs - Only backup these refs (short names resolved automatically).
53
+ * @param opts.format - Force format: `'bundle'` for git bundle output.
51
54
  * @returns A MirrorDiff describing what changed (or would change).
52
55
  */
53
56
  backup(url: string, opts?: {
54
- http: HttpClient;
57
+ http?: HttpClient;
55
58
  dryRun?: boolean;
56
59
  onAuth?: Function;
60
+ refs?: string[];
61
+ format?: string;
57
62
  }): Promise<MirrorDiff>;
58
63
  /**
59
- * Fetch all refs from url, overwriting local state.
64
+ * Fetch refs from url additively into the local store.
60
65
  *
61
- * Local-only refs are deleted.
66
+ * Local-only refs are preserved (not deleted). All branches, tags,
67
+ * and notes from the source are merged in, but HEAD (the current
68
+ * branch pointer) is not changed — use
69
+ * `store.branches.setCurrent("name")` afterwards if needed.
62
70
  *
63
- * @param url - Remote repository URL (HTTPS or local path).
64
- * @param opts.http - HTTP client (isomorphic-git compatible).
71
+ * Supports HTTP URLs, local bare-repo paths, and `.bundle` files.
72
+ *
73
+ * @param url - Remote repository URL, local path, or bundle file path.
74
+ * @param opts.http - HTTP client (required for HTTP URLs only).
65
75
  * @param opts.dryRun - Compute diff without fetching.
66
76
  * @param opts.onAuth - Optional authentication callback.
77
+ * @param opts.refs - Only restore these refs (short names resolved automatically).
78
+ * @param opts.format - Force format: `'bundle'` for git bundle input.
67
79
  * @returns A MirrorDiff describing what changed (or would change).
68
80
  */
69
81
  restore(url: string, opts?: {
70
- http: HttpClient;
82
+ http?: HttpClient;
71
83
  dryRun?: boolean;
72
84
  onAuth?: Function;
85
+ refs?: string[];
86
+ format?: string;
73
87
  }): Promise<MirrorDiff>;
88
+ /**
89
+ * Export refs to a bundle file.
90
+ *
91
+ * @param path - Destination `.bundle` file path.
92
+ * @param opts.refs - Only export these refs (short names resolved automatically).
93
+ */
94
+ bundleExport(path: string, opts?: {
95
+ refs?: string[];
96
+ }): Promise<void>;
97
+ /**
98
+ * Import refs from a bundle file (additive — no deletes).
99
+ *
100
+ * @param path - Source `.bundle` file path.
101
+ * @param opts.refs - Only import these refs (short names resolved automatically).
102
+ */
103
+ bundleImport(path: string, opts?: {
104
+ refs?: string[];
105
+ }): Promise<void>;
74
106
  }
package/dist/gitstore.js CHANGED
@@ -101,12 +101,15 @@ export class GitStore {
101
101
  /**
102
102
  * Push all refs to url, creating an exact mirror.
103
103
  *
104
- * Remote-only refs are deleted.
104
+ * Remote-only refs are deleted (unless `refs` filtering is used).
105
+ * Supports HTTP URLs, local bare-repo paths, and `.bundle` files.
105
106
  *
106
- * @param url - Remote repository URL (HTTPS or local path).
107
- * @param opts.http - HTTP client (isomorphic-git compatible).
107
+ * @param url - Remote repository URL, local path, or bundle file path.
108
+ * @param opts.http - HTTP client (required for HTTP URLs only).
108
109
  * @param opts.dryRun - Compute diff without pushing.
109
110
  * @param opts.onAuth - Optional authentication callback.
111
+ * @param opts.refs - Only backup these refs (short names resolved automatically).
112
+ * @param opts.format - Force format: `'bundle'` for git bundle output.
110
113
  * @returns A MirrorDiff describing what changed (or would change).
111
114
  */
112
115
  async backup(url, opts = {}) {
@@ -114,19 +117,46 @@ export class GitStore {
114
117
  return backup(this, url, opts);
115
118
  }
116
119
  /**
117
- * Fetch all refs from url, overwriting local state.
120
+ * Fetch refs from url additively into the local store.
118
121
  *
119
- * Local-only refs are deleted.
122
+ * Local-only refs are preserved (not deleted). All branches, tags,
123
+ * and notes from the source are merged in, but HEAD (the current
124
+ * branch pointer) is not changed — use
125
+ * `store.branches.setCurrent("name")` afterwards if needed.
120
126
  *
121
- * @param url - Remote repository URL (HTTPS or local path).
122
- * @param opts.http - HTTP client (isomorphic-git compatible).
127
+ * Supports HTTP URLs, local bare-repo paths, and `.bundle` files.
128
+ *
129
+ * @param url - Remote repository URL, local path, or bundle file path.
130
+ * @param opts.http - HTTP client (required for HTTP URLs only).
123
131
  * @param opts.dryRun - Compute diff without fetching.
124
132
  * @param opts.onAuth - Optional authentication callback.
133
+ * @param opts.refs - Only restore these refs (short names resolved automatically).
134
+ * @param opts.format - Force format: `'bundle'` for git bundle input.
125
135
  * @returns A MirrorDiff describing what changed (or would change).
126
136
  */
127
137
  async restore(url, opts = {}) {
128
138
  const { restore } = await import('./mirror.js');
129
139
  return restore(this, url, opts);
130
140
  }
141
+ /**
142
+ * Export refs to a bundle file.
143
+ *
144
+ * @param path - Destination `.bundle` file path.
145
+ * @param opts.refs - Only export these refs (short names resolved automatically).
146
+ */
147
+ async bundleExport(path, opts = {}) {
148
+ const { bundleExport } = await import('./mirror.js');
149
+ return bundleExport(this, path, opts.refs);
150
+ }
151
+ /**
152
+ * Import refs from a bundle file (additive — no deletes).
153
+ *
154
+ * @param path - Source `.bundle` file path.
155
+ * @param opts.refs - Only import these refs (short names resolved automatically).
156
+ */
157
+ async bundleImport(path, opts = {}) {
158
+ const { bundleImport } = await import('./mirror.js');
159
+ return bundleImport(this, path, opts.refs);
160
+ }
131
161
  }
132
162
  //# sourceMappingURL=gitstore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gitstore.js","sourceRoot":"","sources":["../src/gitstore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gitstore.js","sourceRoot":"","sources":["../src/gitstore.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -30,7 +30,7 @@ export { FsWriter, BatchWriter } from './fileobj.js';
30
30
  export { RefDict } from './refdict.js';
31
31
  export { NoteDict, NoteNamespace, NotesBatch } from './notes.js';
32
32
  export { FileType, fileTypeFromMode, fileModeFromType, MODE_BLOB, MODE_BLOB_EXEC, MODE_LINK, MODE_TREE, GitStoreError, StaleSnapshotError, FileNotFoundError, IsADirectoryError, NotADirectoryError, PermissionError, KeyNotFoundError, KeyExistsError, InvalidRefNameError, InvalidPathError, BatchClosedError, type WalkEntry, type WriteEntry, type StatResult, type FileEntry, type ChangeAction, type ChangeError, type ChangeReport, type RefChange, type MirrorDiff, type CommitInfo, type ReflogEntry, type Signature, type FsModule, type HttpClient, emptyChangeReport, changeReportInSync, changeReportTotal, changeReportActions, mirrorDiffInSync, mirrorDiffTotal, } from './types.js';
33
- export { resolveCredentials } from './mirror.js';
33
+ export { resolveCredentials, bundleExport, bundleImport } from './mirror.js';
34
34
  export { diskGlob } from './copy.js';
35
35
  export { ExcludeFilter } from './exclude.js';
36
36
  export { normalizePath, validateRefName } from './paths.js';
package/dist/index.js CHANGED
@@ -41,7 +41,7 @@ emptyChangeReport, changeReportInSync, changeReportTotal, changeReportActions,
41
41
  // MirrorDiff helpers
42
42
  mirrorDiffInSync, mirrorDiffTotal, } from './types.js';
43
43
  // Mirror utilities
44
- export { resolveCredentials } from './mirror.js';
44
+ export { resolveCredentials, bundleExport, bundleImport } from './mirror.js';
45
45
  // Copy operations (usable standalone)
46
46
  export { diskGlob } from './copy.js';
47
47
  export { ExcludeFilter } from './exclude.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,eAAe;AACf,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjE,4BAA4B;AAC5B,OAAO;AACL,qBAAqB;AACrB,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,SAAS,EACT,SAAS;AAET,SAAS;AACT,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB;AAkBhB,uBAAuB;AACvB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB;AAEnB,qBAAqB;AACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,mBAAmB;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,sCAAsC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,eAAe;AACf,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjE,4BAA4B;AAC5B,OAAO;AACL,qBAAqB;AACrB,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,SAAS,EACT,SAAS;AAET,SAAS;AACT,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB;AAkBhB,uBAAuB;AACvB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB;AAEnB,qBAAqB;AACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,mBAAmB;AACnB,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7E,sCAAsC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
package/dist/mirror.d.ts CHANGED
@@ -2,10 +2,13 @@
2
2
  * Mirror (backup/restore) operations for vost.
3
3
  *
4
4
  * Uses isomorphic-git's push/fetch for HTTP transport.
5
+ * For local paths and bundles, shells out to the `git` CLI.
5
6
  * Each ref is pushed/fetched individually to achieve mirror semantics.
6
7
  */
7
8
  import type { MirrorDiff, HttpClient } from './types.js';
8
9
  import type { GitStore } from './gitstore.js';
10
+ export declare function bundleExport(store: GitStore, destPath: string, refs?: string[]): Promise<void>;
11
+ export declare function bundleImport(store: GitStore, bundlePath: string, refs?: string[]): Promise<void>;
9
12
  /**
10
13
  * Inject credentials into an HTTPS URL if available.
11
14
  *
@@ -23,31 +26,45 @@ import type { GitStore } from './gitstore.js';
23
26
  export declare function resolveCredentials(url: string): Promise<string>;
24
27
  /**
25
28
  * Push all local refs to url, creating an exact mirror.
26
- * Remote-only refs are deleted.
29
+ * Remote-only refs are deleted (unless `refs` filtering is used).
30
+ *
31
+ * Supports HTTP URLs (via isomorphic-git), local bare-repo paths
32
+ * (via `git` CLI), and `.bundle` files.
27
33
  *
28
34
  * @param store - The GitStore to backup from.
29
- * @param url - Remote repository URL (HTTPS or local path).
30
- * @param opts - Options: `http` client, `dryRun` to compute diff without pushing,
31
- * and optional `onAuth` callback for credentials.
35
+ * @param url - Remote repository URL, local path, or bundle file path.
36
+ * @param opts - Options: `http` client (required for HTTP URLs only),
37
+ * `dryRun` to compute diff without pushing, optional
38
+ * `onAuth` callback, `refs` to filter which refs to push,
39
+ * `format` to force bundle format.
32
40
  * @returns A {@link MirrorDiff} describing what changed (or would change).
33
41
  */
34
- export declare function backup(store: GitStore, url: string, opts: {
35
- http: HttpClient;
42
+ export declare function backup(store: GitStore, url: string, opts?: {
43
+ http?: HttpClient;
36
44
  dryRun?: boolean;
37
45
  onAuth?: Function;
46
+ refs?: string[];
47
+ format?: string;
38
48
  }): Promise<MirrorDiff>;
39
49
  /**
40
- * Fetch all remote refs from url, overwriting local state.
41
- * Local-only refs are deleted.
50
+ * Fetch refs from url additively into the local store.
51
+ * Local-only refs are preserved (not deleted).
52
+ *
53
+ * Supports HTTP URLs (via isomorphic-git), local bare-repo paths
54
+ * (via `git` CLI), and `.bundle` files.
42
55
  *
43
56
  * @param store - The GitStore to restore into.
44
- * @param url - Remote repository URL (HTTPS or local path).
45
- * @param opts - Options: `http` client, `dryRun` to compute diff without fetching,
46
- * and optional `onAuth` callback for credentials.
57
+ * @param url - Remote repository URL, local path, or bundle file path.
58
+ * @param opts - Options: `http` client (required for HTTP URLs only),
59
+ * `dryRun` to compute diff without fetching, optional
60
+ * `onAuth` callback, `refs` to filter which refs to pull,
61
+ * `format` to force bundle format.
47
62
  * @returns A {@link MirrorDiff} describing what changed (or would change).
48
63
  */
49
- export declare function restore(store: GitStore, url: string, opts: {
50
- http: HttpClient;
64
+ export declare function restore(store: GitStore, url: string, opts?: {
65
+ http?: HttpClient;
51
66
  dryRun?: boolean;
52
67
  onAuth?: Function;
68
+ refs?: string[];
69
+ format?: string;
53
70
  }): Promise<MirrorDiff>;
package/dist/mirror.js CHANGED
@@ -2,9 +2,421 @@
2
2
  * Mirror (backup/restore) operations for vost.
3
3
  *
4
4
  * Uses isomorphic-git's push/fetch for HTTP transport.
5
+ * For local paths and bundles, shells out to the `git` CLI.
5
6
  * Each ref is pushed/fetched individually to achieve mirror semantics.
6
7
  */
7
8
  import git from 'isomorphic-git';
9
+ // ---------------------------------------------------------------------------
10
+ // Helpers
11
+ // ---------------------------------------------------------------------------
12
+ function isBundlePath(path) {
13
+ return path.toLowerCase().endsWith('.bundle');
14
+ }
15
+ function resolveRefNames(names, available) {
16
+ const result = new Set();
17
+ for (const name of names) {
18
+ if (name.startsWith('refs/')) {
19
+ result.add(name);
20
+ continue;
21
+ }
22
+ let found = false;
23
+ for (const prefix of ['refs/heads/', 'refs/tags/', 'refs/notes/']) {
24
+ const candidate = `${prefix}${name}`;
25
+ if (available.has(candidate)) {
26
+ result.add(candidate);
27
+ found = true;
28
+ break;
29
+ }
30
+ }
31
+ if (!found) {
32
+ result.add(`refs/heads/${name}`);
33
+ }
34
+ }
35
+ return result;
36
+ }
37
+ function isLocalPath(url) {
38
+ return (!url.startsWith('http://') &&
39
+ !url.startsWith('https://') &&
40
+ !url.startsWith('git://') &&
41
+ !url.startsWith('ssh://'));
42
+ }
43
+ // ---------------------------------------------------------------------------
44
+ // Git CLI helpers (for local paths and bundles)
45
+ // ---------------------------------------------------------------------------
46
+ async function getLocalRefsGit(gitdir) {
47
+ const { execFileSync } = await import('node:child_process');
48
+ let output;
49
+ try {
50
+ output = execFileSync('git', ['for-each-ref', '--format=%(objectname) %(refname)'], { cwd: gitdir, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
51
+ }
52
+ catch {
53
+ return new Map();
54
+ }
55
+ const refs = new Map();
56
+ for (const line of output.trim().split('\n')) {
57
+ if (!line)
58
+ continue;
59
+ const space = line.indexOf(' ');
60
+ if (space < 0)
61
+ continue;
62
+ const sha = line.slice(0, space);
63
+ const name = line.slice(space + 1);
64
+ if (name === 'HEAD')
65
+ continue;
66
+ refs.set(name, sha);
67
+ }
68
+ return refs;
69
+ }
70
+ async function getLocalRefsNative(store) {
71
+ const fs = store._fsModule;
72
+ const gitdir = store._gitdir;
73
+ const refs = new Map();
74
+ // Branches
75
+ const branches = await git.listBranches({ fs, gitdir });
76
+ for (const branch of branches) {
77
+ const oid = await git.resolveRef({ fs, gitdir, ref: `refs/heads/${branch}` });
78
+ refs.set(`refs/heads/${branch}`, oid);
79
+ }
80
+ // Tags
81
+ const tags = await git.listTags({ fs, gitdir });
82
+ for (const tag of tags) {
83
+ const oid = await git.resolveRef({ fs, gitdir, ref: `refs/tags/${tag}` });
84
+ refs.set(`refs/tags/${tag}`, oid);
85
+ }
86
+ // Notes — no isomorphic-git API for listing note namespaces; read directory
87
+ const notesDir = `${gitdir}/refs/notes`;
88
+ try {
89
+ const entries = await fs.promises.readdir(notesDir);
90
+ for (const name of entries) {
91
+ const ref = `refs/notes/${name}`;
92
+ try {
93
+ const oid = await git.resolveRef({ fs, gitdir, ref });
94
+ refs.set(ref, oid);
95
+ }
96
+ catch {
97
+ // skip unresolvable entries
98
+ }
99
+ }
100
+ }
101
+ catch {
102
+ // refs/notes/ doesn't exist — no notes
103
+ }
104
+ return refs;
105
+ }
106
+ async function getRemoteRefsGit(gitdir, url) {
107
+ // For local paths, open directly
108
+ if (isLocalPath(url) || url.startsWith('file://')) {
109
+ const localPath = url.startsWith('file://') ? url.slice(7) : url;
110
+ const { existsSync } = await import('node:fs');
111
+ if (!existsSync(localPath))
112
+ return new Map();
113
+ return getLocalRefsGit(localPath);
114
+ }
115
+ // Remote URL
116
+ const { execFileSync } = await import('node:child_process');
117
+ let output;
118
+ try {
119
+ output = execFileSync('git', ['ls-remote', url], {
120
+ cwd: gitdir,
121
+ encoding: 'utf-8',
122
+ stdio: ['pipe', 'pipe', 'pipe'],
123
+ });
124
+ }
125
+ catch {
126
+ return new Map();
127
+ }
128
+ const refs = new Map();
129
+ for (const line of output.trim().split('\n')) {
130
+ if (!line)
131
+ continue;
132
+ const parts = line.split('\t');
133
+ if (parts.length < 2)
134
+ continue;
135
+ const [sha, name] = parts;
136
+ if (name === 'HEAD' || name.endsWith('^{}'))
137
+ continue;
138
+ refs.set(name, sha);
139
+ }
140
+ return refs;
141
+ }
142
+ // ---------------------------------------------------------------------------
143
+ // Object graph walker (for native bundle export)
144
+ // ---------------------------------------------------------------------------
145
+ async function collectReachableOids(fsModule, gitdir, startOids) {
146
+ const visited = new Set();
147
+ const queue = [...startOids];
148
+ while (queue.length > 0) {
149
+ const oid = queue.pop();
150
+ if (visited.has(oid))
151
+ continue;
152
+ visited.add(oid);
153
+ const obj = await git.readObject({ fs: fsModule, gitdir, oid, format: 'parsed' });
154
+ switch (obj.type) {
155
+ case 'commit': {
156
+ const commit = obj.object;
157
+ queue.push(commit.tree);
158
+ if (commit.parent) {
159
+ for (const p of commit.parent)
160
+ queue.push(p);
161
+ }
162
+ break;
163
+ }
164
+ case 'tree': {
165
+ const entries = obj.object;
166
+ for (const entry of entries) {
167
+ if (visited.has(entry.oid))
168
+ continue;
169
+ if (entry.type === 'blob') {
170
+ // Blobs are leaves — add to visited but don't read
171
+ visited.add(entry.oid);
172
+ }
173
+ else if (entry.type === 'tree') {
174
+ queue.push(entry.oid);
175
+ }
176
+ // skip 'commit' entries (submodules)
177
+ }
178
+ break;
179
+ }
180
+ case 'tag': {
181
+ const tag = obj.object;
182
+ queue.push(tag.object);
183
+ break;
184
+ }
185
+ // blob: leaf — no children
186
+ }
187
+ }
188
+ return visited;
189
+ }
190
+ function parseBundleHeader(data) {
191
+ // Find the blank line (\n\n) that separates header from packfile
192
+ let headerEnd = -1;
193
+ for (let i = 0; i < data.length - 1; i++) {
194
+ if (data[i] === 0x0a && data[i + 1] === 0x0a) {
195
+ headerEnd = i;
196
+ break;
197
+ }
198
+ }
199
+ if (headerEnd < 0) {
200
+ throw new Error('Invalid bundle: no header/packfile separator found');
201
+ }
202
+ const headerText = new TextDecoder().decode(data.subarray(0, headerEnd));
203
+ const lines = headerText.split('\n');
204
+ if (lines[0] !== '# v2 git bundle') {
205
+ throw new Error(`Invalid bundle signature: ${lines[0]}`);
206
+ }
207
+ const refs = new Map();
208
+ const prerequisites = [];
209
+ for (let i = 1; i < lines.length; i++) {
210
+ const line = lines[i];
211
+ if (!line)
212
+ continue;
213
+ if (line.startsWith('-')) {
214
+ prerequisites.push(line.slice(1));
215
+ continue;
216
+ }
217
+ const space = line.indexOf(' ');
218
+ if (space < 0)
219
+ continue;
220
+ const sha = line.slice(0, space);
221
+ const refName = line.slice(space + 1);
222
+ refs.set(refName, sha);
223
+ }
224
+ return { refs, prerequisites, packOffset: headerEnd + 2 };
225
+ }
226
+ // ---------------------------------------------------------------------------
227
+ // Bundle helpers (native — no git CLI)
228
+ // ---------------------------------------------------------------------------
229
+ export async function bundleExport(store, destPath, refs) {
230
+ const fsModule = store._fsModule;
231
+ const gitdir = store._gitdir;
232
+ // Get all local refs
233
+ const localRefs = await getLocalRefsNative(store);
234
+ // Filter if requested
235
+ let filtered;
236
+ if (refs && refs.length > 0) {
237
+ const resolved = resolveRefNames(refs, localRefs);
238
+ filtered = new Map();
239
+ for (const [k, v] of localRefs) {
240
+ if (resolved.has(k))
241
+ filtered.set(k, v);
242
+ }
243
+ }
244
+ else {
245
+ filtered = localRefs;
246
+ }
247
+ if (filtered.size === 0) {
248
+ throw new Error('Nothing to bundle: no matching refs');
249
+ }
250
+ // Collect all reachable OIDs
251
+ const startOids = [...new Set(filtered.values())];
252
+ const allOids = await collectReachableOids(fsModule, gitdir, startOids);
253
+ // Create packfile
254
+ const { packfile } = await git.packObjects({
255
+ fs: fsModule,
256
+ gitdir,
257
+ oids: [...allOids],
258
+ });
259
+ if (!packfile) {
260
+ throw new Error('packObjects returned no data');
261
+ }
262
+ // Build bundle v2 header
263
+ let header = '# v2 git bundle\n';
264
+ for (const [refName, sha] of filtered) {
265
+ header += `${sha} ${refName}\n`;
266
+ }
267
+ header += '\n';
268
+ // Concatenate header + packfile
269
+ const headerBytes = new TextEncoder().encode(header);
270
+ const bundle = new Uint8Array(headerBytes.length + packfile.length);
271
+ bundle.set(headerBytes, 0);
272
+ bundle.set(packfile, headerBytes.length);
273
+ await fsModule.promises.writeFile(destPath, bundle);
274
+ }
275
+ async function bundleListHeads(store, bundlePath) {
276
+ const raw = await store._fsModule.promises.readFile(bundlePath);
277
+ const data = raw instanceof Uint8Array ? raw : new TextEncoder().encode(raw);
278
+ const { refs } = parseBundleHeader(data);
279
+ return refs;
280
+ }
281
+ export async function bundleImport(store, bundlePath, refs) {
282
+ const fsModule = store._fsModule;
283
+ const gitdir = store._gitdir;
284
+ // Read bundle file
285
+ const raw = await fsModule.promises.readFile(bundlePath);
286
+ const data = raw instanceof Uint8Array ? raw : new TextEncoder().encode(raw);
287
+ const { refs: bundleRefs, packOffset } = parseBundleHeader(data);
288
+ // Extract packfile bytes
289
+ const packData = data.subarray(packOffset);
290
+ // Ensure objects/pack directory exists
291
+ const packDir = `${gitdir}/objects/pack`;
292
+ try {
293
+ await fsModule.promises.mkdir(packDir, { recursive: true });
294
+ }
295
+ catch {
296
+ // already exists
297
+ }
298
+ // Write packfile — use checksum from last 20 bytes for git-conventional naming
299
+ const checksum = Array.from(packData.subarray(-20))
300
+ .map((b) => b.toString(16).padStart(2, '0'))
301
+ .join('');
302
+ const packRelPath = `objects/pack/pack-${checksum}.pack`;
303
+ await fsModule.promises.writeFile(`${gitdir}/${packRelPath}`, packData);
304
+ // Index the packfile (creates .idx alongside .pack)
305
+ await git.indexPack({
306
+ fs: fsModule,
307
+ dir: gitdir,
308
+ gitdir,
309
+ filepath: packRelPath,
310
+ });
311
+ // Determine which refs to set
312
+ let refsToSet;
313
+ if (refs && refs.length > 0) {
314
+ const resolved = resolveRefNames(refs, bundleRefs);
315
+ refsToSet = new Map();
316
+ for (const [k, v] of bundleRefs) {
317
+ if (resolved.has(k))
318
+ refsToSet.set(k, v);
319
+ }
320
+ }
321
+ else {
322
+ refsToSet = bundleRefs;
323
+ }
324
+ // Set each ref
325
+ for (const [ref, oid] of refsToSet) {
326
+ await git.writeRef({
327
+ fs: fsModule,
328
+ gitdir,
329
+ ref,
330
+ value: oid,
331
+ force: true,
332
+ });
333
+ }
334
+ }
335
+ // ---------------------------------------------------------------------------
336
+ // Transport helpers (git CLI for local paths)
337
+ // ---------------------------------------------------------------------------
338
+ async function autoCreateBareRepo(url) {
339
+ if (!isLocalPath(url))
340
+ return;
341
+ const localPath = url.startsWith('file://') ? url.slice(7) : url;
342
+ const { existsSync } = await import('node:fs');
343
+ if (existsSync(localPath))
344
+ return;
345
+ const { execFileSync } = await import('node:child_process');
346
+ execFileSync('git', ['init', '--bare', localPath], {
347
+ encoding: 'utf-8',
348
+ stdio: ['pipe', 'pipe', 'pipe'],
349
+ });
350
+ }
351
+ async function mirrorPushGit(gitdir, url) {
352
+ const { execFileSync } = await import('node:child_process');
353
+ execFileSync('git', ['-C', gitdir, 'push', '--mirror', url], {
354
+ encoding: 'utf-8',
355
+ stdio: ['pipe', 'pipe', 'pipe'],
356
+ timeout: 60000,
357
+ });
358
+ }
359
+ async function targetedPushGit(gitdir, url, refFilter) {
360
+ const { execFileSync } = await import('node:child_process');
361
+ const refspecs = [...refFilter].map((r) => `+${r}:${r}`);
362
+ execFileSync('git', ['-C', gitdir, 'push', url, ...refspecs], {
363
+ encoding: 'utf-8',
364
+ stdio: ['pipe', 'pipe', 'pipe'],
365
+ timeout: 60000,
366
+ });
367
+ }
368
+ async function additiveFetchGit(gitdir, url, refs) {
369
+ const remoteRefs = await getRemoteRefsGit(gitdir, url);
370
+ if (remoteRefs.size === 0)
371
+ return;
372
+ let refsToFetch;
373
+ if (refs && refs.length > 0) {
374
+ const resolved = resolveRefNames(refs, remoteRefs);
375
+ refsToFetch = new Map();
376
+ for (const [k, v] of remoteRefs) {
377
+ if (resolved.has(k))
378
+ refsToFetch.set(k, v);
379
+ }
380
+ }
381
+ else {
382
+ refsToFetch = remoteRefs;
383
+ }
384
+ if (refsToFetch.size === 0)
385
+ return;
386
+ const { execFileSync } = await import('node:child_process');
387
+ const refspecs = [...refsToFetch.keys()].map((r) => `+${r}:${r}`);
388
+ execFileSync('git', ['-C', gitdir, 'fetch', url, ...refspecs, '--force'], {
389
+ encoding: 'utf-8',
390
+ stdio: ['pipe', 'pipe', 'pipe'],
391
+ timeout: 60000,
392
+ });
393
+ // No deletes — additive
394
+ }
395
+ // ---------------------------------------------------------------------------
396
+ // Diff computation
397
+ // ---------------------------------------------------------------------------
398
+ function diffRefsMap(src, dest) {
399
+ const add = [];
400
+ const update = [];
401
+ const del = [];
402
+ for (const [ref, sha] of src) {
403
+ if (!dest.has(ref)) {
404
+ add.push({ ref, newTarget: sha });
405
+ }
406
+ else if (dest.get(ref) !== sha) {
407
+ update.push({ ref, oldTarget: dest.get(ref), newTarget: sha });
408
+ }
409
+ }
410
+ for (const [ref] of dest) {
411
+ if (!src.has(ref)) {
412
+ del.push({ ref, oldTarget: dest.get(ref) });
413
+ }
414
+ }
415
+ return { add, update, delete: del };
416
+ }
417
+ // ---------------------------------------------------------------------------
418
+ // Credentials
419
+ // ---------------------------------------------------------------------------
8
420
  /**
9
421
  * Inject credentials into an HTTPS URL if available.
10
422
  *
@@ -76,17 +488,81 @@ export async function resolveCredentials(url) {
76
488
  }
77
489
  return url;
78
490
  }
491
+ // ---------------------------------------------------------------------------
492
+ // backup
493
+ // ---------------------------------------------------------------------------
79
494
  /**
80
495
  * Push all local refs to url, creating an exact mirror.
81
- * Remote-only refs are deleted.
496
+ * Remote-only refs are deleted (unless `refs` filtering is used).
497
+ *
498
+ * Supports HTTP URLs (via isomorphic-git), local bare-repo paths
499
+ * (via `git` CLI), and `.bundle` files.
82
500
  *
83
501
  * @param store - The GitStore to backup from.
84
- * @param url - Remote repository URL (HTTPS or local path).
85
- * @param opts - Options: `http` client, `dryRun` to compute diff without pushing,
86
- * and optional `onAuth` callback for credentials.
502
+ * @param url - Remote repository URL, local path, or bundle file path.
503
+ * @param opts - Options: `http` client (required for HTTP URLs only),
504
+ * `dryRun` to compute diff without pushing, optional
505
+ * `onAuth` callback, `refs` to filter which refs to push,
506
+ * `format` to force bundle format.
87
507
  * @returns A {@link MirrorDiff} describing what changed (or would change).
88
508
  */
89
- export async function backup(store, url, opts) {
509
+ export async function backup(store, url, opts = {}) {
510
+ const useBundle = opts.format === 'bundle' || isBundlePath(url);
511
+ const gitdir = store._gitdir;
512
+ if (useBundle) {
513
+ // Bundle export
514
+ const localRefs = await getLocalRefsNative(store);
515
+ let filtered;
516
+ if (opts.refs && opts.refs.length > 0) {
517
+ const resolved = resolveRefNames(opts.refs, localRefs);
518
+ filtered = new Map();
519
+ for (const [k, v] of localRefs) {
520
+ if (resolved.has(k))
521
+ filtered.set(k, v);
522
+ }
523
+ }
524
+ else {
525
+ filtered = localRefs;
526
+ }
527
+ // All refs are "add" for bundle export
528
+ const add = [];
529
+ for (const [ref, sha] of filtered) {
530
+ add.push({ ref, newTarget: sha });
531
+ }
532
+ const diff = { add, update: [], delete: [] };
533
+ if (!opts.dryRun) {
534
+ await bundleExport(store, url, opts.refs);
535
+ }
536
+ return diff;
537
+ }
538
+ // Non-bundle: local path or HTTP URL
539
+ const useGit = isLocalPath(url) || url.startsWith('file://');
540
+ if (useGit) {
541
+ await autoCreateBareRepo(url);
542
+ const localRefs = await getLocalRefsGit(gitdir);
543
+ const remoteRefs = await getRemoteRefsGit(gitdir, url);
544
+ if (opts.refs && opts.refs.length > 0) {
545
+ const refSet = resolveRefNames(opts.refs, localRefs);
546
+ const diff = diffRefsMap(localRefs, remoteRefs);
547
+ diff.add = diff.add.filter((r) => refSet.has(r.ref));
548
+ diff.update = diff.update.filter((r) => refSet.has(r.ref));
549
+ diff.delete = []; // no deletes with --ref
550
+ if (!opts.dryRun && (diff.add.length || diff.update.length)) {
551
+ await targetedPushGit(gitdir, url, refSet);
552
+ }
553
+ return diff;
554
+ }
555
+ const diff = diffRefsMap(localRefs, remoteRefs);
556
+ if (!opts.dryRun &&
557
+ (diff.add.length || diff.update.length || diff.delete.length)) {
558
+ await mirrorPushGit(gitdir, url);
559
+ }
560
+ return diff;
561
+ }
562
+ // HTTP URL — use existing isomorphic-git path
563
+ if (!opts.http) {
564
+ throw new Error('http client required for HTTP URLs');
565
+ }
90
566
  const diff = await diffRefs(store, url, 'push', opts);
91
567
  if (!opts.dryRun) {
92
568
  // Push all local branches
@@ -137,18 +613,84 @@ export async function backup(store, url, opts) {
137
613
  }
138
614
  return diff;
139
615
  }
616
+ // ---------------------------------------------------------------------------
617
+ // restore
618
+ // ---------------------------------------------------------------------------
140
619
  /**
141
- * Fetch all remote refs from url, overwriting local state.
142
- * Local-only refs are deleted.
620
+ * Fetch refs from url additively into the local store.
621
+ * Local-only refs are preserved (not deleted).
622
+ *
623
+ * Supports HTTP URLs (via isomorphic-git), local bare-repo paths
624
+ * (via `git` CLI), and `.bundle` files.
143
625
  *
144
626
  * @param store - The GitStore to restore into.
145
- * @param url - Remote repository URL (HTTPS or local path).
146
- * @param opts - Options: `http` client, `dryRun` to compute diff without fetching,
147
- * and optional `onAuth` callback for credentials.
627
+ * @param url - Remote repository URL, local path, or bundle file path.
628
+ * @param opts - Options: `http` client (required for HTTP URLs only),
629
+ * `dryRun` to compute diff without fetching, optional
630
+ * `onAuth` callback, `refs` to filter which refs to pull,
631
+ * `format` to force bundle format.
148
632
  * @returns A {@link MirrorDiff} describing what changed (or would change).
149
633
  */
150
- export async function restore(store, url, opts) {
634
+ export async function restore(store, url, opts = {}) {
635
+ const useBundle = opts.format === 'bundle' || isBundlePath(url);
636
+ const gitdir = store._gitdir;
637
+ if (useBundle) {
638
+ // Bundle import
639
+ const bundleRefs = await bundleListHeads(store, url);
640
+ let filtered;
641
+ if (opts.refs && opts.refs.length > 0) {
642
+ const resolved = resolveRefNames(opts.refs, bundleRefs);
643
+ filtered = new Map();
644
+ for (const [k, v] of bundleRefs) {
645
+ if (resolved.has(k))
646
+ filtered.set(k, v);
647
+ }
648
+ }
649
+ else {
650
+ filtered = bundleRefs;
651
+ }
652
+ const localRefs = await getLocalRefsNative(store);
653
+ const diff = diffRefsMap(filtered, localRefs);
654
+ diff.delete = []; // additive: no deletes
655
+ if (!opts.dryRun) {
656
+ await bundleImport(store, url, opts.refs);
657
+ }
658
+ return diff;
659
+ }
660
+ // Non-bundle: local path or HTTP URL
661
+ const useGit = isLocalPath(url) || url.startsWith('file://');
662
+ if (useGit) {
663
+ const localRefs = await getLocalRefsGit(gitdir);
664
+ const remoteRefs = await getRemoteRefsGit(gitdir, url);
665
+ const diff = diffRefsMap(remoteRefs, localRefs);
666
+ if (opts.refs && opts.refs.length > 0) {
667
+ const refSet = resolveRefNames(opts.refs, remoteRefs);
668
+ diff.add = diff.add.filter((r) => refSet.has(r.ref));
669
+ diff.update = diff.update.filter((r) => refSet.has(r.ref));
670
+ }
671
+ diff.delete = []; // additive: never delete
672
+ if (!opts.dryRun && (diff.add.length || diff.update.length)) {
673
+ await additiveFetchGit(gitdir, url, opts.refs);
674
+ }
675
+ return diff;
676
+ }
677
+ // HTTP URL — use existing isomorphic-git path, but make additive
678
+ if (!opts.http) {
679
+ throw new Error('http client required for HTTP URLs');
680
+ }
151
681
  const diff = await diffRefs(store, url, 'pull', opts);
682
+ if (opts.refs && opts.refs.length > 0) {
683
+ // Build available refs set from the remote
684
+ const remoteRefMap = new Map();
685
+ for (const rc of [...diff.add, ...diff.update]) {
686
+ if (rc.newTarget)
687
+ remoteRefMap.set(rc.ref, rc.newTarget);
688
+ }
689
+ const refSet = resolveRefNames(opts.refs, remoteRefMap);
690
+ diff.add = diff.add.filter((r) => refSet.has(r.ref));
691
+ diff.update = diff.update.filter((r) => refSet.has(r.ref));
692
+ }
693
+ diff.delete = []; // additive: never delete
152
694
  if (!opts.dryRun) {
153
695
  // Fetch all remote refs
154
696
  await git.fetch({
@@ -160,7 +702,7 @@ export async function restore(store, url, opts) {
160
702
  prune: true,
161
703
  onAuth: opts.onAuth,
162
704
  });
163
- // Update local refs to match remote
705
+ // Update local refs to match remote (only set, don't delete)
164
706
  const remoteRefs = await git.listServerRefs({
165
707
  http: opts.http,
166
708
  url,
@@ -172,8 +714,20 @@ export async function restore(store, url, opts) {
172
714
  remoteRefMap.set(ref.ref, ref.oid);
173
715
  }
174
716
  }
175
- // Set local refs to match remote
176
- for (const [ref, oid] of remoteRefMap) {
717
+ let refsToSet;
718
+ if (opts.refs && opts.refs.length > 0) {
719
+ const refSet = resolveRefNames(opts.refs, remoteRefMap);
720
+ refsToSet = new Map();
721
+ for (const [k, v] of remoteRefMap) {
722
+ if (refSet.has(k))
723
+ refsToSet.set(k, v);
724
+ }
725
+ }
726
+ else {
727
+ refsToSet = remoteRefMap;
728
+ }
729
+ // Set local refs (NO deletes — additive)
730
+ for (const [ref, oid] of refsToSet) {
177
731
  await git.writeRef({
178
732
  fs: store._fsModule,
179
733
  gitdir: store._gitdir,
@@ -182,32 +736,14 @@ export async function restore(store, url, opts) {
182
736
  force: true,
183
737
  });
184
738
  }
185
- // Delete local refs not on remote
186
- const localBranches = await store.branches.list();
187
- for (const branch of localBranches) {
188
- if (!remoteRefMap.has(`refs/heads/${branch}`)) {
189
- await git.deleteRef({
190
- fs: store._fsModule,
191
- gitdir: store._gitdir,
192
- ref: `refs/heads/${branch}`,
193
- });
194
- }
195
- }
196
- const localTags = await store.tags.list();
197
- for (const tag of localTags) {
198
- if (!remoteRefMap.has(`refs/tags/${tag}`)) {
199
- await git.deleteRef({
200
- fs: store._fsModule,
201
- gitdir: store._gitdir,
202
- ref: `refs/tags/${tag}`,
203
- });
204
- }
205
- }
206
739
  }
207
740
  return diff;
208
741
  }
742
+ // ---------------------------------------------------------------------------
743
+ // diffRefs (isomorphic-git HTTP path)
744
+ // ---------------------------------------------------------------------------
209
745
  /**
210
- * Compare local and remote refs.
746
+ * Compare local and remote refs via isomorphic-git (HTTP transport).
211
747
  */
212
748
  async function diffRefs(store, url, direction, opts) {
213
749
  // Get remote refs
@@ -249,22 +785,6 @@ async function diffRefs(store, url, direction, opts) {
249
785
  localRefs.set(`refs/tags/${tag}`, oid);
250
786
  }
251
787
  const [src, dest] = direction === 'push' ? [localRefs, remoteRefs] : [remoteRefs, localRefs];
252
- const add = [];
253
- const update = [];
254
- const del = [];
255
- for (const [ref, sha] of src) {
256
- if (!dest.has(ref)) {
257
- add.push({ ref, newTarget: sha });
258
- }
259
- else if (dest.get(ref) !== sha) {
260
- update.push({ ref, oldTarget: dest.get(ref), newTarget: sha });
261
- }
262
- }
263
- for (const [ref] of dest) {
264
- if (!src.has(ref)) {
265
- del.push({ ref, oldTarget: dest.get(ref) });
266
- }
267
- }
268
- return { add, update, delete: del };
788
+ return diffRefsMap(src, dest);
269
789
  }
270
790
  //# sourceMappingURL=mirror.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mirror.js","sourceRoot":"","sources":["../src/mirror.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mirror.js","sourceRoot":"","sources":["../src/mirror.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mhalle/vost",
3
- "version": "0.9.4",
3
+ "version": "0.9.6",
4
4
  "description": "A versioned filesystem backed by a bare git repository",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",