gitx.do 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +156 -0
- package/dist/durable-object/object-store.d.ts +113 -0
- package/dist/durable-object/object-store.d.ts.map +1 -0
- package/dist/durable-object/object-store.js +387 -0
- package/dist/durable-object/object-store.js.map +1 -0
- package/dist/durable-object/schema.d.ts +17 -0
- package/dist/durable-object/schema.d.ts.map +1 -0
- package/dist/durable-object/schema.js +43 -0
- package/dist/durable-object/schema.js.map +1 -0
- package/dist/durable-object/wal.d.ts +111 -0
- package/dist/durable-object/wal.d.ts.map +1 -0
- package/dist/durable-object/wal.js +200 -0
- package/dist/durable-object/wal.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/adapter.d.ts +231 -0
- package/dist/mcp/adapter.d.ts.map +1 -0
- package/dist/mcp/adapter.js +502 -0
- package/dist/mcp/adapter.js.map +1 -0
- package/dist/mcp/sandbox.d.ts +261 -0
- package/dist/mcp/sandbox.d.ts.map +1 -0
- package/dist/mcp/sandbox.js +983 -0
- package/dist/mcp/sandbox.js.map +1 -0
- package/dist/mcp/sdk-adapter.d.ts +413 -0
- package/dist/mcp/sdk-adapter.d.ts.map +1 -0
- package/dist/mcp/sdk-adapter.js +672 -0
- package/dist/mcp/sdk-adapter.js.map +1 -0
- package/dist/mcp/tools.d.ts +133 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +1604 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/ops/blame.d.ts +148 -0
- package/dist/ops/blame.d.ts.map +1 -0
- package/dist/ops/blame.js +754 -0
- package/dist/ops/blame.js.map +1 -0
- package/dist/ops/branch.d.ts +215 -0
- package/dist/ops/branch.d.ts.map +1 -0
- package/dist/ops/branch.js +608 -0
- package/dist/ops/branch.js.map +1 -0
- package/dist/ops/commit-traversal.d.ts +209 -0
- package/dist/ops/commit-traversal.d.ts.map +1 -0
- package/dist/ops/commit-traversal.js +755 -0
- package/dist/ops/commit-traversal.js.map +1 -0
- package/dist/ops/commit.d.ts +221 -0
- package/dist/ops/commit.d.ts.map +1 -0
- package/dist/ops/commit.js +606 -0
- package/dist/ops/commit.js.map +1 -0
- package/dist/ops/merge-base.d.ts +223 -0
- package/dist/ops/merge-base.d.ts.map +1 -0
- package/dist/ops/merge-base.js +581 -0
- package/dist/ops/merge-base.js.map +1 -0
- package/dist/ops/merge.d.ts +385 -0
- package/dist/ops/merge.d.ts.map +1 -0
- package/dist/ops/merge.js +1203 -0
- package/dist/ops/merge.js.map +1 -0
- package/dist/ops/tag.d.ts +182 -0
- package/dist/ops/tag.d.ts.map +1 -0
- package/dist/ops/tag.js +608 -0
- package/dist/ops/tag.js.map +1 -0
- package/dist/ops/tree-builder.d.ts +82 -0
- package/dist/ops/tree-builder.d.ts.map +1 -0
- package/dist/ops/tree-builder.js +246 -0
- package/dist/ops/tree-builder.js.map +1 -0
- package/dist/ops/tree-diff.d.ts +243 -0
- package/dist/ops/tree-diff.d.ts.map +1 -0
- package/dist/ops/tree-diff.js +657 -0
- package/dist/ops/tree-diff.js.map +1 -0
- package/dist/pack/delta.d.ts +68 -0
- package/dist/pack/delta.d.ts.map +1 -0
- package/dist/pack/delta.js +343 -0
- package/dist/pack/delta.js.map +1 -0
- package/dist/pack/format.d.ts +84 -0
- package/dist/pack/format.d.ts.map +1 -0
- package/dist/pack/format.js +261 -0
- package/dist/pack/format.js.map +1 -0
- package/dist/pack/full-generation.d.ts +327 -0
- package/dist/pack/full-generation.d.ts.map +1 -0
- package/dist/pack/full-generation.js +1159 -0
- package/dist/pack/full-generation.js.map +1 -0
- package/dist/pack/generation.d.ts +118 -0
- package/dist/pack/generation.d.ts.map +1 -0
- package/dist/pack/generation.js +459 -0
- package/dist/pack/generation.js.map +1 -0
- package/dist/pack/index.d.ts +181 -0
- package/dist/pack/index.d.ts.map +1 -0
- package/dist/pack/index.js +552 -0
- package/dist/pack/index.js.map +1 -0
- package/dist/refs/branch.d.ts +224 -0
- package/dist/refs/branch.d.ts.map +1 -0
- package/dist/refs/branch.js +170 -0
- package/dist/refs/branch.js.map +1 -0
- package/dist/refs/storage.d.ts +208 -0
- package/dist/refs/storage.d.ts.map +1 -0
- package/dist/refs/storage.js +421 -0
- package/dist/refs/storage.js.map +1 -0
- package/dist/refs/tag.d.ts +230 -0
- package/dist/refs/tag.d.ts.map +1 -0
- package/dist/refs/tag.js +188 -0
- package/dist/refs/tag.js.map +1 -0
- package/dist/storage/lru-cache.d.ts +188 -0
- package/dist/storage/lru-cache.d.ts.map +1 -0
- package/dist/storage/lru-cache.js +410 -0
- package/dist/storage/lru-cache.js.map +1 -0
- package/dist/storage/object-index.d.ts +140 -0
- package/dist/storage/object-index.d.ts.map +1 -0
- package/dist/storage/object-index.js +166 -0
- package/dist/storage/object-index.js.map +1 -0
- package/dist/storage/r2-pack.d.ts +394 -0
- package/dist/storage/r2-pack.d.ts.map +1 -0
- package/dist/storage/r2-pack.js +1062 -0
- package/dist/storage/r2-pack.js.map +1 -0
- package/dist/tiered/cdc-pipeline.d.ts +316 -0
- package/dist/tiered/cdc-pipeline.d.ts.map +1 -0
- package/dist/tiered/cdc-pipeline.js +771 -0
- package/dist/tiered/cdc-pipeline.js.map +1 -0
- package/dist/tiered/migration.d.ts +242 -0
- package/dist/tiered/migration.d.ts.map +1 -0
- package/dist/tiered/migration.js +592 -0
- package/dist/tiered/migration.js.map +1 -0
- package/dist/tiered/parquet-writer.d.ts +248 -0
- package/dist/tiered/parquet-writer.d.ts.map +1 -0
- package/dist/tiered/parquet-writer.js +555 -0
- package/dist/tiered/parquet-writer.js.map +1 -0
- package/dist/tiered/read-path.d.ts +141 -0
- package/dist/tiered/read-path.d.ts.map +1 -0
- package/dist/tiered/read-path.js +204 -0
- package/dist/tiered/read-path.js.map +1 -0
- package/dist/types/objects.d.ts +53 -0
- package/dist/types/objects.d.ts.map +1 -0
- package/dist/types/objects.js +291 -0
- package/dist/types/objects.js.map +1 -0
- package/dist/types/storage.d.ts +117 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +8 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/utils/hash.d.ts +31 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +60 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/sha1.d.ts +26 -0
- package/dist/utils/sha1.d.ts.map +1 -0
- package/dist/utils/sha1.js +127 -0
- package/dist/utils/sha1.js.map +1 -0
- package/dist/wire/capabilities.d.ts +236 -0
- package/dist/wire/capabilities.d.ts.map +1 -0
- package/dist/wire/capabilities.js +437 -0
- package/dist/wire/capabilities.js.map +1 -0
- package/dist/wire/pkt-line.d.ts +67 -0
- package/dist/wire/pkt-line.d.ts.map +1 -0
- package/dist/wire/pkt-line.js +145 -0
- package/dist/wire/pkt-line.js.map +1 -0
- package/dist/wire/receive-pack.d.ts +302 -0
- package/dist/wire/receive-pack.d.ts.map +1 -0
- package/dist/wire/receive-pack.js +885 -0
- package/dist/wire/receive-pack.js.map +1 -0
- package/dist/wire/smart-http.d.ts +321 -0
- package/dist/wire/smart-http.d.ts.map +1 -0
- package/dist/wire/smart-http.js +654 -0
- package/dist/wire/smart-http.js.map +1 -0
- package/dist/wire/upload-pack.d.ts +333 -0
- package/dist/wire/upload-pack.d.ts.map +1 -0
- package/dist/wire/upload-pack.js +850 -0
- package/dist/wire/upload-pack.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Reference Storage
|
|
3
|
+
*
|
|
4
|
+
* Handles storage and resolution of Git refs (branches, tags, HEAD).
|
|
5
|
+
* Supports both loose refs and packed refs formats.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Error thrown when a ref operation fails
|
|
9
|
+
*/
|
|
10
|
+
export class RefError extends Error {
|
|
11
|
+
code;
|
|
12
|
+
refName;
|
|
13
|
+
constructor(message, code, refName) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.code = code;
|
|
16
|
+
this.refName = refName;
|
|
17
|
+
this.name = 'RefError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Validate a ref name according to Git rules
|
|
22
|
+
* See: https://git-scm.com/docs/git-check-ref-format
|
|
23
|
+
*/
|
|
24
|
+
export function isValidRefName(name) {
|
|
25
|
+
// HEAD is always valid
|
|
26
|
+
if (name === 'HEAD') {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
// Just @ is invalid
|
|
30
|
+
if (name === '@') {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
// Cannot be empty
|
|
34
|
+
if (!name || name.length === 0) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
// Cannot end with /
|
|
38
|
+
if (name.endsWith('/')) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
// Cannot end with .lock
|
|
42
|
+
if (name.endsWith('.lock')) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
// Cannot contain @{
|
|
46
|
+
if (name.includes('@{')) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
// Cannot contain ..
|
|
50
|
+
if (name.includes('..')) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
// Cannot contain control characters (ASCII 0-31), space, ~, ^, :, ?, *, [, \
|
|
54
|
+
const invalidChars = /[\x00-\x1f\x7f ~^:?*[\]\\]/;
|
|
55
|
+
if (invalidChars.test(name)) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
// Split into components and check each
|
|
59
|
+
const components = name.split('/');
|
|
60
|
+
for (const component of components) {
|
|
61
|
+
// Cannot have empty components (// in path)
|
|
62
|
+
if (component.length === 0) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
// Cannot start with .
|
|
66
|
+
if (component.startsWith('.')) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
// Cannot end with .
|
|
70
|
+
if (component.endsWith('.')) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Validate a SHA-1 hash
|
|
78
|
+
*/
|
|
79
|
+
export function isValidSha(sha) {
|
|
80
|
+
// Must be exactly 40 characters
|
|
81
|
+
if (!sha || sha.length !== 40) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
// Must be valid hex
|
|
85
|
+
return /^[0-9a-fA-F]{40}$/.test(sha);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Parse a ref file content
|
|
89
|
+
*/
|
|
90
|
+
export function parseRefContent(content) {
|
|
91
|
+
const trimmed = content.trim();
|
|
92
|
+
// Check for symbolic ref (starts with "ref:")
|
|
93
|
+
if (trimmed.startsWith('ref:')) {
|
|
94
|
+
const target = trimmed.slice(4).trim();
|
|
95
|
+
return { type: 'symbolic', target };
|
|
96
|
+
}
|
|
97
|
+
// Otherwise it's a direct ref (SHA)
|
|
98
|
+
return { type: 'direct', target: trimmed };
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Serialize a ref to file content
|
|
102
|
+
*/
|
|
103
|
+
export function serializeRefContent(ref) {
|
|
104
|
+
if (ref.type === 'symbolic') {
|
|
105
|
+
return `ref: ${ref.target}\n`;
|
|
106
|
+
}
|
|
107
|
+
return `${ref.target}\n`;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Parse packed-refs file content
|
|
111
|
+
*/
|
|
112
|
+
export function parsePackedRefs(content) {
|
|
113
|
+
const refs = new Map();
|
|
114
|
+
if (!content) {
|
|
115
|
+
return refs;
|
|
116
|
+
}
|
|
117
|
+
const lines = content.split(/\r?\n/);
|
|
118
|
+
for (const line of lines) {
|
|
119
|
+
const trimmed = line.trim();
|
|
120
|
+
// Skip empty lines
|
|
121
|
+
if (!trimmed) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
// Skip comment lines
|
|
125
|
+
if (trimmed.startsWith('#')) {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
// Skip peeled entries (lines starting with ^)
|
|
129
|
+
if (trimmed.startsWith('^')) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
// Parse "sha refname" format
|
|
133
|
+
const spaceIndex = trimmed.indexOf(' ');
|
|
134
|
+
if (spaceIndex > 0) {
|
|
135
|
+
const sha = trimmed.slice(0, spaceIndex);
|
|
136
|
+
const refName = trimmed.slice(spaceIndex + 1);
|
|
137
|
+
refs.set(refName, sha);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return refs;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Serialize refs to packed-refs format
|
|
144
|
+
*/
|
|
145
|
+
export function serializePackedRefs(refs) {
|
|
146
|
+
const lines = ['# pack-refs with: peeled fully-peeled sorted'];
|
|
147
|
+
// Sort refs alphabetically
|
|
148
|
+
const sortedRefs = Array.from(refs.entries()).sort((a, b) => a[0].localeCompare(b[0]));
|
|
149
|
+
for (const [refName, sha] of sortedRefs) {
|
|
150
|
+
lines.push(`${sha} ${refName}`);
|
|
151
|
+
}
|
|
152
|
+
return lines.join('\n') + '\n';
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Ref storage implementation
|
|
156
|
+
*/
|
|
157
|
+
export class RefStorage {
|
|
158
|
+
backend;
|
|
159
|
+
constructor(backend) {
|
|
160
|
+
this.backend = backend;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get a ref by name
|
|
164
|
+
*/
|
|
165
|
+
async getRef(name) {
|
|
166
|
+
if (!this.backend.readRef) {
|
|
167
|
+
throw new Error('Backend does not support readRef');
|
|
168
|
+
}
|
|
169
|
+
return this.backend.readRef(name);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Resolve a ref to its final SHA target
|
|
173
|
+
*/
|
|
174
|
+
async resolveRef(name, options) {
|
|
175
|
+
const maxDepth = options?.maxDepth ?? 10;
|
|
176
|
+
const chain = [];
|
|
177
|
+
const visited = new Set();
|
|
178
|
+
let currentName = name;
|
|
179
|
+
let ref = null;
|
|
180
|
+
for (let depth = 0; depth < maxDepth; depth++) {
|
|
181
|
+
// Check for circular refs
|
|
182
|
+
if (visited.has(currentName)) {
|
|
183
|
+
throw new RefError(`Circular reference detected: ${currentName}`, 'CIRCULAR_REF', currentName);
|
|
184
|
+
}
|
|
185
|
+
visited.add(currentName);
|
|
186
|
+
ref = await this.getRef(currentName);
|
|
187
|
+
if (!ref) {
|
|
188
|
+
throw new RefError(`Ref not found: ${currentName}`, 'NOT_FOUND', currentName);
|
|
189
|
+
}
|
|
190
|
+
chain.push(ref);
|
|
191
|
+
// If it's a direct ref, we're done
|
|
192
|
+
if (ref.type === 'direct') {
|
|
193
|
+
return {
|
|
194
|
+
ref: chain[0],
|
|
195
|
+
sha: ref.target,
|
|
196
|
+
chain
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
// Follow symbolic ref
|
|
200
|
+
currentName = ref.target;
|
|
201
|
+
}
|
|
202
|
+
// Max depth exceeded
|
|
203
|
+
throw new RefError(`Max ref resolution depth exceeded: ${maxDepth}`, 'MAX_DEPTH_EXCEEDED', name);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Update or create a ref
|
|
207
|
+
*
|
|
208
|
+
* Note: For atomic operations, callers can acquire a lock via acquireLock()
|
|
209
|
+
* and pass it via options.lock to avoid double-locking.
|
|
210
|
+
*/
|
|
211
|
+
async updateRef(name, target, options) {
|
|
212
|
+
// Validate ref name
|
|
213
|
+
if (!isValidRefName(name)) {
|
|
214
|
+
throw new RefError(`Invalid ref name: ${name}`, 'INVALID_NAME', name);
|
|
215
|
+
}
|
|
216
|
+
// Validate SHA
|
|
217
|
+
if (!isValidSha(target)) {
|
|
218
|
+
throw new RefError(`Invalid SHA: ${target}`, 'INVALID_SHA', name);
|
|
219
|
+
}
|
|
220
|
+
// Use provided lock or acquire a new one
|
|
221
|
+
const externalLock = options?.lock;
|
|
222
|
+
const lock = externalLock ?? await this.backend.acquireLock(name);
|
|
223
|
+
try {
|
|
224
|
+
const existingRef = await this.getRef(name);
|
|
225
|
+
// Handle oldValue check (CAS - compare and swap)
|
|
226
|
+
if (options?.oldValue !== undefined) {
|
|
227
|
+
if (options.oldValue === null) {
|
|
228
|
+
// Expect ref to NOT exist
|
|
229
|
+
if (existingRef) {
|
|
230
|
+
throw new RefError(`Ref already exists: ${name}`, 'ALREADY_EXISTS', name);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
// Expect ref to have specific value
|
|
235
|
+
if (!existingRef || existingRef.target !== options.oldValue) {
|
|
236
|
+
throw new RefError(`Ref value mismatch: ${name}`, 'CONFLICT', name);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else if (!options?.force && !options?.create && !existingRef) {
|
|
241
|
+
// If not forcing and not creating, ref must exist
|
|
242
|
+
throw new RefError(`Ref not found: ${name}`, 'NOT_FOUND', name);
|
|
243
|
+
}
|
|
244
|
+
const ref = {
|
|
245
|
+
name,
|
|
246
|
+
target,
|
|
247
|
+
type: 'direct'
|
|
248
|
+
};
|
|
249
|
+
await this.backend.writeRef(ref);
|
|
250
|
+
return ref;
|
|
251
|
+
}
|
|
252
|
+
finally {
|
|
253
|
+
// Only release lock if we acquired it ourselves
|
|
254
|
+
if (!externalLock) {
|
|
255
|
+
await lock.release();
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Delete a ref
|
|
261
|
+
*/
|
|
262
|
+
async deleteRef(name, options) {
|
|
263
|
+
// Cannot delete HEAD
|
|
264
|
+
if (name === 'HEAD') {
|
|
265
|
+
throw new RefError('Cannot delete HEAD', 'INVALID_NAME', name);
|
|
266
|
+
}
|
|
267
|
+
// Validate ref name
|
|
268
|
+
if (!isValidRefName(name)) {
|
|
269
|
+
throw new RefError(`Invalid ref name: ${name}`, 'INVALID_NAME', name);
|
|
270
|
+
}
|
|
271
|
+
const existingRef = await this.getRef(name);
|
|
272
|
+
// Check oldValue if provided
|
|
273
|
+
if (options?.oldValue !== undefined && options.oldValue !== null) {
|
|
274
|
+
if (!existingRef || existingRef.target !== options.oldValue) {
|
|
275
|
+
throw new RefError(`Ref value mismatch: ${name}`, 'CONFLICT', name);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (!existingRef) {
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
return this.backend.deleteRef(name);
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* List refs matching a pattern
|
|
285
|
+
*/
|
|
286
|
+
async listRefs(options) {
|
|
287
|
+
let refs = await this.backend.listRefs(options?.pattern);
|
|
288
|
+
// Filter out HEAD unless explicitly requested
|
|
289
|
+
if (!options?.includeHead) {
|
|
290
|
+
refs = refs.filter(r => r.name !== 'HEAD');
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
// If includeHead is true, make sure HEAD is in the list
|
|
294
|
+
const hasHead = refs.some(r => r.name === 'HEAD');
|
|
295
|
+
if (!hasHead) {
|
|
296
|
+
const head = await this.getRef('HEAD');
|
|
297
|
+
if (head) {
|
|
298
|
+
refs = [head, ...refs];
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Filter symbolic refs unless requested
|
|
303
|
+
// Note: Always keep HEAD if includeHead is true, regardless of includeSymbolic
|
|
304
|
+
if (!options?.includeSymbolic) {
|
|
305
|
+
refs = refs.filter(r => r.type !== 'symbolic' || (options?.includeHead && r.name === 'HEAD'));
|
|
306
|
+
}
|
|
307
|
+
return refs;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* List all branches
|
|
311
|
+
*/
|
|
312
|
+
async listBranches() {
|
|
313
|
+
return this.listRefs({ pattern: 'refs/heads/*' });
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* List all tags
|
|
317
|
+
*/
|
|
318
|
+
async listTags() {
|
|
319
|
+
return this.listRefs({ pattern: 'refs/tags/*' });
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Get HEAD ref
|
|
323
|
+
*/
|
|
324
|
+
async getHead() {
|
|
325
|
+
const head = await this.getRef('HEAD');
|
|
326
|
+
if (!head) {
|
|
327
|
+
throw new RefError('HEAD not found', 'NOT_FOUND', 'HEAD');
|
|
328
|
+
}
|
|
329
|
+
return head;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Update HEAD (can be symbolic or detached)
|
|
333
|
+
*/
|
|
334
|
+
async updateHead(target, symbolic) {
|
|
335
|
+
const ref = {
|
|
336
|
+
name: 'HEAD',
|
|
337
|
+
target,
|
|
338
|
+
type: symbolic ? 'symbolic' : 'direct'
|
|
339
|
+
};
|
|
340
|
+
await this.backend.writeRef(ref);
|
|
341
|
+
return ref;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Check if HEAD is detached
|
|
345
|
+
*/
|
|
346
|
+
async isHeadDetached() {
|
|
347
|
+
const head = await this.getHead();
|
|
348
|
+
return head.type === 'direct';
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Create a symbolic ref
|
|
352
|
+
*/
|
|
353
|
+
async createSymbolicRef(name, target) {
|
|
354
|
+
// Validate ref name
|
|
355
|
+
if (!isValidRefName(name)) {
|
|
356
|
+
throw new RefError(`Invalid ref name: ${name}`, 'INVALID_NAME', name);
|
|
357
|
+
}
|
|
358
|
+
// Cannot point to itself
|
|
359
|
+
if (name === target) {
|
|
360
|
+
throw new RefError(`Symbolic ref cannot point to itself: ${name}`, 'CIRCULAR_REF', name);
|
|
361
|
+
}
|
|
362
|
+
const ref = {
|
|
363
|
+
name,
|
|
364
|
+
target,
|
|
365
|
+
type: 'symbolic'
|
|
366
|
+
};
|
|
367
|
+
await this.backend.writeRef(ref);
|
|
368
|
+
return ref;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Acquire a lock for updating a ref
|
|
372
|
+
*/
|
|
373
|
+
async acquireLock(name, timeout) {
|
|
374
|
+
return this.backend.acquireLock(name, timeout);
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Pack loose refs into packed-refs file
|
|
378
|
+
*/
|
|
379
|
+
async packRefs() {
|
|
380
|
+
const allRefs = await this.backend.listRefs();
|
|
381
|
+
const packed = new Map();
|
|
382
|
+
for (const ref of allRefs) {
|
|
383
|
+
// Don't pack HEAD
|
|
384
|
+
if (ref.name === 'HEAD') {
|
|
385
|
+
continue;
|
|
386
|
+
}
|
|
387
|
+
// Don't pack symbolic refs
|
|
388
|
+
if (ref.type === 'symbolic') {
|
|
389
|
+
continue;
|
|
390
|
+
}
|
|
391
|
+
packed.set(ref.name, ref.target);
|
|
392
|
+
}
|
|
393
|
+
await this.backend.writePackedRefs(packed);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Resolve a ref to its final SHA target (convenience function)
|
|
398
|
+
*/
|
|
399
|
+
export async function resolveRef(storage, name, options) {
|
|
400
|
+
const resolved = await storage.resolveRef(name, options);
|
|
401
|
+
return resolved.sha;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Update a ref (convenience function)
|
|
405
|
+
*/
|
|
406
|
+
export async function updateRef(storage, name, target, options) {
|
|
407
|
+
return storage.updateRef(name, target, options);
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Delete a ref (convenience function)
|
|
411
|
+
*/
|
|
412
|
+
export async function deleteRef(storage, name, options) {
|
|
413
|
+
return storage.deleteRef(name, options);
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* List refs (convenience function)
|
|
417
|
+
*/
|
|
418
|
+
export async function listRefs(storage, options) {
|
|
419
|
+
return storage.listRefs(options);
|
|
420
|
+
}
|
|
421
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/refs/storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiEH;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGf;IACA;IAHlB,YACE,OAAe,EACC,IAAkB,EAClB,OAAgB;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAAc;QAClB,YAAO,GAAP,OAAO,CAAS;QAGhC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;IACxB,CAAC;CACF;AA4CD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,uBAAuB;IACvB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,wBAAwB;IACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,6EAA6E;IAC7E,MAAM,YAAY,GAAG,4BAA4B,CAAA;IACjD,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,uCAAuC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAClC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,4CAA4C;QAC5C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAA;QACd,CAAC;QACD,sBAAsB;QACtB,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAA;QACd,CAAC;QACD,oBAAoB;QACpB,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,gCAAgC;IAChC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IACD,oBAAoB;IACpB,OAAO,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAE9B,8CAA8C;IAC9C,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACtC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;IACrC,CAAC;IAED,oCAAoC;IACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAQ;IAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAA;IAC/B,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,MAAM,IAAI,CAAA;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAE3B,mBAAmB;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAQ;QACV,CAAC;QAED,qBAAqB;QACrB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,SAAQ;QACV,CAAC;QAED,8CAA8C;QAC9C,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,SAAQ;QACV,CAAC;QAED,6BAA6B;QAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;YACxC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;YAC7C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAyB;IAC3D,MAAM,KAAK,GAAa,CAAC,8CAA8C,CAAC,CAAA;IAExE,2BAA2B;IAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEtF,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,UAAU;IACD;IAApB,YAAoB,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;IAElD;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QACrD,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,OAA2B;QACxD,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAA;QACxC,MAAM,KAAK,GAAU,EAAE,CAAA;QACvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;QAEjC,IAAI,WAAW,GAAG,IAAI,CAAA;QACtB,IAAI,GAAG,GAAe,IAAI,CAAA;QAE1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;YAC9C,0BAA0B;YAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,QAAQ,CAAC,gCAAgC,WAAW,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,CAAA;YAChG,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAExB,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;YAEpC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,QAAQ,CAAC,kBAAkB,WAAW,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;YAC/E,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAEf,mCAAmC;YACnC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO;oBACL,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;oBACb,GAAG,EAAE,GAAG,CAAC,MAAM;oBACf,KAAK;iBACN,CAAA;YACH,CAAC;YAED,sBAAsB;YACtB,WAAW,GAAG,GAAG,CAAC,MAAM,CAAA;QAC1B,CAAC;QAED,qBAAqB;QACrB,MAAM,IAAI,QAAQ,CAAC,sCAAsC,QAAQ,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAA;IAClG,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,MAAc,EAAE,OAA0B;QACtE,oBAAoB;QACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,QAAQ,CAAC,qBAAqB,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,CAAA;QACvE,CAAC;QAED,eAAe;QACf,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,QAAQ,CAAC,gBAAgB,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;QACnE,CAAC;QAED,yCAAyC;QACzC,MAAM,YAAY,GAAG,OAAO,EAAE,IAAI,CAAA;QAClC,MAAM,IAAI,GAAG,YAAY,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAEjE,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAE3C,iDAAiD;YACjD,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACpC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAC9B,0BAA0B;oBAC1B,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,IAAI,QAAQ,CAAC,uBAAuB,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAA;oBAC3E,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,oCAAoC;oBACpC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;wBAC5D,MAAM,IAAI,QAAQ,CAAC,uBAAuB,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;oBACrE,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC/D,kDAAkD;gBAClD,MAAM,IAAI,QAAQ,CAAC,kBAAkB,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;YACjE,CAAC;YAED,MAAM,GAAG,GAAQ;gBACf,IAAI;gBACJ,MAAM;gBACN,IAAI,EAAE,QAAQ;aACf,CAAA;YAED,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;YAChC,OAAO,GAAG,CAAA;QACZ,CAAC;gBAAS,CAAC;YACT,gDAAgD;YAChD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,OAA0B;QACtD,qBAAqB;QACrB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,cAAc,EAAE,IAAI,CAAC,CAAA;QAChE,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,QAAQ,CAAC,qBAAqB,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,CAAA;QACvE,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAE3C,6BAA6B;QAC7B,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACjE,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5D,MAAM,IAAI,QAAQ,CAAC,uBAAuB,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;YACrE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAyB;QACtC,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAExD,8CAA8C;QAC9C,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;YAC1B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;QAC5C,CAAC;aAAM,CAAC;YACN,wDAAwD;YACxD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;YACjD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gBACtC,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,+EAA+E;QAC/E,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAA;QAC/F,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAA;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QAC3D,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,QAAkB;QACjD,MAAM,GAAG,GAAQ;YACf,IAAI,EAAE,MAAM;YACZ,MAAM;YACN,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;SACvC,CAAA;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAChC,OAAO,GAAG,CAAA;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACjC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,IAAY,EAAE,MAAc;QAClD,oBAAoB;QACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,QAAQ,CAAC,qBAAqB,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,CAAA;QACvE,CAAC;QAED,yBAAyB;QACzB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,QAAQ,CAAC,wCAAwC,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,CAAA;QAC1F,CAAC;QAED,MAAM,GAAG,GAAQ;YACf,IAAI;YACJ,MAAM;YACN,IAAI,EAAE,UAAU;SACjB,CAAA;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAChC,OAAO,GAAG,CAAA;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,OAAgB;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;QAC7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;QAExC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,kBAAkB;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxB,SAAQ;YACV,CAAC;YAED,2BAA2B;YAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5B,SAAQ;YACV,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QAClC,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;IAC5C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAmB,EACnB,IAAY,EACZ,OAA2B;IAE3B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACxD,OAAO,QAAQ,CAAC,GAAG,CAAA;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAmB,EACnB,IAAY,EACZ,MAAc,EACd,OAA0B;IAE1B,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAmB,EACnB,IAAY,EACZ,OAA0B;IAE1B,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAmB,EACnB,OAAyB;IAEzB,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AAClC,CAAC"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Tag Operations
|
|
3
|
+
*
|
|
4
|
+
* Handles creation, deletion, and management of Git tags.
|
|
5
|
+
* Supports both lightweight tags (refs pointing to commits)
|
|
6
|
+
* and annotated tags (tag objects with metadata).
|
|
7
|
+
*/
|
|
8
|
+
import { Author, TagObject, ObjectType } from '../types/objects';
|
|
9
|
+
import { RefStorage, RefErrorCode } from './storage';
|
|
10
|
+
/**
|
|
11
|
+
* Tag type discriminator
|
|
12
|
+
*/
|
|
13
|
+
export type TagType = 'lightweight' | 'annotated';
|
|
14
|
+
/**
|
|
15
|
+
* Represents a Git tag (either lightweight or annotated)
|
|
16
|
+
*/
|
|
17
|
+
export interface Tag {
|
|
18
|
+
/** Tag name (e.g., 'v1.0.0') */
|
|
19
|
+
name: string;
|
|
20
|
+
/** Tag type */
|
|
21
|
+
type: TagType;
|
|
22
|
+
/** Target SHA - for lightweight: commit SHA, for annotated: tag object SHA */
|
|
23
|
+
sha: string;
|
|
24
|
+
/** For annotated tags: the commit/object the tag points to */
|
|
25
|
+
targetSha?: string;
|
|
26
|
+
/** For annotated tags: the type of object being tagged */
|
|
27
|
+
targetType?: ObjectType;
|
|
28
|
+
/** For annotated tags: the tagger information */
|
|
29
|
+
tagger?: Author;
|
|
30
|
+
/** For annotated tags: the tag message */
|
|
31
|
+
message?: string;
|
|
32
|
+
/** For annotated tags with GPG signature */
|
|
33
|
+
signature?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Options for creating a tag
|
|
37
|
+
*/
|
|
38
|
+
export interface CreateTagOptions {
|
|
39
|
+
/** Create an annotated tag (default: false for lightweight) */
|
|
40
|
+
annotated?: boolean;
|
|
41
|
+
/** Tag message (required for annotated tags) */
|
|
42
|
+
message?: string;
|
|
43
|
+
/** Tagger information (defaults to configured user) */
|
|
44
|
+
tagger?: Author;
|
|
45
|
+
/** Sign the tag with GPG */
|
|
46
|
+
sign?: boolean;
|
|
47
|
+
/** GPG key ID to use for signing */
|
|
48
|
+
keyId?: string;
|
|
49
|
+
/** Force overwrite if tag exists */
|
|
50
|
+
force?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Options for listing tags
|
|
54
|
+
*/
|
|
55
|
+
export interface ListTagsOptions {
|
|
56
|
+
/** Pattern to filter tags (glob-like, e.g., 'v1.*') */
|
|
57
|
+
pattern?: string;
|
|
58
|
+
/** Sort order: 'name' | 'version' | 'date' */
|
|
59
|
+
sort?: 'name' | 'version' | 'date';
|
|
60
|
+
/** Sort direction */
|
|
61
|
+
sortDirection?: 'asc' | 'desc';
|
|
62
|
+
/** Maximum number of tags to return */
|
|
63
|
+
limit?: number;
|
|
64
|
+
/** Include annotated tag metadata */
|
|
65
|
+
includeMetadata?: boolean;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Options for deleting a tag
|
|
69
|
+
*/
|
|
70
|
+
export interface DeleteTagOptions {
|
|
71
|
+
/** Delete even if tag doesn't exist locally */
|
|
72
|
+
force?: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Options for getting a tag
|
|
76
|
+
*/
|
|
77
|
+
export interface GetTagOptions {
|
|
78
|
+
/** Resolve to get full annotated tag info */
|
|
79
|
+
resolve?: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Result of tag signature verification
|
|
83
|
+
*/
|
|
84
|
+
export interface TagSignatureVerification {
|
|
85
|
+
/** Whether the signature is valid */
|
|
86
|
+
valid: boolean;
|
|
87
|
+
/** GPG key ID used for signing */
|
|
88
|
+
keyId?: string;
|
|
89
|
+
/** Signer identity */
|
|
90
|
+
signer?: string;
|
|
91
|
+
/** Trust level of the key */
|
|
92
|
+
trustLevel?: 'ultimate' | 'full' | 'marginal' | 'never' | 'undefined' | 'expired' | 'unknown';
|
|
93
|
+
/** Error message if verification failed */
|
|
94
|
+
error?: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Error codes specific to tag operations
|
|
98
|
+
*/
|
|
99
|
+
export type TagErrorCode = RefErrorCode | 'TAG_EXISTS' | 'TAG_NOT_FOUND' | 'INVALID_TAG_NAME' | 'MESSAGE_REQUIRED' | 'GPG_ERROR';
|
|
100
|
+
/**
|
|
101
|
+
* Error thrown when a tag operation fails
|
|
102
|
+
*/
|
|
103
|
+
export declare class TagError extends Error {
|
|
104
|
+
readonly code: TagErrorCode;
|
|
105
|
+
readonly tagName?: string | undefined;
|
|
106
|
+
constructor(message: string, code: TagErrorCode, tagName?: string | undefined);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Storage backend interface for tag objects
|
|
110
|
+
*/
|
|
111
|
+
export interface TagObjectStorage {
|
|
112
|
+
/** Read a tag object by SHA */
|
|
113
|
+
readTagObject(sha: string): Promise<TagObject | null>;
|
|
114
|
+
/** Write a tag object and return its SHA */
|
|
115
|
+
writeTagObject(tag: Omit<TagObject, 'type' | 'data'>): Promise<string>;
|
|
116
|
+
/** Read any object to determine its type */
|
|
117
|
+
readObjectType(sha: string): Promise<ObjectType | null>;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* GPG signing interface
|
|
121
|
+
*/
|
|
122
|
+
export interface GPGSigner {
|
|
123
|
+
/** Sign data and return the signature */
|
|
124
|
+
sign(data: Uint8Array, keyId?: string): Promise<string>;
|
|
125
|
+
/** Verify a signature */
|
|
126
|
+
verify(data: Uint8Array, signature: string): Promise<TagSignatureVerification>;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Tag manager for handling Git tag operations
|
|
130
|
+
*/
|
|
131
|
+
export declare class TagManager {
|
|
132
|
+
constructor(refStorage: RefStorage, objectStorage: TagObjectStorage, gpgSigner?: GPGSigner);
|
|
133
|
+
/**
|
|
134
|
+
* Create a new tag
|
|
135
|
+
*/
|
|
136
|
+
createTag(_name: string, _target: string, _options?: CreateTagOptions): Promise<Tag>;
|
|
137
|
+
/**
|
|
138
|
+
* Delete a tag
|
|
139
|
+
*/
|
|
140
|
+
deleteTag(_name: string, _options?: DeleteTagOptions): Promise<boolean>;
|
|
141
|
+
/**
|
|
142
|
+
* List all tags
|
|
143
|
+
*/
|
|
144
|
+
listTags(_options?: ListTagsOptions): Promise<Tag[]>;
|
|
145
|
+
/**
|
|
146
|
+
* Get a tag by name
|
|
147
|
+
*/
|
|
148
|
+
getTag(_name: string, _options?: GetTagOptions): Promise<Tag | null>;
|
|
149
|
+
/**
|
|
150
|
+
* Check if a tag exists
|
|
151
|
+
*/
|
|
152
|
+
tagExists(_name: string): Promise<boolean>;
|
|
153
|
+
/**
|
|
154
|
+
* Get the target (commit SHA) that a tag points to
|
|
155
|
+
*/
|
|
156
|
+
getTagTarget(_name: string): Promise<string>;
|
|
157
|
+
/**
|
|
158
|
+
* Verify a tag's GPG signature
|
|
159
|
+
*/
|
|
160
|
+
verifyTag(_name: string): Promise<TagSignatureVerification>;
|
|
161
|
+
/**
|
|
162
|
+
* Check if a tag is annotated
|
|
163
|
+
*/
|
|
164
|
+
isAnnotatedTag(_name: string): Promise<boolean>;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Validate a tag name according to Git rules
|
|
168
|
+
* Similar to ref name rules but with tag-specific constraints
|
|
169
|
+
*/
|
|
170
|
+
export declare function isValidTagName(_name: string): boolean;
|
|
171
|
+
/**
|
|
172
|
+
* Check if a string is a valid annotated tag (has tag object)
|
|
173
|
+
*/
|
|
174
|
+
export declare function isAnnotatedTag(_tag: Tag): _tag is Tag & {
|
|
175
|
+
type: 'annotated';
|
|
176
|
+
tagger: Author;
|
|
177
|
+
message: string;
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* Format a tag message (handle line endings, etc.)
|
|
181
|
+
*/
|
|
182
|
+
export declare function formatTagMessage(_message: string): string;
|
|
183
|
+
/**
|
|
184
|
+
* Parse a tag message from raw content
|
|
185
|
+
*/
|
|
186
|
+
export declare function parseTagMessage(_content: string): {
|
|
187
|
+
message: string;
|
|
188
|
+
signature?: string;
|
|
189
|
+
};
|
|
190
|
+
/**
|
|
191
|
+
* Create a lightweight tag pointing to a commit
|
|
192
|
+
*/
|
|
193
|
+
export declare function createTag(_manager: TagManager, _name: string, _target: string, _options?: CreateTagOptions): Promise<Tag>;
|
|
194
|
+
/**
|
|
195
|
+
* Create an annotated tag with message
|
|
196
|
+
*/
|
|
197
|
+
export declare function createAnnotatedTag(_manager: TagManager, _name: string, _target: string, _message: string, _tagger: Author, _options?: Omit<CreateTagOptions, 'annotated' | 'message' | 'tagger'>): Promise<Tag>;
|
|
198
|
+
/**
|
|
199
|
+
* Delete a tag
|
|
200
|
+
*/
|
|
201
|
+
export declare function deleteTag(_manager: TagManager, _name: string, _options?: DeleteTagOptions): Promise<boolean>;
|
|
202
|
+
/**
|
|
203
|
+
* List all tags
|
|
204
|
+
*/
|
|
205
|
+
export declare function listTags(_manager: TagManager, _options?: ListTagsOptions): Promise<Tag[]>;
|
|
206
|
+
/**
|
|
207
|
+
* Get a tag by name
|
|
208
|
+
*/
|
|
209
|
+
export declare function getTag(_manager: TagManager, _name: string, _options?: GetTagOptions): Promise<Tag | null>;
|
|
210
|
+
/**
|
|
211
|
+
* Check if a tag is an annotated tag
|
|
212
|
+
*/
|
|
213
|
+
export declare function checkIsAnnotatedTag(_manager: TagManager, _name: string): Promise<boolean>;
|
|
214
|
+
/**
|
|
215
|
+
* Verify a tag's signature
|
|
216
|
+
*/
|
|
217
|
+
export declare function verifyTagSignature(_manager: TagManager, _name: string): Promise<TagSignatureVerification>;
|
|
218
|
+
/**
|
|
219
|
+
* Get the target commit SHA for a tag
|
|
220
|
+
*/
|
|
221
|
+
export declare function getTagTarget(_manager: TagManager, _name: string): Promise<string>;
|
|
222
|
+
/**
|
|
223
|
+
* Sort tags by semantic version
|
|
224
|
+
*/
|
|
225
|
+
export declare function sortTagsByVersion(_tags: Tag[], _direction?: 'asc' | 'desc'): Tag[];
|
|
226
|
+
/**
|
|
227
|
+
* Filter tags by glob pattern
|
|
228
|
+
*/
|
|
229
|
+
export declare function filterTagsByPattern(_tags: Tag[], _pattern: string): Tag[];
|
|
230
|
+
//# sourceMappingURL=tag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/refs/tag.ts"],"names":[],"mappings":"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"}
|