@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.
- package/dist/gitstore.d.ts +41 -9
- package/dist/gitstore.js +37 -7
- package/dist/gitstore.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mirror.d.ts +30 -13
- package/dist/mirror.js +573 -53
- package/dist/mirror.js.map +1 -1
- package/package.json +1 -1
package/dist/gitstore.d.ts
CHANGED
|
@@ -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
|
|
48
|
-
* @param opts.http - HTTP client (
|
|
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
|
|
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
|
|
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
|
-
*
|
|
64
|
-
*
|
|
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
|
|
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
|
|
107
|
-
* @param opts.http - HTTP client (
|
|
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
|
|
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
|
-
*
|
|
122
|
-
*
|
|
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
|
package/dist/gitstore.js.map
CHANGED
|
@@ -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;
|
|
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
|
|
30
|
-
* @param opts - Options: `http` client
|
|
31
|
-
*
|
|
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
|
|
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
|
|
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
|
|
45
|
-
* @param opts - Options: `http` client
|
|
46
|
-
*
|
|
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
|
|
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
|
|
85
|
-
* @param opts - Options: `http` client
|
|
86
|
-
*
|
|
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
|
|
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
|
|
146
|
-
* @param opts - Options: `http` client
|
|
147
|
-
*
|
|
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
|
-
|
|
176
|
-
|
|
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
|
-
|
|
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
|
package/dist/mirror.js.map
CHANGED
|
@@ -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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"}
|