@camaradesuk/git-worktree-tools 1.0.3
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 +259 -0
- package/dist/cli/cleanpr.d.ts +13 -0
- package/dist/cli/cleanpr.d.ts.map +1 -0
- package/dist/cli/cleanpr.js +441 -0
- package/dist/cli/cleanpr.js.map +1 -0
- package/dist/cli/lswt.d.ts +11 -0
- package/dist/cli/lswt.d.ts.map +1 -0
- package/dist/cli/lswt.js +313 -0
- package/dist/cli/lswt.js.map +1 -0
- package/dist/cli/newpr.d.ts +11 -0
- package/dist/cli/newpr.d.ts.map +1 -0
- package/dist/cli/newpr.js +888 -0
- package/dist/cli/newpr.js.map +1 -0
- package/dist/cli/wtlink.d.ts +15 -0
- package/dist/cli/wtlink.d.ts.map +1 -0
- package/dist/cli/wtlink.js +124 -0
- package/dist/cli/wtlink.js.map +1 -0
- package/dist/e2e/cli.e2e.test.d.ts +2 -0
- package/dist/e2e/cli.e2e.test.d.ts.map +1 -0
- package/dist/e2e/cli.e2e.test.js +215 -0
- package/dist/e2e/cli.e2e.test.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/git.integration.test.d.ts +2 -0
- package/dist/integration/git.integration.test.d.ts.map +1 -0
- package/dist/integration/git.integration.test.js +333 -0
- package/dist/integration/git.integration.test.js.map +1 -0
- package/dist/lib/colors.d.ts +59 -0
- package/dist/lib/colors.d.ts.map +1 -0
- package/dist/lib/colors.js +145 -0
- package/dist/lib/colors.js.map +1 -0
- package/dist/lib/colors.test.d.ts +2 -0
- package/dist/lib/colors.test.d.ts.map +1 -0
- package/dist/lib/colors.test.js +69 -0
- package/dist/lib/colors.test.js.map +1 -0
- package/dist/lib/config.d.ts +58 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +91 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/config.test.d.ts +2 -0
- package/dist/lib/config.test.d.ts.map +1 -0
- package/dist/lib/config.test.js +84 -0
- package/dist/lib/config.test.js.map +1 -0
- package/dist/lib/constants.d.ts +37 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +37 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/errors.d.ts +88 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +112 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/errors.test.d.ts +2 -0
- package/dist/lib/errors.test.d.ts.map +1 -0
- package/dist/lib/errors.test.js +117 -0
- package/dist/lib/errors.test.js.map +1 -0
- package/dist/lib/git.d.ts +224 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +524 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/git.test.d.ts +2 -0
- package/dist/lib/git.test.d.ts.map +1 -0
- package/dist/lib/git.test.js +402 -0
- package/dist/lib/git.test.js.map +1 -0
- package/dist/lib/github.d.ts +82 -0
- package/dist/lib/github.d.ts.map +1 -0
- package/dist/lib/github.js +254 -0
- package/dist/lib/github.js.map +1 -0
- package/dist/lib/github.test.d.ts +2 -0
- package/dist/lib/github.test.d.ts.map +1 -0
- package/dist/lib/github.test.js +258 -0
- package/dist/lib/github.test.js.map +1 -0
- package/dist/lib/prompts.d.ts +39 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +213 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/prompts.test.d.ts +2 -0
- package/dist/lib/prompts.test.d.ts.map +1 -0
- package/dist/lib/prompts.test.js +250 -0
- package/dist/lib/prompts.test.js.map +1 -0
- package/dist/lib/state-detection.d.ts +65 -0
- package/dist/lib/state-detection.d.ts.map +1 -0
- package/dist/lib/state-detection.js +186 -0
- package/dist/lib/state-detection.js.map +1 -0
- package/dist/lib/state-detection.test.d.ts +2 -0
- package/dist/lib/state-detection.test.d.ts.map +1 -0
- package/dist/lib/state-detection.test.js +164 -0
- package/dist/lib/state-detection.test.js.map +1 -0
- package/dist/lib/wtlink/index.d.ts +5 -0
- package/dist/lib/wtlink/index.d.ts.map +1 -0
- package/dist/lib/wtlink/index.js +7 -0
- package/dist/lib/wtlink/index.js.map +1 -0
- package/dist/lib/wtlink/link-configs.d.ts +10 -0
- package/dist/lib/wtlink/link-configs.d.ts.map +1 -0
- package/dist/lib/wtlink/link-configs.js +411 -0
- package/dist/lib/wtlink/link-configs.js.map +1 -0
- package/dist/lib/wtlink/link-configs.test.d.ts +2 -0
- package/dist/lib/wtlink/link-configs.test.d.ts.map +1 -0
- package/dist/lib/wtlink/link-configs.test.js +179 -0
- package/dist/lib/wtlink/link-configs.test.js.map +1 -0
- package/dist/lib/wtlink/main-menu.d.ts +2 -0
- package/dist/lib/wtlink/main-menu.d.ts.map +1 -0
- package/dist/lib/wtlink/main-menu.js +149 -0
- package/dist/lib/wtlink/main-menu.js.map +1 -0
- package/dist/lib/wtlink/manage-manifest.d.ts +9 -0
- package/dist/lib/wtlink/manage-manifest.d.ts.map +1 -0
- package/dist/lib/wtlink/manage-manifest.js +1262 -0
- package/dist/lib/wtlink/manage-manifest.js.map +1 -0
- package/dist/lib/wtlink/validate-manifest.d.ts +6 -0
- package/dist/lib/wtlink/validate-manifest.d.ts.map +1 -0
- package/dist/lib/wtlink/validate-manifest.js +51 -0
- package/dist/lib/wtlink/validate-manifest.js.map +1 -0
- package/dist/lib/wtlink/validate-manifest.test.d.ts +2 -0
- package/dist/lib/wtlink/validate-manifest.test.d.ts.map +1 -0
- package/dist/lib/wtlink/validate-manifest.test.js +115 -0
- package/dist/lib/wtlink/validate-manifest.test.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { WorktreeToolsError, GitCommandError, GitHubCliError, ConfigurationError, WorktreeError, ManifestError, UserCancelledError, isWorktreeToolsError, isGitCommandError, isGitHubCliError, } from './errors.js';
|
|
3
|
+
describe('errors', () => {
|
|
4
|
+
describe('WorktreeToolsError', () => {
|
|
5
|
+
it('should create error with message', () => {
|
|
6
|
+
const error = new WorktreeToolsError('Test error');
|
|
7
|
+
expect(error.message).toBe('Test error');
|
|
8
|
+
expect(error.name).toBe('WorktreeToolsError');
|
|
9
|
+
});
|
|
10
|
+
it('should be instanceof Error', () => {
|
|
11
|
+
const error = new WorktreeToolsError('Test');
|
|
12
|
+
expect(error).toBeInstanceOf(Error);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
describe('GitCommandError', () => {
|
|
16
|
+
it('should create error with command info', () => {
|
|
17
|
+
const error = new GitCommandError('Git failed', {
|
|
18
|
+
command: 'git status',
|
|
19
|
+
exitCode: 128,
|
|
20
|
+
stderr: 'fatal: not a git repository',
|
|
21
|
+
});
|
|
22
|
+
expect(error.message).toBe('Git failed');
|
|
23
|
+
expect(error.name).toBe('GitCommandError');
|
|
24
|
+
expect(error.command).toBe('git status');
|
|
25
|
+
expect(error.exitCode).toBe(128);
|
|
26
|
+
expect(error.stderr).toBe('fatal: not a git repository');
|
|
27
|
+
});
|
|
28
|
+
it('should be instanceof WorktreeToolsError', () => {
|
|
29
|
+
const error = new GitCommandError('Test', { command: 'git' });
|
|
30
|
+
expect(error).toBeInstanceOf(WorktreeToolsError);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe('GitHubCliError', () => {
|
|
34
|
+
it('should create error with command info', () => {
|
|
35
|
+
const error = new GitHubCliError('GitHub CLI failed', {
|
|
36
|
+
command: 'gh pr create',
|
|
37
|
+
stderr: 'not authenticated',
|
|
38
|
+
});
|
|
39
|
+
expect(error.message).toBe('GitHub CLI failed');
|
|
40
|
+
expect(error.name).toBe('GitHubCliError');
|
|
41
|
+
expect(error.command).toBe('gh pr create');
|
|
42
|
+
expect(error.stderr).toBe('not authenticated');
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('ConfigurationError', () => {
|
|
46
|
+
it('should create error with config details', () => {
|
|
47
|
+
const error = new ConfigurationError('Invalid config', {
|
|
48
|
+
configFile: '.worktreerc',
|
|
49
|
+
field: 'baseBranch',
|
|
50
|
+
});
|
|
51
|
+
expect(error.message).toBe('Invalid config');
|
|
52
|
+
expect(error.name).toBe('ConfigurationError');
|
|
53
|
+
expect(error.configFile).toBe('.worktreerc');
|
|
54
|
+
expect(error.field).toBe('baseBranch');
|
|
55
|
+
});
|
|
56
|
+
it('should work without options', () => {
|
|
57
|
+
const error = new ConfigurationError('Invalid config');
|
|
58
|
+
expect(error.configFile).toBeUndefined();
|
|
59
|
+
expect(error.field).toBeUndefined();
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('WorktreeError', () => {
|
|
63
|
+
it('should create error with worktree details', () => {
|
|
64
|
+
const error = new WorktreeError('Worktree failed', {
|
|
65
|
+
worktreePath: '/home/user/project.pr42',
|
|
66
|
+
branch: 'feature/test',
|
|
67
|
+
});
|
|
68
|
+
expect(error.message).toBe('Worktree failed');
|
|
69
|
+
expect(error.name).toBe('WorktreeError');
|
|
70
|
+
expect(error.worktreePath).toBe('/home/user/project.pr42');
|
|
71
|
+
expect(error.branch).toBe('feature/test');
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('ManifestError', () => {
|
|
75
|
+
it('should create error with manifest details', () => {
|
|
76
|
+
const error = new ManifestError('Manifest invalid', {
|
|
77
|
+
manifestPath: '.wtlinkrc',
|
|
78
|
+
issues: ['Missing file: .env', 'Duplicate entry: .vscode/settings.json'],
|
|
79
|
+
});
|
|
80
|
+
expect(error.message).toBe('Manifest invalid');
|
|
81
|
+
expect(error.name).toBe('ManifestError');
|
|
82
|
+
expect(error.manifestPath).toBe('.wtlinkrc');
|
|
83
|
+
expect(error.issues).toHaveLength(2);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe('UserCancelledError', () => {
|
|
87
|
+
it('should create error with default message', () => {
|
|
88
|
+
const error = new UserCancelledError();
|
|
89
|
+
expect(error.message).toBe('Operation cancelled by user');
|
|
90
|
+
expect(error.name).toBe('UserCancelledError');
|
|
91
|
+
});
|
|
92
|
+
it('should create error with custom message', () => {
|
|
93
|
+
const error = new UserCancelledError('User aborted PR creation');
|
|
94
|
+
expect(error.message).toBe('User aborted PR creation');
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe('type guards', () => {
|
|
98
|
+
it('isWorktreeToolsError should identify errors correctly', () => {
|
|
99
|
+
expect(isWorktreeToolsError(new WorktreeToolsError('test'))).toBe(true);
|
|
100
|
+
expect(isWorktreeToolsError(new GitCommandError('test', { command: 'git' }))).toBe(true);
|
|
101
|
+
expect(isWorktreeToolsError(new Error('test'))).toBe(false);
|
|
102
|
+
expect(isWorktreeToolsError('string')).toBe(false);
|
|
103
|
+
expect(isWorktreeToolsError(null)).toBe(false);
|
|
104
|
+
});
|
|
105
|
+
it('isGitCommandError should identify errors correctly', () => {
|
|
106
|
+
expect(isGitCommandError(new GitCommandError('test', { command: 'git' }))).toBe(true);
|
|
107
|
+
expect(isGitCommandError(new WorktreeToolsError('test'))).toBe(false);
|
|
108
|
+
expect(isGitCommandError(new Error('test'))).toBe(false);
|
|
109
|
+
});
|
|
110
|
+
it('isGitHubCliError should identify errors correctly', () => {
|
|
111
|
+
expect(isGitHubCliError(new GitHubCliError('test', { command: 'gh' }))).toBe(true);
|
|
112
|
+
expect(isGitHubCliError(new WorktreeToolsError('test'))).toBe(false);
|
|
113
|
+
expect(isGitHubCliError(new Error('test'))).toBe(false);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=errors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/lib/errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Commit relationship to base branch
|
|
3
|
+
*/
|
|
4
|
+
export type CommitRelationship = 'same' | 'ahead' | 'behind' | 'divergent' | 'ancestor';
|
|
5
|
+
/**
|
|
6
|
+
* Working tree status
|
|
7
|
+
*/
|
|
8
|
+
export type WorkingTreeStatus = 'clean' | 'staged_only' | 'unstaged_only' | 'both';
|
|
9
|
+
/**
|
|
10
|
+
* Worktree information
|
|
11
|
+
*/
|
|
12
|
+
export interface Worktree {
|
|
13
|
+
path: string;
|
|
14
|
+
branch: string | null;
|
|
15
|
+
commit: string;
|
|
16
|
+
isMain: boolean;
|
|
17
|
+
isBare: boolean;
|
|
18
|
+
isLocked: boolean;
|
|
19
|
+
isPrunable: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Stash options
|
|
23
|
+
*/
|
|
24
|
+
export interface StashOptions {
|
|
25
|
+
keepIndex?: boolean;
|
|
26
|
+
message?: string;
|
|
27
|
+
includeUntracked?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Commit options
|
|
31
|
+
*/
|
|
32
|
+
export interface CommitOptions {
|
|
33
|
+
all?: boolean;
|
|
34
|
+
allowEmpty?: boolean;
|
|
35
|
+
message: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Push options
|
|
39
|
+
*/
|
|
40
|
+
export interface PushOptions {
|
|
41
|
+
setUpstream?: boolean;
|
|
42
|
+
force?: boolean;
|
|
43
|
+
remote?: string;
|
|
44
|
+
branch?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Execute a git command and return output
|
|
48
|
+
*/
|
|
49
|
+
export declare function exec(args: string[], options?: {
|
|
50
|
+
cwd?: string;
|
|
51
|
+
silent?: boolean;
|
|
52
|
+
}): string;
|
|
53
|
+
/**
|
|
54
|
+
* Execute a git command, returning null on failure instead of throwing
|
|
55
|
+
*/
|
|
56
|
+
export declare function execSafe(args: string[], options?: {
|
|
57
|
+
cwd?: string;
|
|
58
|
+
}): string | null;
|
|
59
|
+
/**
|
|
60
|
+
* Get the root directory of the current git repository
|
|
61
|
+
*/
|
|
62
|
+
export declare function getRepoRoot(cwd?: string): string;
|
|
63
|
+
/**
|
|
64
|
+
* Get repository name from remote URL or directory name
|
|
65
|
+
*/
|
|
66
|
+
export declare function getRepoName(repoRoot: string): string;
|
|
67
|
+
/**
|
|
68
|
+
* Get the current branch name, or null if detached HEAD
|
|
69
|
+
*/
|
|
70
|
+
export declare function getCurrentBranch(cwd?: string): string | null;
|
|
71
|
+
/**
|
|
72
|
+
* Check if in detached HEAD state
|
|
73
|
+
*/
|
|
74
|
+
export declare function isDetachedHead(cwd?: string): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Get the current commit SHA
|
|
77
|
+
*/
|
|
78
|
+
export declare function getHeadCommit(cwd?: string): string;
|
|
79
|
+
/**
|
|
80
|
+
* Get short commit SHA
|
|
81
|
+
*/
|
|
82
|
+
export declare function getShortCommit(cwd?: string, ref?: string): string;
|
|
83
|
+
/**
|
|
84
|
+
* Check if a remote exists
|
|
85
|
+
*/
|
|
86
|
+
export declare function hasRemote(remote?: string, cwd?: string): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Fetch from remote
|
|
89
|
+
*/
|
|
90
|
+
export declare function fetch(remote?: string, cwd?: string): void;
|
|
91
|
+
/**
|
|
92
|
+
* Get the commit SHA of a ref
|
|
93
|
+
*/
|
|
94
|
+
export declare function getRefCommit(ref: string, cwd?: string): string | null;
|
|
95
|
+
/**
|
|
96
|
+
* Determine commit relationship to base branch
|
|
97
|
+
*/
|
|
98
|
+
export declare function getCommitRelationship(baseBranch?: string, cwd?: string): CommitRelationship;
|
|
99
|
+
/**
|
|
100
|
+
* Get list of commits ahead of base
|
|
101
|
+
*/
|
|
102
|
+
export declare function getCommitsAhead(baseBranch?: string, cwd?: string): string[];
|
|
103
|
+
/**
|
|
104
|
+
* Get working tree status
|
|
105
|
+
*/
|
|
106
|
+
export declare function getWorkingTreeStatus(cwd?: string): WorkingTreeStatus;
|
|
107
|
+
/**
|
|
108
|
+
* Get staged files
|
|
109
|
+
*/
|
|
110
|
+
export declare function getStagedFiles(cwd?: string): string[];
|
|
111
|
+
/**
|
|
112
|
+
* Get unstaged files (modified + untracked)
|
|
113
|
+
*/
|
|
114
|
+
export declare function getUnstagedFiles(cwd?: string): string[];
|
|
115
|
+
/**
|
|
116
|
+
* Get git status output (for display)
|
|
117
|
+
*/
|
|
118
|
+
export declare function getStatusOutput(cwd?: string): string;
|
|
119
|
+
/**
|
|
120
|
+
* List all worktrees
|
|
121
|
+
*/
|
|
122
|
+
export declare function listWorktrees(cwd?: string): Worktree[];
|
|
123
|
+
/**
|
|
124
|
+
* Find the main worktree
|
|
125
|
+
*/
|
|
126
|
+
export declare function getMainWorktree(cwd?: string): Worktree | null;
|
|
127
|
+
/**
|
|
128
|
+
* Check if current directory is a worktree (not main)
|
|
129
|
+
*/
|
|
130
|
+
export declare function isWorktree(cwd?: string): boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Add a new worktree
|
|
133
|
+
*/
|
|
134
|
+
export declare function addWorktree(worktreePath: string, branch: string, options?: {
|
|
135
|
+
createBranch?: boolean;
|
|
136
|
+
startPoint?: string;
|
|
137
|
+
cwd?: string;
|
|
138
|
+
}): void;
|
|
139
|
+
/**
|
|
140
|
+
* Remove a worktree
|
|
141
|
+
*/
|
|
142
|
+
export declare function removeWorktree(worktreePath: string, options?: {
|
|
143
|
+
force?: boolean;
|
|
144
|
+
cwd?: string;
|
|
145
|
+
}): void;
|
|
146
|
+
/**
|
|
147
|
+
* Prune worktrees
|
|
148
|
+
*/
|
|
149
|
+
export declare function pruneWorktrees(cwd?: string): void;
|
|
150
|
+
/**
|
|
151
|
+
* Create a new branch
|
|
152
|
+
*/
|
|
153
|
+
export declare function createBranch(name: string, startPoint?: string, cwd?: string): void;
|
|
154
|
+
/**
|
|
155
|
+
* Delete a branch
|
|
156
|
+
*/
|
|
157
|
+
export declare function deleteBranch(name: string, options?: {
|
|
158
|
+
force?: boolean;
|
|
159
|
+
cwd?: string;
|
|
160
|
+
}): void;
|
|
161
|
+
/**
|
|
162
|
+
* Checkout a branch or commit
|
|
163
|
+
*/
|
|
164
|
+
export declare function checkout(ref: string, cwd?: string): void;
|
|
165
|
+
/**
|
|
166
|
+
* Stage files
|
|
167
|
+
*/
|
|
168
|
+
export declare function add(paths?: string[] | string, cwd?: string): void;
|
|
169
|
+
/**
|
|
170
|
+
* Create a commit
|
|
171
|
+
*/
|
|
172
|
+
export declare function commit(options: CommitOptions, cwd?: string): string;
|
|
173
|
+
/**
|
|
174
|
+
* Push to remote
|
|
175
|
+
*/
|
|
176
|
+
export declare function push(options?: PushOptions, cwd?: string): void;
|
|
177
|
+
/**
|
|
178
|
+
* Stash changes
|
|
179
|
+
* Returns stash reference if created, null if nothing to stash
|
|
180
|
+
*/
|
|
181
|
+
export declare function stash(options?: StashOptions, cwd?: string): string | null;
|
|
182
|
+
/**
|
|
183
|
+
* Apply stashed changes
|
|
184
|
+
*/
|
|
185
|
+
export declare function stashApply(stashRef?: string, cwd?: string): void;
|
|
186
|
+
/**
|
|
187
|
+
* Drop a stash entry
|
|
188
|
+
*/
|
|
189
|
+
export declare function stashDrop(stashRef?: string, cwd?: string): void;
|
|
190
|
+
/**
|
|
191
|
+
* Pop stashed changes (apply + drop)
|
|
192
|
+
*/
|
|
193
|
+
export declare function stashPop(stashRef?: string, cwd?: string): void;
|
|
194
|
+
/**
|
|
195
|
+
* Get commit log
|
|
196
|
+
*/
|
|
197
|
+
export declare function getLog(range: string, options?: {
|
|
198
|
+
format?: string;
|
|
199
|
+
maxCount?: number;
|
|
200
|
+
cwd?: string;
|
|
201
|
+
}): string[];
|
|
202
|
+
/**
|
|
203
|
+
* Check if a branch exists locally
|
|
204
|
+
*/
|
|
205
|
+
export declare function branchExists(name: string, cwd?: string): boolean;
|
|
206
|
+
/**
|
|
207
|
+
* Check if a branch exists on remote
|
|
208
|
+
*/
|
|
209
|
+
export declare function remoteBranchExists(name: string, remote?: string, cwd?: string): boolean;
|
|
210
|
+
/**
|
|
211
|
+
* Check if git is installed and accessible
|
|
212
|
+
*/
|
|
213
|
+
export declare function checkGitInstalled(): boolean;
|
|
214
|
+
/**
|
|
215
|
+
* Get the main worktree root (not the current worktree).
|
|
216
|
+
* Useful when you need to access files that should be in the main worktree
|
|
217
|
+
* regardless of which worktree you're currently in.
|
|
218
|
+
*/
|
|
219
|
+
export declare function getMainWorktreeRoot(cwd?: string): string;
|
|
220
|
+
/**
|
|
221
|
+
* Check if a file is ignored by git
|
|
222
|
+
*/
|
|
223
|
+
export declare function isGitIgnored(filePath: string, cwd?: string): boolean;
|
|
224
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
|