sync-worktrees 0.6.0 → 1.1.0
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/README.md +64 -59
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/services/config-loader.service.d.ts +1 -1
- package/dist/services/config-loader.service.d.ts.map +1 -1
- package/dist/services/config-loader.service.js +29 -1
- package/dist/services/config-loader.service.js.map +1 -1
- package/dist/services/git.service.d.ts.map +1 -1
- package/dist/services/git.service.js +8 -22
- package/dist/services/git.service.js.map +1 -1
- package/dist/services/worktree-sync.service.d.ts.map +1 -1
- package/dist/services/worktree-sync.service.js +31 -17
- package/dist/services/worktree-sync.service.js.map +1 -1
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/retry.d.ts +10 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +46 -0
- package/dist/utils/retry.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
Automatically synchronize Git worktrees with remote branches. Keep your local worktrees in sync with remote repositories - perfect for multi-branch development workflows and automated testing setups.
|
|
4
4
|
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
## How it works
|
|
8
|
+
|
|
9
|
+
sync-worktrees maintains a **separate working directory for each remote branch**, all sharing the same Git repository:
|
|
10
|
+
|
|
11
|
+
1. **First run**: Clones your repository as a bare repository (no working files, just Git data)
|
|
12
|
+
2. **Automatic sync**:
|
|
13
|
+
- Creates a dedicated worktree for **every remote branch** (`main`, `develop`, `feature/*`, etc.)
|
|
14
|
+
- Each branch gets its own isolated directory with a full working copy
|
|
15
|
+
- Fetches latest changes (doesn't merge - preserves your local work)
|
|
16
|
+
- Removes worktrees when remote branches are deleted (preserves local changes)
|
|
17
|
+
|
|
18
|
+
**Why this matters**: Switch between branches instantly without stashing, run tests on multiple branches simultaneously, or keep your CI and production branches always ready.
|
|
19
|
+
|
|
5
20
|
## Features
|
|
6
21
|
|
|
7
22
|
- 🔄 Automatically creates worktrees for all remote branches
|
|
@@ -10,7 +25,7 @@ Automatically synchronize Git worktrees with remote branches. Keep your local wo
|
|
|
10
25
|
- 🛡️ Safe operations - won't delete worktrees with uncommitted changes or unpushed commits
|
|
11
26
|
- 📝 Clear logging with timestamps and progress indicators
|
|
12
27
|
- 📋 Config file support for managing multiple repositories
|
|
13
|
-
-
|
|
28
|
+
- 🔁 Automatic retry with exponential backoff for network and filesystem errors
|
|
14
29
|
|
|
15
30
|
## Installation
|
|
16
31
|
|
|
@@ -26,6 +41,20 @@ pnpm add -g sync-worktrees
|
|
|
26
41
|
|
|
27
42
|
## Usage
|
|
28
43
|
|
|
44
|
+
### Interactive Mode
|
|
45
|
+
|
|
46
|
+
When running without all required arguments, sync-worktrees will prompt you interactively:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Interactive setup - prompts for missing values
|
|
50
|
+
sync-worktrees
|
|
51
|
+
|
|
52
|
+
# Or provide partial arguments and be prompted for the rest
|
|
53
|
+
sync-worktrees --repoUrl https://github.com/user/repo.git
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Command Line
|
|
57
|
+
|
|
29
58
|
```bash
|
|
30
59
|
# Single repository (one-time sync)
|
|
31
60
|
sync-worktrees --repoUrl https://github.com/user/repo.git --worktreeDir ./worktrees --runOnce
|
|
@@ -88,6 +117,14 @@ module.exports = {
|
|
|
88
117
|
runOnce: false
|
|
89
118
|
},
|
|
90
119
|
|
|
120
|
+
// Retry configuration (optional - these are the defaults)
|
|
121
|
+
retry: {
|
|
122
|
+
maxAttempts: 'unlimited', // or a number like 5
|
|
123
|
+
initialDelayMs: 1000, // Start with 1 second
|
|
124
|
+
maxDelayMs: 600000, // Max 10 minutes between retries
|
|
125
|
+
backoffMultiplier: 2 // Double the delay each time
|
|
126
|
+
},
|
|
127
|
+
|
|
91
128
|
repositories: [
|
|
92
129
|
{
|
|
93
130
|
name: "frontend", // Unique identifier
|
|
@@ -98,8 +135,9 @@ module.exports = {
|
|
|
98
135
|
{
|
|
99
136
|
name: "backend",
|
|
100
137
|
repoUrl: process.env.BACKEND_REPO_URL, // Environment variables supported
|
|
101
|
-
worktreeDir: "/absolute/path/backend-worktrees"
|
|
138
|
+
worktreeDir: "/absolute/path/backend-worktrees",
|
|
102
139
|
// Uses default schedule
|
|
140
|
+
retry: { maxAttempts: 10 } // Override retry for this repo
|
|
103
141
|
}
|
|
104
142
|
]
|
|
105
143
|
};
|
|
@@ -110,72 +148,39 @@ module.exports = {
|
|
|
110
148
|
- `bareRepoDir` defaults to `.bare/<repo-name>` if not specified
|
|
111
149
|
- Repository-specific settings override defaults
|
|
112
150
|
|
|
113
|
-
|
|
151
|
+
### Retry Configuration
|
|
114
152
|
|
|
115
|
-
|
|
116
|
-
- Clones the repository as a bare repository (space-efficient, no working tree)
|
|
117
|
-
- Creates a main worktree for immediate use
|
|
118
|
-
- Stores bare repository in `.bare/<repo-name>` by default
|
|
119
|
-
2. **Synchronization**:
|
|
120
|
-
- Fetches latest changes from all remotes
|
|
121
|
-
- Creates worktrees for new remote branches
|
|
122
|
-
- Removes worktrees for deleted remote branches (only if they have no local changes and no unpushed commits)
|
|
123
|
-
- Prunes stale worktree metadata
|
|
153
|
+
The tool automatically retries on network errors and filesystem race conditions:
|
|
124
154
|
|
|
125
|
-
|
|
155
|
+
- **Default behavior**: Unlimited retries with exponential backoff (1s, 2s, 4s... up to 10 minutes)
|
|
156
|
+
- **Network errors**: Connection timeouts, DNS failures, repository access issues
|
|
157
|
+
- **Filesystem errors**: Busy files, permission issues, race conditions
|
|
126
158
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
# Run in development mode
|
|
143
|
-
pnpm dev -- --repoUrl https://github.com/user/repo.git --worktreeDir ./worktrees --runOnce
|
|
159
|
+
Simple retry examples:
|
|
160
|
+
```javascript
|
|
161
|
+
// Global retry configuration
|
|
162
|
+
retry: { maxAttempts: 5 } // Try 5 times then stop
|
|
163
|
+
retry: { maxAttempts: 'unlimited' } // Keep trying forever (default)
|
|
164
|
+
retry: { maxDelayMs: 60000 } // Cap retry delay at 1 minute
|
|
165
|
+
retry: { initialDelayMs: 5000 } // Start with 5 second delay
|
|
166
|
+
|
|
167
|
+
// Per-repository override
|
|
168
|
+
repositories: [{
|
|
169
|
+
name: "critical-repo",
|
|
170
|
+
// ... other config ...
|
|
171
|
+
retry: { maxAttempts: 'unlimited', initialDelayMs: 10000 }
|
|
172
|
+
}]
|
|
144
173
|
```
|
|
145
174
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
- `pnpm build` - Build the project
|
|
149
|
-
- `pnpm dev` - Run in development mode
|
|
150
|
-
- `pnpm test` - Run tests
|
|
151
|
-
- `pnpm test:watch` - Run tests in watch mode
|
|
152
|
-
- `pnpm test:coverage` - Run tests with coverage report
|
|
153
|
-
- `pnpm lint` - Check linting
|
|
154
|
-
- `pnpm lint:fix` - Auto-fix linting errors
|
|
155
|
-
- `pnpm typecheck` - Run type checking
|
|
156
|
-
- `pnpm changeset` - Create a changeset for your changes
|
|
157
|
-
- `pnpm version` - Update versions based on changesets
|
|
158
|
-
- `pnpm release` - Build and publish to npm
|
|
159
|
-
|
|
160
|
-
### Testing
|
|
175
|
+
## Requirements
|
|
161
176
|
|
|
162
|
-
|
|
177
|
+
- Node.js >= 22.0.0
|
|
178
|
+
- Git
|
|
163
179
|
|
|
164
180
|
## Contributing
|
|
165
181
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
### Making Changes
|
|
169
|
-
|
|
170
|
-
1. Make your changes and commit them
|
|
171
|
-
2. Write tests for your changes using the test utilities in `src/__tests__/test-utils.ts`
|
|
172
|
-
3. Run `pnpm changeset` to create a changeset describing your changes
|
|
173
|
-
4. Select the appropriate version bump type (patch/minor/major)
|
|
174
|
-
5. Write a summary of your changes for the changelog
|
|
175
|
-
6. Commit the generated changeset file
|
|
176
|
-
|
|
177
|
-
The CI will automatically create a PR to update versions when changesets are merged to main, and will publish to npm when that PR is merged.
|
|
182
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
178
183
|
|
|
179
184
|
## License
|
|
180
185
|
|
|
181
|
-
MIT © [Yordan Kanchelov](https://github.com/yordan-kanchelov)
|
|
186
|
+
MIT © [Yordan Kanchelov](https://github.com/yordan-kanchelov)
|
package/dist/index.js
CHANGED
|
@@ -162,7 +162,7 @@ async function main() {
|
|
|
162
162
|
try {
|
|
163
163
|
const configFile = await configLoader.loadConfigFile(options.config);
|
|
164
164
|
const configDir = path.dirname(path.resolve(options.config));
|
|
165
|
-
let repositories = configFile.repositories.map((repo) => configLoader.resolveRepositoryConfig(repo, configFile.defaults, configDir));
|
|
165
|
+
let repositories = configFile.repositories.map((repo) => configLoader.resolveRepositoryConfig(repo, configFile.defaults, configDir, configFile.retry));
|
|
166
166
|
if (options.filter) {
|
|
167
167
|
repositories = configLoader.filterRepositories(repositories, options.filter);
|
|
168
168
|
if (repositories.length === 0) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { Config, ConfigFile, RepositoryConfig } from "../types";
|
|
|
2
2
|
export declare class ConfigLoaderService {
|
|
3
3
|
loadConfigFile(configPath: string): Promise<ConfigFile>;
|
|
4
4
|
private validateConfigFile;
|
|
5
|
-
resolveRepositoryConfig(repo: RepositoryConfig, defaults?: Partial<Config>, configDir?: string): RepositoryConfig;
|
|
5
|
+
resolveRepositoryConfig(repo: RepositoryConfig, defaults?: Partial<Config>, configDir?: string, globalRetry?: Config["retry"]): RepositoryConfig;
|
|
6
6
|
private resolvePath;
|
|
7
7
|
filterRepositories(repositories: RepositoryConfig[], filter?: string): RepositoryConfig[];
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.service.d.ts","sourceRoot":"","sources":["../../src/services/config-loader.service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErE,qBAAa,mBAAmB;IACxB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB7D,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"config-loader.service.d.ts","sourceRoot":"","sources":["../../src/services/config-loader.service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErE,qBAAa,mBAAmB;IACxB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB7D,OAAO,CAAC,kBAAkB;IAsG1B,uBAAuB,CACrB,IAAI,EAAE,gBAAgB,EACtB,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAC1B,SAAS,CAAC,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,GAC5B,gBAAgB;IAoBnB,OAAO,CAAC,WAAW;IAQnB,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE;CAiB1F"}
|
|
@@ -110,9 +110,34 @@ class ConfigLoaderService {
|
|
|
110
110
|
if (defaults.runOnce !== undefined && typeof defaults.runOnce !== "boolean") {
|
|
111
111
|
throw new Error("Invalid 'runOnce' in defaults");
|
|
112
112
|
}
|
|
113
|
+
if (defaults.retry !== undefined && typeof defaults.retry !== "object") {
|
|
114
|
+
throw new Error("Invalid 'retry' in defaults");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (configObj.retry !== undefined) {
|
|
118
|
+
if (typeof configObj.retry !== "object") {
|
|
119
|
+
throw new Error("'retry' must be an object");
|
|
120
|
+
}
|
|
121
|
+
const retry = configObj.retry;
|
|
122
|
+
if (retry.maxAttempts !== undefined) {
|
|
123
|
+
if (retry.maxAttempts !== "unlimited" && (typeof retry.maxAttempts !== "number" || retry.maxAttempts < 1)) {
|
|
124
|
+
throw new Error("Invalid 'maxAttempts' in retry config. Must be 'unlimited' or a positive number");
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (retry.initialDelayMs !== undefined &&
|
|
128
|
+
(typeof retry.initialDelayMs !== "number" || retry.initialDelayMs < 0)) {
|
|
129
|
+
throw new Error("Invalid 'initialDelayMs' in retry config");
|
|
130
|
+
}
|
|
131
|
+
if (retry.maxDelayMs !== undefined && (typeof retry.maxDelayMs !== "number" || retry.maxDelayMs < 0)) {
|
|
132
|
+
throw new Error("Invalid 'maxDelayMs' in retry config");
|
|
133
|
+
}
|
|
134
|
+
if (retry.backoffMultiplier !== undefined &&
|
|
135
|
+
(typeof retry.backoffMultiplier !== "number" || retry.backoffMultiplier < 1)) {
|
|
136
|
+
throw new Error("Invalid 'backoffMultiplier' in retry config");
|
|
137
|
+
}
|
|
113
138
|
}
|
|
114
139
|
}
|
|
115
|
-
resolveRepositoryConfig(repo, defaults, configDir) {
|
|
140
|
+
resolveRepositoryConfig(repo, defaults, configDir, globalRetry) {
|
|
116
141
|
const resolved = {
|
|
117
142
|
name: repo.name,
|
|
118
143
|
repoUrl: repo.repoUrl,
|
|
@@ -123,6 +148,9 @@ class ConfigLoaderService {
|
|
|
123
148
|
if (repo.bareRepoDir) {
|
|
124
149
|
resolved.bareRepoDir = this.resolvePath(repo.bareRepoDir, configDir);
|
|
125
150
|
}
|
|
151
|
+
if (repo.retry || defaults?.retry || globalRetry) {
|
|
152
|
+
resolved.retry = { ...globalRetry, ...defaults?.retry, ...repo.retry };
|
|
153
|
+
}
|
|
126
154
|
return resolved;
|
|
127
155
|
}
|
|
128
156
|
resolvePath(inputPath, baseDir) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.service.js","sourceRoot":"","sources":["../../src/services/config-loader.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config-loader.service.js","sourceRoot":"","sources":["../../src/services/config-loader.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAI7B,MAAa,mBAAmB;IAC9B,KAAK,CAAC,cAAc,CAAC,UAAkB;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACnC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC;YAEpD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAEhC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBAC9E,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,+BAAgC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,MAAe;QACxC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,SAAS,GAAG,MAAiC,CAAC;QAEpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAEpC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAa,EAAE,KAAa,EAAE,EAAE;YAC9D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,oBAAoB,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,OAAO,GAAG,IAA+B,CAAC;YAEhD,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,8BAA8B,CAAC,CAAC;YAC9E,CAAC;YAED,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE5B,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5D,MAAM,IAAI,KAAK,CAAC,eAAe,OAAO,CAAC,IAAI,kCAAkC,CAAC,CAAC;YACjF,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,eAAe,OAAO,CAAC,IAAI,sCAAsC,CAAC,CAAC;YACrF,CAAC;YAED,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACjF,MAAM,IAAI,KAAK,CAAC,eAAe,OAAO,CAAC,IAAI,sCAAsC,CAAC,CAAC;YACrF,CAAC;YAED,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACnF,MAAM,IAAI,KAAK,CAAC,eAAe,OAAO,CAAC,IAAI,uCAAuC,CAAC,CAAC;YACtF,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1E,MAAM,IAAI,KAAK,CAAC,eAAe,OAAO,CAAC,IAAI,kCAAkC,CAAC,CAAC;YACjF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACvB,IAAI,OAAO,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAmC,CAAC;YAE/D,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACrF,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC5E,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACvE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,KAAK,GAAG,SAAS,CAAC,KAAgC,CAAC;YAEzD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACpC,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC;oBAC1G,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;gBACrG,CAAC;YACH,CAAC;YACD,IACE,KAAK,CAAC,cAAc,KAAK,SAAS;gBAClC,CAAC,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,EACtE,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;gBACrG,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,IACE,KAAK,CAAC,iBAAiB,KAAK,SAAS;gBACrC,CAAC,OAAO,KAAK,CAAC,iBAAiB,KAAK,QAAQ,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAC5E,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB,CACrB,IAAsB,EACtB,QAA0B,EAC1B,SAAkB,EAClB,WAA6B;QAE7B,MAAM,QAAQ,GAAqB;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;YAC1D,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE,YAAY,IAAI,WAAW;YACxE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE,OAAO,IAAI,KAAK;SACpD,CAAC;QAEF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,WAAW,EAAE,CAAC;YACjD,QAAQ,CAAC,KAAK,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACzE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,WAAW,CAAC,SAAiB,EAAE,OAAgB;QACrD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED,kBAAkB,CAAC,YAAgC,EAAE,MAAe;QAClE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAExD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAClC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC/B,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;oBACnE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,CAAC;gBACD,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAlLD,kDAkLC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.service.d.ts","sourceRoot":"","sources":["../../src/services/git.service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,qBAAa,UAAU;IAKT,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAS;gBAEb,MAAM,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"git.service.d.ts","sourceRoot":"","sources":["../../src/services/git.service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,qBAAa,UAAU;IAKT,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAS;gBAEb,MAAM,EAAE,MAAM;IAK5B,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;IAsDtC,MAAM,IAAI,SAAS;IAOb,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMzB,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAMtC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpE,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3D,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB1D,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAMnC,YAAY,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;YAKnD,oBAAoB;CA4BnC"}
|
|
@@ -48,16 +48,7 @@ class GitService {
|
|
|
48
48
|
mainWorktreePath;
|
|
49
49
|
constructor(config) {
|
|
50
50
|
this.config = config;
|
|
51
|
-
|
|
52
|
-
if (!this.config.bareRepoDir.trim()) {
|
|
53
|
-
throw new Error("Invalid bare repository path: path cannot be empty");
|
|
54
|
-
}
|
|
55
|
-
this.bareRepoPath = path.resolve(this.config.bareRepoDir);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
const defaultBareDir = (0, git_url_1.getDefaultBareRepoDir)(this.config.repoUrl);
|
|
59
|
-
this.bareRepoPath = path.resolve(defaultBareDir);
|
|
60
|
-
}
|
|
51
|
+
this.bareRepoPath = this.config.bareRepoDir || (0, git_url_1.getDefaultBareRepoDir)(this.config.repoUrl);
|
|
61
52
|
this.mainWorktreePath = path.join(this.config.worktreeDir, "main");
|
|
62
53
|
}
|
|
63
54
|
async initialize() {
|
|
@@ -70,28 +61,23 @@ class GitService {
|
|
|
70
61
|
catch {
|
|
71
62
|
// Clone as bare repository
|
|
72
63
|
console.log(`Cloning from "${repoUrl}" as bare repository into "${this.bareRepoPath}"...`);
|
|
73
|
-
|
|
74
|
-
// Check if bareRepoPath is a root directory or if parent directory is the same as bareRepoPath
|
|
75
|
-
if (parentDir === this.bareRepoPath || parentDir === "/" || /^[A-Za-z]:[\\/]?$/.test(parentDir)) {
|
|
76
|
-
throw new Error(`Invalid bare repository path: "${this.bareRepoPath}" is a root directory or has invalid parent directory`);
|
|
77
|
-
}
|
|
78
|
-
await fs.mkdir(parentDir, { recursive: true });
|
|
64
|
+
await fs.mkdir(path.dirname(this.bareRepoPath), { recursive: true });
|
|
79
65
|
await (0, simple_git_1.default)().clone(repoUrl, this.bareRepoPath, ["--bare"]);
|
|
80
66
|
console.log("✅ Clone successful.");
|
|
81
67
|
}
|
|
82
68
|
// Configure bare repository for worktrees
|
|
83
69
|
const bareGit = (0, simple_git_1.default)(this.bareRepoPath);
|
|
84
|
-
// Check if
|
|
85
|
-
const fetchRefspec = "+refs/heads/*:refs/remotes/origin/*";
|
|
70
|
+
// Check if fetch config already exists
|
|
86
71
|
try {
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
72
|
+
const existingConfig = await bareGit.raw(["config", "--get-all", "remote.origin.fetch"]);
|
|
73
|
+
const targetConfig = "+refs/heads/*:refs/remotes/origin/*";
|
|
74
|
+
if (!existingConfig.includes(targetConfig)) {
|
|
75
|
+
await bareGit.addConfig("remote.origin.fetch", targetConfig);
|
|
90
76
|
}
|
|
91
77
|
}
|
|
92
78
|
catch {
|
|
93
79
|
// Config doesn't exist, add it
|
|
94
|
-
await bareGit.addConfig("remote.origin.fetch",
|
|
80
|
+
await bareGit.addConfig("remote.origin.fetch", "+refs/heads/*:refs/remotes/origin/*");
|
|
95
81
|
}
|
|
96
82
|
// Check if main worktree exists
|
|
97
83
|
let needsMainWorktree = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.service.js","sourceRoot":"","sources":["../../src/services/git.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAE7B,4DAAmC;AAEnC,8CAAyD;AAKzD,MAAa,UAAU;IAKD;IAJZ,GAAG,GAAqB,IAAI,CAAC;IAC7B,YAAY,CAAS;IACrB,gBAAgB,CAAS;IAEjC,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAChC,IAAI,
|
|
1
|
+
{"version":3,"file":"git.service.js","sourceRoot":"","sources":["../../src/services/git.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-sync.service.d.ts","sourceRoot":"","sources":["../../src/services/worktree-sync.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worktree-sync.service.d.ts","sourceRoot":"","sources":["../../src/services/worktree-sync.service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,UAAU,CAAa;gBAEX,MAAM,EAAE,MAAM;IAI5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAiDb,kBAAkB;YAoBlB,iBAAiB;YAgCjB,0BAA0B;CAuCzC"}
|
|
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.WorktreeSyncService = void 0;
|
|
37
37
|
const fs = __importStar(require("fs/promises"));
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
|
+
const retry_1 = require("../utils/retry");
|
|
39
40
|
const git_service_1 = require("./git.service");
|
|
40
41
|
class WorktreeSyncService {
|
|
41
42
|
config;
|
|
@@ -49,26 +50,39 @@ class WorktreeSyncService {
|
|
|
49
50
|
}
|
|
50
51
|
async sync() {
|
|
51
52
|
console.log(`[${new Date().toISOString()}] Starting worktree synchronization...`);
|
|
53
|
+
const retryOptions = {
|
|
54
|
+
maxAttempts: this.config.retry?.maxAttempts ?? 3,
|
|
55
|
+
initialDelayMs: this.config.retry?.initialDelayMs ?? 1000,
|
|
56
|
+
maxDelayMs: this.config.retry?.maxDelayMs ?? 30000,
|
|
57
|
+
backoffMultiplier: this.config.retry?.backoffMultiplier ?? 2,
|
|
58
|
+
onRetry: (error, attempt) => {
|
|
59
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
60
|
+
console.log(`\n⚠️ Sync attempt ${attempt} failed: ${errorMessage}`);
|
|
61
|
+
console.log(`🔄 Retrying synchronization...\n`);
|
|
62
|
+
},
|
|
63
|
+
};
|
|
52
64
|
try {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
await (0, retry_1.retry)(async () => {
|
|
66
|
+
console.log("Step 1: Fetching latest data from remote...");
|
|
67
|
+
await this.gitService.fetchAll();
|
|
68
|
+
const remoteBranches = await this.gitService.getRemoteBranches();
|
|
69
|
+
console.log(`Found ${remoteBranches.length} remote branches.`);
|
|
70
|
+
await fs.mkdir(this.config.worktreeDir, { recursive: true });
|
|
71
|
+
// Get actual Git worktrees instead of just directories
|
|
72
|
+
const worktrees = await this.gitService.getWorktrees();
|
|
73
|
+
const worktreeBranches = worktrees.map((w) => w.branch);
|
|
74
|
+
console.log(`Found ${worktrees.length} existing Git worktrees.`);
|
|
75
|
+
// Clean up orphaned directories
|
|
76
|
+
await this.cleanupOrphanedDirectories(worktrees);
|
|
77
|
+
const currentBranch = await this.gitService.getCurrentBranch();
|
|
78
|
+
await this.createNewWorktrees(remoteBranches, worktreeBranches, currentBranch);
|
|
79
|
+
await this.pruneOldWorktrees(remoteBranches, worktreeBranches);
|
|
80
|
+
await this.gitService.pruneWorktrees();
|
|
81
|
+
console.log("Step 4: Pruned worktree metadata.");
|
|
82
|
+
}, retryOptions);
|
|
69
83
|
}
|
|
70
84
|
catch (error) {
|
|
71
|
-
console.error("Error during worktree synchronization:", error);
|
|
85
|
+
console.error("\n❌ Error during worktree synchronization after all retry attempts:", error);
|
|
72
86
|
throw error;
|
|
73
87
|
}
|
|
74
88
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-sync.service.js","sourceRoot":"","sources":["../../src/services/worktree-sync.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAE7B,+CAA2C;
|
|
1
|
+
{"version":3,"file":"worktree-sync.service.js","sourceRoot":"","sources":["../../src/services/worktree-sync.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAE7B,0CAAuC;AAEvC,+CAA2C;AAK3C,MAAa,mBAAmB;IAGV;IAFZ,UAAU,CAAa;IAE/B,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,wCAAwC,CAAC,CAAC;QAElF,MAAM,YAAY,GAAiB;YACjC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC;YAChD,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,IAAI,IAAI;YACzD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,IAAI,KAAK;YAClD,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,iBAAiB,IAAI,CAAC;YAC5D,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC1B,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5E,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,YAAY,YAAY,EAAE,CAAC,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAClD,CAAC;SACF,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAA,aAAK,EAAC,KAAK,IAAI,EAAE;gBACrB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBAC3D,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAEjC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,SAAS,cAAc,CAAC,MAAM,mBAAmB,CAAC,CAAC;gBAE/D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAE7D,uDAAuD;gBACvD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;gBACvD,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,SAAS,SAAS,CAAC,MAAM,0BAA0B,CAAC,CAAC;gBAEjE,gCAAgC;gBAChC,MAAM,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;gBAEjD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;gBAC/D,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;gBAE/E,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;gBAE/D,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACnD,CAAC,EAAE,YAAY,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qEAAqE,EAAE,KAAK,CAAC,CAAC;YAC5F,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,cAAwB,EACxB,wBAAkC,EAClC,aAAqB;QAErB,MAAM,WAAW,GAAG,cAAc;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aACpD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC;QAEtC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,uCAAuC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7E,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;gBACpE,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,cAAwB,EAAE,wBAAkC;QAC1F,MAAM,eAAe,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAEtG,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,kDAAkD,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE5F,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,CAAC;gBACzC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;gBAEpE,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;oBACxE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;oBAE3E,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;wBAC5B,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;oBACrD,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,OAAO,EAAE,CAAC;4BACb,OAAO,CAAC,GAAG,CAAC,+BAA+B,UAAU,kCAAkC,CAAC,CAAC;wBAC3F,CAAC;wBACD,IAAI,WAAW,EAAE,CAAC;4BAChB,OAAO,CAAC,GAAG,CAAC,+BAA+B,UAAU,+BAA+B,CAAC,CAAC;wBACxF,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,UAAU,IAAI,EAAE,KAAK,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,SAA6C;QACpF,IAAI,CAAC;YACH,MAAM,qBAAqB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACnG,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAE1D,8DAA8D;YAC9D,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,uDAAuD;gBACvD,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE;oBACnE,oEAAoE;oBACpE,OAAO,YAAY,KAAK,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzE,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,MAAM,0BAA0B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAE7F,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBACxD,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBACpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;4BACvB,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;4BACvD,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC;wBACxD,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC1E,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;CACF;AAvJD,kDAuJC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
export interface RetryConfig {
|
|
2
|
+
maxAttempts?: number | "unlimited";
|
|
3
|
+
initialDelayMs?: number;
|
|
4
|
+
maxDelayMs?: number;
|
|
5
|
+
backoffMultiplier?: number;
|
|
6
|
+
}
|
|
1
7
|
export interface Config {
|
|
2
8
|
repoUrl: string;
|
|
3
9
|
worktreeDir: string;
|
|
4
10
|
cronSchedule: string;
|
|
5
11
|
runOnce: boolean;
|
|
6
12
|
bareRepoDir?: string;
|
|
13
|
+
retry?: RetryConfig;
|
|
7
14
|
}
|
|
8
15
|
export interface RepositoryConfig extends Config {
|
|
9
16
|
name: string;
|
|
@@ -11,6 +18,7 @@ export interface RepositoryConfig extends Config {
|
|
|
11
18
|
export interface ConfigFile {
|
|
12
19
|
defaults?: Partial<Config>;
|
|
13
20
|
repositories: RepositoryConfig[];
|
|
21
|
+
retry?: RetryConfig;
|
|
14
22
|
}
|
|
15
23
|
export interface WorktreeStatus {
|
|
16
24
|
branchName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,gBAAiB,SAAQ,MAAM;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3B,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC1B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface RetryOptions {
|
|
2
|
+
maxAttempts?: number | "unlimited";
|
|
3
|
+
initialDelayMs?: number;
|
|
4
|
+
maxDelayMs?: number;
|
|
5
|
+
backoffMultiplier?: number;
|
|
6
|
+
shouldRetry?: (error: unknown) => boolean;
|
|
7
|
+
onRetry?: (error: unknown, attempt: number) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function retry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
10
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AA8BD,wBAAsB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAsB3F"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.retry = retry;
|
|
4
|
+
const DEFAULT_OPTIONS = {
|
|
5
|
+
maxAttempts: "unlimited",
|
|
6
|
+
initialDelayMs: 1000,
|
|
7
|
+
maxDelayMs: 600000, // 10 minutes
|
|
8
|
+
backoffMultiplier: 2,
|
|
9
|
+
shouldRetry: (error) => {
|
|
10
|
+
const err = error;
|
|
11
|
+
if (err.code === "ENOTFOUND" || err.code === "ECONNREFUSED" || err.code === "ETIMEDOUT") {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
if (err.code === "EBUSY" || err.code === "ENOENT" || err.code === "EACCES") {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
if (err.message?.includes("Could not read from remote repository")) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
if (err.message?.includes("fatal: unable to access")) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
},
|
|
25
|
+
onRetry: () => { },
|
|
26
|
+
};
|
|
27
|
+
async function retry(fn, options = {}) {
|
|
28
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
29
|
+
let attempt = 1;
|
|
30
|
+
while (true) {
|
|
31
|
+
try {
|
|
32
|
+
return await fn();
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
const isLastAttempt = opts.maxAttempts !== "unlimited" && attempt >= opts.maxAttempts;
|
|
36
|
+
if (isLastAttempt || !opts.shouldRetry(error)) {
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
const delay = Math.min(opts.initialDelayMs * Math.pow(opts.backoffMultiplier, attempt - 1), opts.maxDelayMs);
|
|
40
|
+
opts.onRetry(error, attempt);
|
|
41
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
42
|
+
attempt++;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":";;AA0CA,sBAsBC;AAlDD,MAAM,eAAe,GAAwF;IAC3G,WAAW,EAAE,WAAW;IACxB,cAAc,EAAE,IAAI;IACpB,UAAU,EAAE,MAAM,EAAE,aAAa;IACjC,iBAAiB,EAAE,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,KAAsB,CAAC;QACnC,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACxF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,uCAAuC,CAAC,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;CAClB,CAAC;AAEK,KAAK,UAAU,KAAK,CAAI,EAAoB,EAAE,UAAwB,EAAE;IAC7E,MAAM,IAAI,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;IAChD,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,KAAK,WAAW,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC;YAEtF,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAE7G,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE7B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC3D,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sync-worktrees",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Automatically synchronize Git worktrees with remote branches - perfect for multi-branch development workflows",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"watch": "tsc --watch",
|
|
68
68
|
"lint": "eslint .",
|
|
69
69
|
"lint:fix": "eslint . --fix",
|
|
70
|
-
"typecheck": "tsc --noEmit",
|
|
70
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.spec.json",
|
|
71
71
|
"test": "jest",
|
|
72
72
|
"test:watch": "jest --watch",
|
|
73
73
|
"test:coverage": "jest --coverage",
|