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,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Branch Operations
|
|
3
|
+
*
|
|
4
|
+
* Handles branch creation, deletion, renaming, listing, and tracking.
|
|
5
|
+
* Works with the RefStorage system for underlying ref management.
|
|
6
|
+
*/
|
|
7
|
+
import { RefStorage } from './storage';
|
|
8
|
+
/**
|
|
9
|
+
* Branch tracking information
|
|
10
|
+
*/
|
|
11
|
+
export interface BranchTrackingInfo {
|
|
12
|
+
/** Remote name (e.g., 'origin') */
|
|
13
|
+
remote: string;
|
|
14
|
+
/** Remote branch name (e.g., 'refs/remotes/origin/main') */
|
|
15
|
+
remoteBranch: string;
|
|
16
|
+
/** Number of commits ahead of upstream */
|
|
17
|
+
ahead: number;
|
|
18
|
+
/** Number of commits behind upstream */
|
|
19
|
+
behind: number;
|
|
20
|
+
/** Whether the branch is gone from remote */
|
|
21
|
+
gone: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Branch information
|
|
25
|
+
*/
|
|
26
|
+
export interface Branch {
|
|
27
|
+
/** Short branch name (e.g., 'main', 'feature/foo') */
|
|
28
|
+
name: string;
|
|
29
|
+
/** Full ref name (e.g., 'refs/heads/main') */
|
|
30
|
+
ref: string;
|
|
31
|
+
/** SHA-1 of the commit this branch points to */
|
|
32
|
+
sha: string;
|
|
33
|
+
/** Whether this is the current branch (HEAD points to it) */
|
|
34
|
+
isCurrent: boolean;
|
|
35
|
+
/** Whether this is a remote tracking branch */
|
|
36
|
+
isRemote: boolean;
|
|
37
|
+
/** Tracking information if the branch tracks an upstream */
|
|
38
|
+
tracking?: BranchTrackingInfo;
|
|
39
|
+
/** Last commit message (optional) */
|
|
40
|
+
lastCommitMessage?: string;
|
|
41
|
+
/** Last commit author (optional) */
|
|
42
|
+
lastCommitAuthor?: string;
|
|
43
|
+
/** Last commit date (optional) */
|
|
44
|
+
lastCommitDate?: Date;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Options for creating a branch
|
|
48
|
+
*/
|
|
49
|
+
export interface CreateBranchOptions {
|
|
50
|
+
/** Start point (SHA, branch name, or ref) - defaults to HEAD */
|
|
51
|
+
startPoint?: string;
|
|
52
|
+
/** Force creation even if branch exists (overwrite) */
|
|
53
|
+
force?: boolean;
|
|
54
|
+
/** Set up tracking for the new branch */
|
|
55
|
+
track?: boolean | string;
|
|
56
|
+
/** Don't actually create the branch, just validate */
|
|
57
|
+
dryRun?: boolean;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Options for deleting a branch
|
|
61
|
+
*/
|
|
62
|
+
export interface DeleteBranchOptions {
|
|
63
|
+
/** Force delete even if not fully merged */
|
|
64
|
+
force?: boolean;
|
|
65
|
+
/** Remote branch to delete (for remote tracking branches) */
|
|
66
|
+
remote?: string;
|
|
67
|
+
/** Don't actually delete, just validate */
|
|
68
|
+
dryRun?: boolean;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Options for renaming a branch
|
|
72
|
+
*/
|
|
73
|
+
export interface RenameBranchOptions {
|
|
74
|
+
/** Force rename even if target exists (overwrite) */
|
|
75
|
+
force?: boolean;
|
|
76
|
+
/** Don't actually rename, just validate */
|
|
77
|
+
dryRun?: boolean;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Options for listing branches
|
|
81
|
+
*/
|
|
82
|
+
export interface ListBranchesOptions {
|
|
83
|
+
/** Include remote tracking branches */
|
|
84
|
+
includeRemotes?: boolean;
|
|
85
|
+
/** Only list remote tracking branches */
|
|
86
|
+
remotesOnly?: boolean;
|
|
87
|
+
/** Pattern to filter branches (glob-style) */
|
|
88
|
+
pattern?: string;
|
|
89
|
+
/** Sort by (name, committerdate, authordate, etc.) */
|
|
90
|
+
sortBy?: 'name' | 'committerdate' | 'authordate';
|
|
91
|
+
/** Sort order */
|
|
92
|
+
sortOrder?: 'asc' | 'desc';
|
|
93
|
+
/** Include tracking info (slower) */
|
|
94
|
+
includeTracking?: boolean;
|
|
95
|
+
/** Include commit info (slower) */
|
|
96
|
+
includeCommitInfo?: boolean;
|
|
97
|
+
/** Merged into this ref (filter only merged branches) */
|
|
98
|
+
mergedInto?: string;
|
|
99
|
+
/** Not merged into this ref (filter only unmerged branches) */
|
|
100
|
+
notMergedInto?: string;
|
|
101
|
+
/** Only show branches that contain this commit */
|
|
102
|
+
contains?: string;
|
|
103
|
+
/** Only show branches that don't contain this commit */
|
|
104
|
+
noContains?: string;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Options for setting upstream
|
|
108
|
+
*/
|
|
109
|
+
export interface SetUpstreamOptions {
|
|
110
|
+
/** Remote name */
|
|
111
|
+
remote?: string;
|
|
112
|
+
/** Remote branch name */
|
|
113
|
+
remoteBranch?: string;
|
|
114
|
+
/** Unset the upstream (remove tracking) */
|
|
115
|
+
unset?: boolean;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Result of branch validation
|
|
119
|
+
*/
|
|
120
|
+
export interface BranchValidationResult {
|
|
121
|
+
/** Whether the name is valid */
|
|
122
|
+
valid: boolean;
|
|
123
|
+
/** Error message if invalid */
|
|
124
|
+
error?: string;
|
|
125
|
+
/** Normalized branch name */
|
|
126
|
+
normalized?: string;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Error thrown when a branch operation fails
|
|
130
|
+
*/
|
|
131
|
+
export declare class BranchError extends Error {
|
|
132
|
+
readonly code: BranchErrorCode;
|
|
133
|
+
readonly branchName?: string | undefined;
|
|
134
|
+
constructor(message: string, code: BranchErrorCode, branchName?: string | undefined);
|
|
135
|
+
}
|
|
136
|
+
export type BranchErrorCode = 'NOT_FOUND' | 'ALREADY_EXISTS' | 'INVALID_NAME' | 'NOT_FULLY_MERGED' | 'CANNOT_DELETE_CURRENT' | 'CHECKOUT_CONFLICT' | 'INVALID_START_POINT' | 'NO_UPSTREAM' | 'DETACHED_HEAD';
|
|
137
|
+
/**
|
|
138
|
+
* Branch manager for performing branch operations
|
|
139
|
+
*/
|
|
140
|
+
export declare class BranchManager {
|
|
141
|
+
constructor(storage: RefStorage);
|
|
142
|
+
/**
|
|
143
|
+
* Create a new branch
|
|
144
|
+
*/
|
|
145
|
+
createBranch(_name: string, _options?: CreateBranchOptions): Promise<Branch>;
|
|
146
|
+
/**
|
|
147
|
+
* Delete a branch
|
|
148
|
+
*/
|
|
149
|
+
deleteBranch(_name: string, _options?: DeleteBranchOptions): Promise<void>;
|
|
150
|
+
/**
|
|
151
|
+
* Rename a branch
|
|
152
|
+
*/
|
|
153
|
+
renameBranch(_oldName: string, _newName: string, _options?: RenameBranchOptions): Promise<Branch>;
|
|
154
|
+
/**
|
|
155
|
+
* List all branches
|
|
156
|
+
*/
|
|
157
|
+
listBranches(_options?: ListBranchesOptions): Promise<Branch[]>;
|
|
158
|
+
/**
|
|
159
|
+
* Get the current branch
|
|
160
|
+
*/
|
|
161
|
+
getCurrentBranch(): Promise<Branch | null>;
|
|
162
|
+
/**
|
|
163
|
+
* Get a specific branch by name
|
|
164
|
+
*/
|
|
165
|
+
getBranch(_name: string): Promise<Branch | null>;
|
|
166
|
+
/**
|
|
167
|
+
* Check if a branch exists
|
|
168
|
+
*/
|
|
169
|
+
branchExists(_name: string): Promise<boolean>;
|
|
170
|
+
/**
|
|
171
|
+
* Set upstream branch for tracking
|
|
172
|
+
*/
|
|
173
|
+
setUpstream(_branchName: string, _options: SetUpstreamOptions): Promise<void>;
|
|
174
|
+
/**
|
|
175
|
+
* Get tracking info for a branch
|
|
176
|
+
*/
|
|
177
|
+
getTrackingInfo(_branchName: string): Promise<BranchTrackingInfo | null>;
|
|
178
|
+
/**
|
|
179
|
+
* Check if a branch is fully merged into another branch
|
|
180
|
+
*/
|
|
181
|
+
isMerged(_branchName: string, _into?: string): Promise<boolean>;
|
|
182
|
+
/**
|
|
183
|
+
* Force delete an unmerged branch
|
|
184
|
+
*/
|
|
185
|
+
forceDeleteBranch(_name: string): Promise<void>;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Validate a branch name according to Git rules
|
|
189
|
+
* See: https://git-scm.com/docs/git-check-ref-format
|
|
190
|
+
*/
|
|
191
|
+
export declare function validateBranchName(_name: string): BranchValidationResult;
|
|
192
|
+
/**
|
|
193
|
+
* Check if a string is a valid branch name
|
|
194
|
+
*/
|
|
195
|
+
export declare function isValidBranchName(_name: string): boolean;
|
|
196
|
+
/**
|
|
197
|
+
* Normalize a branch name (remove refs/heads/ prefix, etc.)
|
|
198
|
+
*/
|
|
199
|
+
export declare function normalizeBranchName(_name: string): string;
|
|
200
|
+
/**
|
|
201
|
+
* Get the full ref name for a branch
|
|
202
|
+
*/
|
|
203
|
+
export declare function getBranchRefName(_name: string): string;
|
|
204
|
+
/**
|
|
205
|
+
* Create a new branch (convenience function)
|
|
206
|
+
*/
|
|
207
|
+
export declare function createBranch(_storage: RefStorage, _name: string, _options?: CreateBranchOptions): Promise<Branch>;
|
|
208
|
+
/**
|
|
209
|
+
* Delete a branch (convenience function)
|
|
210
|
+
*/
|
|
211
|
+
export declare function deleteBranch(_storage: RefStorage, _name: string, _options?: DeleteBranchOptions): Promise<void>;
|
|
212
|
+
/**
|
|
213
|
+
* Rename a branch (convenience function)
|
|
214
|
+
*/
|
|
215
|
+
export declare function renameBranch(_storage: RefStorage, _oldName: string, _newName: string, _options?: RenameBranchOptions): Promise<Branch>;
|
|
216
|
+
/**
|
|
217
|
+
* List all branches (convenience function)
|
|
218
|
+
*/
|
|
219
|
+
export declare function listBranches(_storage: RefStorage, _options?: ListBranchesOptions): Promise<Branch[]>;
|
|
220
|
+
/**
|
|
221
|
+
* Get the current branch (convenience function)
|
|
222
|
+
*/
|
|
223
|
+
export declare function getCurrentBranch(_storage: RefStorage): Promise<Branch | null>;
|
|
224
|
+
//# sourceMappingURL=branch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../src/refs/branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Branch Operations
|
|
3
|
+
*
|
|
4
|
+
* Handles branch creation, deletion, renaming, listing, and tracking.
|
|
5
|
+
* Works with the RefStorage system for underlying ref management.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Error thrown when a branch operation fails
|
|
9
|
+
*/
|
|
10
|
+
export class BranchError extends Error {
|
|
11
|
+
code;
|
|
12
|
+
branchName;
|
|
13
|
+
constructor(message, code, branchName) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.code = code;
|
|
16
|
+
this.branchName = branchName;
|
|
17
|
+
this.name = 'BranchError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Branch manager for performing branch operations
|
|
22
|
+
*/
|
|
23
|
+
export class BranchManager {
|
|
24
|
+
constructor(storage) {
|
|
25
|
+
void storage; // Suppress unused variable warning until implementation
|
|
26
|
+
// TODO: Implement in GREEN phase
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create a new branch
|
|
30
|
+
*/
|
|
31
|
+
async createBranch(_name, _options) {
|
|
32
|
+
// TODO: Implement in GREEN phase
|
|
33
|
+
throw new Error('Not implemented');
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Delete a branch
|
|
37
|
+
*/
|
|
38
|
+
async deleteBranch(_name, _options) {
|
|
39
|
+
// TODO: Implement in GREEN phase
|
|
40
|
+
throw new Error('Not implemented');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Rename a branch
|
|
44
|
+
*/
|
|
45
|
+
async renameBranch(_oldName, _newName, _options) {
|
|
46
|
+
// TODO: Implement in GREEN phase
|
|
47
|
+
throw new Error('Not implemented');
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* List all branches
|
|
51
|
+
*/
|
|
52
|
+
async listBranches(_options) {
|
|
53
|
+
// TODO: Implement in GREEN phase
|
|
54
|
+
throw new Error('Not implemented');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the current branch
|
|
58
|
+
*/
|
|
59
|
+
async getCurrentBranch() {
|
|
60
|
+
// TODO: Implement in GREEN phase
|
|
61
|
+
throw new Error('Not implemented');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get a specific branch by name
|
|
65
|
+
*/
|
|
66
|
+
async getBranch(_name) {
|
|
67
|
+
// TODO: Implement in GREEN phase
|
|
68
|
+
throw new Error('Not implemented');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check if a branch exists
|
|
72
|
+
*/
|
|
73
|
+
async branchExists(_name) {
|
|
74
|
+
// TODO: Implement in GREEN phase
|
|
75
|
+
throw new Error('Not implemented');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Set upstream branch for tracking
|
|
79
|
+
*/
|
|
80
|
+
async setUpstream(_branchName, _options) {
|
|
81
|
+
// TODO: Implement in GREEN phase
|
|
82
|
+
throw new Error('Not implemented');
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get tracking info for a branch
|
|
86
|
+
*/
|
|
87
|
+
async getTrackingInfo(_branchName) {
|
|
88
|
+
// TODO: Implement in GREEN phase
|
|
89
|
+
throw new Error('Not implemented');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if a branch is fully merged into another branch
|
|
93
|
+
*/
|
|
94
|
+
async isMerged(_branchName, _into) {
|
|
95
|
+
// TODO: Implement in GREEN phase
|
|
96
|
+
throw new Error('Not implemented');
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Force delete an unmerged branch
|
|
100
|
+
*/
|
|
101
|
+
async forceDeleteBranch(_name) {
|
|
102
|
+
// TODO: Implement in GREEN phase
|
|
103
|
+
throw new Error('Not implemented');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Validate a branch name according to Git rules
|
|
108
|
+
* See: https://git-scm.com/docs/git-check-ref-format
|
|
109
|
+
*/
|
|
110
|
+
export function validateBranchName(_name) {
|
|
111
|
+
// TODO: Implement in GREEN phase
|
|
112
|
+
throw new Error('Not implemented');
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Check if a string is a valid branch name
|
|
116
|
+
*/
|
|
117
|
+
export function isValidBranchName(_name) {
|
|
118
|
+
// TODO: Implement in GREEN phase
|
|
119
|
+
throw new Error('Not implemented');
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Normalize a branch name (remove refs/heads/ prefix, etc.)
|
|
123
|
+
*/
|
|
124
|
+
export function normalizeBranchName(_name) {
|
|
125
|
+
// TODO: Implement in GREEN phase
|
|
126
|
+
throw new Error('Not implemented');
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get the full ref name for a branch
|
|
130
|
+
*/
|
|
131
|
+
export function getBranchRefName(_name) {
|
|
132
|
+
// TODO: Implement in GREEN phase
|
|
133
|
+
throw new Error('Not implemented');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Create a new branch (convenience function)
|
|
137
|
+
*/
|
|
138
|
+
export async function createBranch(_storage, _name, _options) {
|
|
139
|
+
// TODO: Implement in GREEN phase
|
|
140
|
+
throw new Error('Not implemented');
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Delete a branch (convenience function)
|
|
144
|
+
*/
|
|
145
|
+
export async function deleteBranch(_storage, _name, _options) {
|
|
146
|
+
// TODO: Implement in GREEN phase
|
|
147
|
+
throw new Error('Not implemented');
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Rename a branch (convenience function)
|
|
151
|
+
*/
|
|
152
|
+
export async function renameBranch(_storage, _oldName, _newName, _options) {
|
|
153
|
+
// TODO: Implement in GREEN phase
|
|
154
|
+
throw new Error('Not implemented');
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* List all branches (convenience function)
|
|
158
|
+
*/
|
|
159
|
+
export async function listBranches(_storage, _options) {
|
|
160
|
+
// TODO: Implement in GREEN phase
|
|
161
|
+
throw new Error('Not implemented');
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get the current branch (convenience function)
|
|
165
|
+
*/
|
|
166
|
+
export async function getCurrentBranch(_storage) {
|
|
167
|
+
// TODO: Implement in GREEN phase
|
|
168
|
+
throw new Error('Not implemented');
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../src/refs/branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,208 @@
|
|
|
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
|
+
export type RefType = 'direct' | 'symbolic';
|
|
8
|
+
/**
|
|
9
|
+
* Represents a Git reference (branch, tag, HEAD, etc.)
|
|
10
|
+
*/
|
|
11
|
+
export interface Ref {
|
|
12
|
+
/** Full ref name (e.g., 'refs/heads/main', 'HEAD') */
|
|
13
|
+
name: string;
|
|
14
|
+
/** Target - either a SHA-1 hash (direct) or another ref name (symbolic) */
|
|
15
|
+
target: string;
|
|
16
|
+
/** Type of reference */
|
|
17
|
+
type: RefType;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Options for updating a ref
|
|
21
|
+
*/
|
|
22
|
+
export interface UpdateRefOptions {
|
|
23
|
+
/** If true, create the ref if it doesn't exist */
|
|
24
|
+
create?: boolean;
|
|
25
|
+
/** Expected old value for CAS (compare-and-swap) */
|
|
26
|
+
oldValue?: string | null;
|
|
27
|
+
/** Force update even if not a fast-forward */
|
|
28
|
+
force?: boolean;
|
|
29
|
+
/** Reason for the update (for reflog) */
|
|
30
|
+
reason?: string;
|
|
31
|
+
/** If provided, use this lock instead of acquiring a new one */
|
|
32
|
+
lock?: RefLock;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Options for listing refs
|
|
36
|
+
*/
|
|
37
|
+
export interface ListRefsOptions {
|
|
38
|
+
/** Pattern to filter refs (e.g., 'refs/heads/*') */
|
|
39
|
+
pattern?: string;
|
|
40
|
+
/** Include HEAD in the listing */
|
|
41
|
+
includeHead?: boolean;
|
|
42
|
+
/** Include symbolic refs */
|
|
43
|
+
includeSymbolic?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Options for resolving refs
|
|
47
|
+
*/
|
|
48
|
+
export interface ResolveRefOptions {
|
|
49
|
+
/** Maximum depth for following symbolic refs (default: 10) */
|
|
50
|
+
maxDepth?: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Result of a ref resolution
|
|
54
|
+
*/
|
|
55
|
+
export interface ResolvedRef {
|
|
56
|
+
/** The original ref that was resolved */
|
|
57
|
+
ref: Ref;
|
|
58
|
+
/** The final SHA-1 target after following all symbolic refs */
|
|
59
|
+
sha: string;
|
|
60
|
+
/** Chain of refs followed during resolution */
|
|
61
|
+
chain: Ref[];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Error thrown when a ref operation fails
|
|
65
|
+
*/
|
|
66
|
+
export declare class RefError extends Error {
|
|
67
|
+
readonly code: RefErrorCode;
|
|
68
|
+
readonly refName?: string | undefined;
|
|
69
|
+
constructor(message: string, code: RefErrorCode, refName?: string | undefined);
|
|
70
|
+
}
|
|
71
|
+
export type RefErrorCode = 'NOT_FOUND' | 'ALREADY_EXISTS' | 'INVALID_NAME' | 'LOCKED' | 'CONFLICT' | 'CIRCULAR_REF' | 'MAX_DEPTH_EXCEEDED' | 'INVALID_SHA';
|
|
72
|
+
/**
|
|
73
|
+
* Lock handle for ref updates
|
|
74
|
+
*/
|
|
75
|
+
export interface RefLock {
|
|
76
|
+
/** The ref being locked */
|
|
77
|
+
refName: string;
|
|
78
|
+
/** Release the lock */
|
|
79
|
+
release(): Promise<void>;
|
|
80
|
+
/** Check if lock is still held */
|
|
81
|
+
isHeld(): boolean;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Storage backend interface for refs
|
|
85
|
+
*/
|
|
86
|
+
export interface RefStorageBackend {
|
|
87
|
+
/** Read a single ref */
|
|
88
|
+
readRef(name: string): Promise<Ref | null>;
|
|
89
|
+
/** Write a ref */
|
|
90
|
+
writeRef(ref: Ref): Promise<void>;
|
|
91
|
+
/** Delete a ref */
|
|
92
|
+
deleteRef(name: string): Promise<boolean>;
|
|
93
|
+
/** List all refs matching a pattern */
|
|
94
|
+
listRefs(pattern?: string): Promise<Ref[]>;
|
|
95
|
+
/** Acquire a lock on a ref */
|
|
96
|
+
acquireLock(name: string, timeout?: number): Promise<RefLock>;
|
|
97
|
+
/** Read packed refs */
|
|
98
|
+
readPackedRefs(): Promise<Map<string, string>>;
|
|
99
|
+
/** Write packed refs */
|
|
100
|
+
writePackedRefs(refs: Map<string, string>): Promise<void>;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Validate a ref name according to Git rules
|
|
104
|
+
* See: https://git-scm.com/docs/git-check-ref-format
|
|
105
|
+
*/
|
|
106
|
+
export declare function isValidRefName(name: string): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Validate a SHA-1 hash
|
|
109
|
+
*/
|
|
110
|
+
export declare function isValidSha(sha: string): boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Parse a ref file content
|
|
113
|
+
*/
|
|
114
|
+
export declare function parseRefContent(content: string): {
|
|
115
|
+
type: RefType;
|
|
116
|
+
target: string;
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Serialize a ref to file content
|
|
120
|
+
*/
|
|
121
|
+
export declare function serializeRefContent(ref: Ref): string;
|
|
122
|
+
/**
|
|
123
|
+
* Parse packed-refs file content
|
|
124
|
+
*/
|
|
125
|
+
export declare function parsePackedRefs(content: string): Map<string, string>;
|
|
126
|
+
/**
|
|
127
|
+
* Serialize refs to packed-refs format
|
|
128
|
+
*/
|
|
129
|
+
export declare function serializePackedRefs(refs: Map<string, string>): string;
|
|
130
|
+
/**
|
|
131
|
+
* Ref storage implementation
|
|
132
|
+
*/
|
|
133
|
+
export declare class RefStorage {
|
|
134
|
+
private backend;
|
|
135
|
+
constructor(backend: RefStorageBackend);
|
|
136
|
+
/**
|
|
137
|
+
* Get a ref by name
|
|
138
|
+
*/
|
|
139
|
+
getRef(name: string): Promise<Ref | null>;
|
|
140
|
+
/**
|
|
141
|
+
* Resolve a ref to its final SHA target
|
|
142
|
+
*/
|
|
143
|
+
resolveRef(name: string, options?: ResolveRefOptions): Promise<ResolvedRef>;
|
|
144
|
+
/**
|
|
145
|
+
* Update or create a ref
|
|
146
|
+
*
|
|
147
|
+
* Note: For atomic operations, callers can acquire a lock via acquireLock()
|
|
148
|
+
* and pass it via options.lock to avoid double-locking.
|
|
149
|
+
*/
|
|
150
|
+
updateRef(name: string, target: string, options?: UpdateRefOptions): Promise<Ref>;
|
|
151
|
+
/**
|
|
152
|
+
* Delete a ref
|
|
153
|
+
*/
|
|
154
|
+
deleteRef(name: string, options?: UpdateRefOptions): Promise<boolean>;
|
|
155
|
+
/**
|
|
156
|
+
* List refs matching a pattern
|
|
157
|
+
*/
|
|
158
|
+
listRefs(options?: ListRefsOptions): Promise<Ref[]>;
|
|
159
|
+
/**
|
|
160
|
+
* List all branches
|
|
161
|
+
*/
|
|
162
|
+
listBranches(): Promise<Ref[]>;
|
|
163
|
+
/**
|
|
164
|
+
* List all tags
|
|
165
|
+
*/
|
|
166
|
+
listTags(): Promise<Ref[]>;
|
|
167
|
+
/**
|
|
168
|
+
* Get HEAD ref
|
|
169
|
+
*/
|
|
170
|
+
getHead(): Promise<Ref>;
|
|
171
|
+
/**
|
|
172
|
+
* Update HEAD (can be symbolic or detached)
|
|
173
|
+
*/
|
|
174
|
+
updateHead(target: string, symbolic?: boolean): Promise<Ref>;
|
|
175
|
+
/**
|
|
176
|
+
* Check if HEAD is detached
|
|
177
|
+
*/
|
|
178
|
+
isHeadDetached(): Promise<boolean>;
|
|
179
|
+
/**
|
|
180
|
+
* Create a symbolic ref
|
|
181
|
+
*/
|
|
182
|
+
createSymbolicRef(name: string, target: string): Promise<Ref>;
|
|
183
|
+
/**
|
|
184
|
+
* Acquire a lock for updating a ref
|
|
185
|
+
*/
|
|
186
|
+
acquireLock(name: string, timeout?: number): Promise<RefLock>;
|
|
187
|
+
/**
|
|
188
|
+
* Pack loose refs into packed-refs file
|
|
189
|
+
*/
|
|
190
|
+
packRefs(): Promise<void>;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Resolve a ref to its final SHA target (convenience function)
|
|
194
|
+
*/
|
|
195
|
+
export declare function resolveRef(storage: RefStorage, name: string, options?: ResolveRefOptions): Promise<string>;
|
|
196
|
+
/**
|
|
197
|
+
* Update a ref (convenience function)
|
|
198
|
+
*/
|
|
199
|
+
export declare function updateRef(storage: RefStorage, name: string, target: string, options?: UpdateRefOptions): Promise<Ref>;
|
|
200
|
+
/**
|
|
201
|
+
* Delete a ref (convenience function)
|
|
202
|
+
*/
|
|
203
|
+
export declare function deleteRef(storage: RefStorage, name: string, options?: UpdateRefOptions): Promise<boolean>;
|
|
204
|
+
/**
|
|
205
|
+
* List refs (convenience function)
|
|
206
|
+
*/
|
|
207
|
+
export declare function listRefs(storage: RefStorage, options?: ListRefsOptions): Promise<Ref[]>;
|
|
208
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/refs/storage.ts"],"names":[],"mappings":"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"}
|