geeto 0.9.0 → 0.9.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.
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Interactive git submodule manager
3
+ * Add, list, update, remove, and sync submodules
4
+ */
5
+ import { askQuestion, confirm } from '../cli/input.js';
6
+ import { multiSelect, select } from '../cli/menu.js';
7
+ import { colors } from '../utils/colors.js';
8
+ import { exec, execAsync, execSilent } from '../utils/exec.js';
9
+ import { log } from '../utils/logging.js';
10
+ // ─── Helpers ────────────────────────────────────────────────────
11
+ /**
12
+ * Parse `git submodule status` output into structured entries.
13
+ * Status prefixes: ' ' = init, '-' = not init, '+' = changed, 'U' = conflict
14
+ */
15
+ const getSubmodules = () => {
16
+ try {
17
+ const statusOut = execSilent('git submodule status --recursive').trim();
18
+ if (!statusOut)
19
+ return [];
20
+ return statusOut
21
+ .split('\n')
22
+ .filter(Boolean)
23
+ .map((line) => {
24
+ const prefix = line.charAt(0);
25
+ const rest = line.slice(1).trim();
26
+ const parts = rest.split(/\s+/);
27
+ const sha = parts[0] ?? '';
28
+ const subPath = parts[1] ?? '';
29
+ let url = '';
30
+ let branch = '';
31
+ try {
32
+ url = execSilent(`git config --file .gitmodules --get submodule.${subPath}.url`).trim();
33
+ branch =
34
+ execSilent(`git config --file .gitmodules --get submodule.${subPath}.branch`).trim() ||
35
+ '';
36
+ }
37
+ catch {
38
+ // .gitmodules may not have branch key
39
+ }
40
+ let status = 'up-to-date';
41
+ let statusIcon = `${colors.green}✓${colors.reset}`;
42
+ switch (prefix) {
43
+ case '-': {
44
+ status = 'uninitialized';
45
+ statusIcon = `${colors.gray}○${colors.reset}`;
46
+ break;
47
+ }
48
+ case '+': {
49
+ status = 'modified';
50
+ statusIcon = `${colors.yellow}●${colors.reset}`;
51
+ break;
52
+ }
53
+ case 'U': {
54
+ status = 'conflict';
55
+ statusIcon = `${colors.red}✗${colors.reset}`;
56
+ break;
57
+ }
58
+ // No default
59
+ }
60
+ return { path: subPath, url, branch, sha: sha.slice(0, 8), status, statusIcon };
61
+ });
62
+ }
63
+ catch {
64
+ return [];
65
+ }
66
+ };
67
+ /**
68
+ * Render submodule list with status indicators
69
+ */
70
+ const renderSubmodules = (submodules) => {
71
+ for (const [i, sm] of submodules.entries()) {
72
+ const connector = i === submodules.length - 1 ? '╰' : '├';
73
+ const pipe = i === submodules.length - 1 ? ' ' : '│';
74
+ const pathStr = `${colors.bright}${sm.path}${colors.reset}`;
75
+ const shaStr = `${colors.yellow}${sm.sha}${colors.reset}`;
76
+ const branchStr = sm.branch
77
+ ? ` ${colors.gray}→${colors.reset} ${colors.green}${sm.branch}${colors.reset}`
78
+ : '';
79
+ console.log(` ${colors.gray}${connector}─${colors.reset} ${sm.statusIcon} ${pathStr} ${shaStr}${branchStr}`);
80
+ console.log(` ${colors.gray}${pipe}${colors.reset} ${colors.gray}${sm.url}${colors.reset}`);
81
+ if (i < submodules.length - 1) {
82
+ console.log(` ${colors.gray}│${colors.reset}`);
83
+ }
84
+ }
85
+ };
86
+ // ─── Actions ────────────────────────────────────────────────────
87
+ const handleAdd = async () => {
88
+ if (process.stdin.isTTY) {
89
+ process.stdin.setRawMode(false);
90
+ }
91
+ const url = askQuestion('Repository URL: ').trim();
92
+ if (!url) {
93
+ log.warn('No URL provided.');
94
+ return;
95
+ }
96
+ const defaultPath = url
97
+ .split('/')
98
+ .pop()
99
+ ?.replace(/\.git$/, '') ?? '';
100
+ const subPath = askQuestion(`Path (default: ${defaultPath}): `).trim() || defaultPath;
101
+ const branch = askQuestion('Track branch (optional, press Enter to skip): ').trim();
102
+ let cmd = `git submodule add`;
103
+ if (branch)
104
+ cmd += ` -b ${branch}`;
105
+ cmd += ` "${url}" "${subPath}"`;
106
+ const spinner = log.spinner();
107
+ spinner.start('Adding submodule...');
108
+ try {
109
+ await execAsync(cmd, true);
110
+ spinner.succeed(`Submodule added at ${colors.green}${subPath}${colors.reset}`);
111
+ }
112
+ catch {
113
+ spinner.fail('Failed to add submodule');
114
+ }
115
+ };
116
+ const handleInit = async (submodules) => {
117
+ const uninit = submodules.filter((sm) => sm.status === 'uninitialized');
118
+ if (uninit.length === 0) {
119
+ log.info('All submodules are already initialized.');
120
+ return;
121
+ }
122
+ const selected = await multiSelect(`Select submodules to initialize (${uninit.length} uninitialized):`, uninit.map((sm) => ({
123
+ label: `${colors.gray}○${colors.reset} ${sm.path} ${colors.gray}${sm.url}${colors.reset}`,
124
+ value: sm.path,
125
+ })), uninit.map((sm) => sm.path));
126
+ if (selected.length === 0)
127
+ return;
128
+ const spinner = log.spinner();
129
+ spinner.start('Initializing submodules...');
130
+ try {
131
+ for (const p of selected) {
132
+ exec(`git submodule init "${p}"`, true);
133
+ }
134
+ await execAsync(`git submodule update ${selected.map((p) => `"${p}"`).join(' ')}`, true);
135
+ spinner.succeed(`${selected.length} submodule(s) initialized`);
136
+ }
137
+ catch {
138
+ spinner.fail('Failed to initialize submodules');
139
+ }
140
+ };
141
+ const handleUpdate = async (submodules) => {
142
+ const initialized = submodules.filter((sm) => sm.status !== 'uninitialized');
143
+ if (initialized.length === 0) {
144
+ log.warn('No initialized submodules to update.');
145
+ return;
146
+ }
147
+ const mode = await select('Update mode:', [
148
+ { label: 'Update to recorded commit (safe)', value: 'checkout' },
149
+ { label: 'Update to latest remote (--remote)', value: 'remote' },
150
+ { label: 'Cancel', value: 'cancel' },
151
+ ]);
152
+ if (mode === 'cancel')
153
+ return;
154
+ const scope = await select('Scope:', [
155
+ { label: `All submodules (${initialized.length})`, value: 'all' },
156
+ { label: 'Select specific submodules', value: 'pick' },
157
+ { label: 'Cancel', value: 'cancel' },
158
+ ]);
159
+ if (scope === 'cancel')
160
+ return;
161
+ let targets = [];
162
+ if (scope === 'pick') {
163
+ targets = await multiSelect('Select submodules to update:', initialized.map((sm) => ({
164
+ label: `${sm.statusIcon} ${sm.path} ${colors.gray}${sm.sha}${colors.reset}`,
165
+ value: sm.path,
166
+ })));
167
+ if (targets.length === 0)
168
+ return;
169
+ }
170
+ let cmd = 'git submodule update --recursive';
171
+ if (mode === 'remote')
172
+ cmd += ' --remote';
173
+ if (targets.length > 0) {
174
+ cmd += ' ' + targets.map((p) => `"${p}"`).join(' ');
175
+ }
176
+ const spinner = log.spinner();
177
+ spinner.start('Updating submodules...');
178
+ try {
179
+ await execAsync(cmd, true);
180
+ spinner.succeed('Submodules updated!');
181
+ }
182
+ catch {
183
+ spinner.fail('Failed to update submodules');
184
+ }
185
+ };
186
+ const handleRemove = async (submodules) => {
187
+ if (submodules.length === 0) {
188
+ log.warn('No submodules to remove.');
189
+ return;
190
+ }
191
+ const selected = await multiSelect('Select submodules to remove:', submodules.map((sm) => ({
192
+ label: `${sm.statusIcon} ${sm.path} ${colors.gray}${sm.url}${colors.reset}`,
193
+ value: sm.path,
194
+ })));
195
+ if (selected.length === 0)
196
+ return;
197
+ const sure = confirm(`Remove ${selected.length} submodule(s)? This will deinit and delete the directories.`);
198
+ if (!sure)
199
+ return;
200
+ const spinner = log.spinner();
201
+ spinner.start('Removing submodules...');
202
+ try {
203
+ for (const p of selected) {
204
+ exec(`git submodule deinit -f "${p}"`, true);
205
+ exec(`git rm -f "${p}"`, true);
206
+ // Clean .git/modules cache
207
+ try {
208
+ exec(`rm -rf ".git/modules/${p}"`, true);
209
+ }
210
+ catch {
211
+ // May not exist, ignore
212
+ }
213
+ }
214
+ spinner.succeed(`${selected.length} submodule(s) removed`);
215
+ log.info('Run `git commit` to finalize the removal.');
216
+ }
217
+ catch {
218
+ spinner.fail('Failed to remove submodules');
219
+ }
220
+ };
221
+ const handleSync = async (submodules) => {
222
+ if (submodules.length === 0) {
223
+ log.warn('No submodules to sync.');
224
+ return;
225
+ }
226
+ const scope = await select('Sync scope:', [
227
+ { label: `All submodules (${submodules.length})`, value: 'all' },
228
+ { label: 'Select specific submodules', value: 'pick' },
229
+ { label: 'Cancel', value: 'cancel' },
230
+ ]);
231
+ if (scope === 'cancel')
232
+ return;
233
+ let targets = [];
234
+ if (scope === 'pick') {
235
+ targets = await multiSelect('Select submodules to sync:', submodules.map((sm) => ({
236
+ label: `${sm.statusIcon} ${sm.path} ${colors.gray}${sm.url}${colors.reset}`,
237
+ value: sm.path,
238
+ })));
239
+ if (targets.length === 0)
240
+ return;
241
+ }
242
+ let cmd = 'git submodule sync --recursive';
243
+ if (targets.length > 0) {
244
+ cmd += ' ' + targets.map((p) => `"${p}"`).join(' ');
245
+ }
246
+ const spinner = log.spinner();
247
+ spinner.start('Syncing submodule URLs...');
248
+ try {
249
+ await execAsync(cmd, true);
250
+ spinner.succeed('Submodule URLs synced!');
251
+ log.info('Remote URLs updated from .gitmodules to .git/config');
252
+ }
253
+ catch {
254
+ spinner.fail('Failed to sync submodules');
255
+ }
256
+ };
257
+ // ─── Main Handler ───────────────────────────────────────────────
258
+ export const handleSubmodules = async () => {
259
+ log.banner();
260
+ log.step(`${colors.cyan}Submodule Manager${colors.reset}\n`);
261
+ let keepGoing = true;
262
+ while (keepGoing) {
263
+ const submodules = getSubmodules();
264
+ const hasSubmodules = submodules.length > 0;
265
+ if (hasSubmodules) {
266
+ const uninit = submodules.filter((sm) => sm.status === 'uninitialized').length;
267
+ const modified = submodules.filter((sm) => sm.status === 'modified').length;
268
+ console.log(` ${colors.gray}╭── Submodules (${submodules.length}) ──${colors.reset}`);
269
+ console.log(` ${colors.gray}│${colors.reset}`);
270
+ renderSubmodules(submodules);
271
+ console.log('');
272
+ if (uninit > 0 || modified > 0) {
273
+ const parts = [];
274
+ if (uninit > 0)
275
+ parts.push(`${colors.gray}${uninit} uninitialized${colors.reset}`);
276
+ if (modified > 0)
277
+ parts.push(`${colors.yellow}${modified} modified${colors.reset}`);
278
+ log.info(parts.join(' '));
279
+ console.log('');
280
+ }
281
+ }
282
+ else {
283
+ log.info('No submodules found in this repository.');
284
+ console.log('');
285
+ }
286
+ const menuOptions = [
287
+ { label: `${colors.green}+ Add${colors.reset} — add new submodule`, value: 'add' },
288
+ ];
289
+ if (hasSubmodules) {
290
+ const uninit = submodules.filter((sm) => sm.status === 'uninitialized');
291
+ if (uninit.length > 0) {
292
+ menuOptions.push({
293
+ label: `${colors.cyan}⚙ Init${colors.reset} — initialize submodules (${uninit.length} pending)`,
294
+ value: 'init',
295
+ });
296
+ }
297
+ menuOptions.push({
298
+ label: `${colors.yellow}⚡ Update${colors.reset} — fetch latest changes`,
299
+ value: 'update',
300
+ }, {
301
+ label: `${colors.blue}🔄 Sync${colors.reset} — sync remote URLs from .gitmodules`,
302
+ value: 'sync',
303
+ }, {
304
+ label: `${colors.red}✗ Remove${colors.reset} — deinit and delete submodules`,
305
+ value: 'remove',
306
+ });
307
+ }
308
+ menuOptions.push({ label: 'Exit', value: 'exit' });
309
+ const choice = await select('Action:', menuOptions);
310
+ switch (choice) {
311
+ case 'add': {
312
+ await handleAdd();
313
+ console.log('');
314
+ break;
315
+ }
316
+ case 'init': {
317
+ await handleInit(submodules);
318
+ console.log('');
319
+ break;
320
+ }
321
+ case 'update': {
322
+ await handleUpdate(submodules);
323
+ console.log('');
324
+ break;
325
+ }
326
+ case 'sync': {
327
+ await handleSync(submodules);
328
+ console.log('');
329
+ break;
330
+ }
331
+ case 'remove': {
332
+ await handleRemove(submodules);
333
+ console.log('');
334
+ break;
335
+ }
336
+ default: {
337
+ keepGoing = false;
338
+ break;
339
+ }
340
+ }
341
+ }
342
+ console.log('');
343
+ };
344
+ //# sourceMappingURL=submodules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submodules.js","sourceRoot":"","sources":["../../src/workflows/submodules.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "geeto",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "AI-powered Git workflow automation CLI with smart commit messages, branch naming, and Trello integration",
5
5
  "author": {
6
6
  "email": "amdev142@gmail.com",
@@ -59,6 +59,7 @@
59
59
  "postpublish": "pinst --enable",
60
60
  "lint-staged": "lint-staged",
61
61
  "tools:install": "sh tools/install.sh",
62
+ "install:local": "bash scripts/install-local.sh",
62
63
  "danger:ci": "danger ci",
63
64
  "danger:local": "danger pr",
64
65
  "copilot": "gh"