@nemus-cli/nemus 0.2.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/CHANGELOG.md +86 -0
- package/LICENSE +21 -0
- package/README.md +275 -0
- package/assets/README.md +53 -0
- package/assets/banner.png +0 -0
- package/assets/banner.svg +66 -0
- package/assets/favicon-32.png +0 -0
- package/assets/favicon-64.png +0 -0
- package/assets/icon-256.png +0 -0
- package/assets/icon.svg +23 -0
- package/assets/logo-256.png +0 -0
- package/assets/logo-512.png +0 -0
- package/assets/logo-wordmark.svg +35 -0
- package/assets/logo.svg +32 -0
- package/bin/workspace.js +130 -0
- package/dist/cli/ai-prompt.js +421 -0
- package/dist/cli/dashboard/AgentList.js +61 -0
- package/dist/cli/dashboard/DashboardSidebar.js +280 -0
- package/dist/cli/dashboard/HelpFooter.js +73 -0
- package/dist/cli/dashboard/StatusBadge.js +50 -0
- package/dist/cli/dashboard/index.js +11 -0
- package/dist/cli/dashboard/types.js +2 -0
- package/dist/cli/tui.js +48 -0
- package/dist/commands/ai-prompt.js +22 -0
- package/dist/commands/analyze-deps.js +138 -0
- package/dist/commands/archive.js +113 -0
- package/dist/commands/branch/create.js +119 -0
- package/dist/commands/branch/index.js +104 -0
- package/dist/commands/branch/merge.js +90 -0
- package/dist/commands/branch/rebase.js +84 -0
- package/dist/commands/branch/switch.js +165 -0
- package/dist/commands/cache/index.js +80 -0
- package/dist/commands/cache/manager.js +198 -0
- package/dist/commands/cleanup.js +153 -0
- package/dist/commands/configure-claude.js +55 -0
- package/dist/commands/configure.js +231 -0
- package/dist/commands/create.js +204 -0
- package/dist/commands/dashboard/hook-handler.js +162 -0
- package/dist/commands/dashboard/index.js +258 -0
- package/dist/commands/dashboard/launcher.js +40 -0
- package/dist/commands/dashboard/session-picker.js +106 -0
- package/dist/commands/dashboard/sidebar.js +39 -0
- package/dist/commands/dashboard/workspace-picker.js +95 -0
- package/dist/commands/delete.js +194 -0
- package/dist/commands/deprecated-aliases.js +44 -0
- package/dist/commands/diff.js +129 -0
- package/dist/commands/doctor.js +141 -0
- package/dist/commands/generate-docs.js +77 -0
- package/dist/commands/ghq-status.js +72 -0
- package/dist/commands/go.js +154 -0
- package/dist/commands/history.js +124 -0
- package/dist/commands/list.js +191 -0
- package/dist/commands/mcp/index.js +69 -0
- package/dist/commands/migrate.js +296 -0
- package/dist/commands/remove-repo.js +217 -0
- package/dist/commands/report-bug.js +112 -0
- package/dist/commands/run.js +147 -0
- package/dist/commands/save-context.js +171 -0
- package/dist/commands/sessions.js +129 -0
- package/dist/commands/status.js +138 -0
- package/dist/commands/suite/create.js +212 -0
- package/dist/commands/suite/delete.js +64 -0
- package/dist/commands/suite/export.js +126 -0
- package/dist/commands/suite/import.js +128 -0
- package/dist/commands/suite/index.js +94 -0
- package/dist/commands/suite/list.js +49 -0
- package/dist/commands/suite/use.js +227 -0
- package/dist/commands/sync.js +117 -0
- package/dist/commands/update.js +203 -0
- package/dist/mcp/install.js +550 -0
- package/dist/mcp/server.js +398 -0
- package/dist/mcp/tools.js +922 -0
- package/dist/pi-extensions/permission-sync.ts.template +41 -0
- package/dist/pi-extensions/permissions-gate.ts.template +69 -0
- package/dist/pi-extensions/pr-fix-trigger.ts.template +124 -0
- package/dist/pi-extensions/review-reminder.ts.template +58 -0
- package/dist/pi-extensions/workspace-input-status.ts.template +919 -0
- package/dist/program.js +136 -0
- package/dist/scripts/workspace-table.py +394 -0
- package/dist/types/dashboard.js +11 -0
- package/dist/types/index.js +2 -0
- package/dist/utils/agent-config.js +263 -0
- package/dist/utils/agent-state.js +178 -0
- package/dist/utils/banner.js +24 -0
- package/dist/utils/branch-operations.js +232 -0
- package/dist/utils/bug-report.js +355 -0
- package/dist/utils/cache.js +168 -0
- package/dist/utils/claude-integration.js +617 -0
- package/dist/utils/claude-sessions.js +260 -0
- package/dist/utils/cleanup-operations.js +120 -0
- package/dist/utils/colors.js +26 -0
- package/dist/utils/command-helpers.js +44 -0
- package/dist/utils/config.js +150 -0
- package/dist/utils/context-file.js +33 -0
- package/dist/utils/dashboard-hooks.js +172 -0
- package/dist/utils/dependency-analyzer.js +234 -0
- package/dist/utils/diff-operations.js +80 -0
- package/dist/utils/doc-generator.js +184 -0
- package/dist/utils/ghq-integration.js +332 -0
- package/dist/utils/git-operations.js +237 -0
- package/dist/utils/git-status.js +187 -0
- package/dist/utils/github.js +68 -0
- package/dist/utils/health-checks.js +345 -0
- package/dist/utils/history.js +150 -0
- package/dist/utils/hooks.js +100 -0
- package/dist/utils/logger.js +40 -0
- package/dist/utils/permission-sync.js +681 -0
- package/dist/utils/pi-extensions.js +224 -0
- package/dist/utils/progress.js +92 -0
- package/dist/utils/prompts.js +279 -0
- package/dist/utils/repo-resolver.js +260 -0
- package/dist/utils/retry.js +65 -0
- package/dist/utils/run-operations.js +30 -0
- package/dist/utils/suite.js +159 -0
- package/dist/utils/sync-operations.js +107 -0
- package/dist/utils/tmux-dashboard.js +184 -0
- package/dist/utils/validation.js +153 -0
- package/dist/utils/version-check.js +121 -0
- package/dist/utils/workspace-meta.js +185 -0
- package/install-shell-integration.sh +532 -0
- package/install.sh +401 -0
- package/package.json +90 -0
- package/remove-shell-block.awk +44 -0
- package/scripts/postinstall.js +85 -0
- package/skills/analyze-deps.md +23 -0
- package/skills/archive-workspace.md +26 -0
- package/skills/branch-create.md +18 -0
- package/skills/create-workspace.md +39 -0
- package/skills/delete-workspace.md +37 -0
- package/skills/list-org-repos.md +26 -0
- package/skills/list-suites.md +24 -0
- package/skills/list-workspaces.md +27 -0
- package/skills/refresh-workspace-docs.md +89 -0
- package/skills/remove-repo.md +25 -0
- package/skills/run-command.md +23 -0
- package/skills/save-context.md +68 -0
- package/skills/search-repos.md +31 -0
- package/skills/snapshot-list.md +18 -0
- package/skills/snapshot-save.md +12 -0
- package/skills/switch-branch.md +18 -0
- package/skills/update-cache.md +21 -0
- package/skills/update-workspace.md +66 -0
- package/skills/workspace-cleanup.md +18 -0
- package/skills/workspace-diff.md +23 -0
- package/skills/workspace-doctor.md +23 -0
- package/skills/workspace-info.md +45 -0
- package/skills/workspace-manager/SKILL.md +201 -0
- package/skills/workspace-manager/references/ai-prompt.md +44 -0
- package/skills/workspace-manager/references/analyze-deps.md +45 -0
- package/skills/workspace-manager/references/archive-workspace.md +38 -0
- package/skills/workspace-manager/references/branch-create.md +31 -0
- package/skills/workspace-manager/references/branch-merge.md +22 -0
- package/skills/workspace-manager/references/branch-rebase.md +22 -0
- package/skills/workspace-manager/references/cache-clear.md +18 -0
- package/skills/workspace-manager/references/cache-info.md +22 -0
- package/skills/workspace-manager/references/configure-claude.md +31 -0
- package/skills/workspace-manager/references/configure.md +35 -0
- package/skills/workspace-manager/references/create-workspace.md +45 -0
- package/skills/workspace-manager/references/dashboard.md +61 -0
- package/skills/workspace-manager/references/delete-workspace.md +33 -0
- package/skills/workspace-manager/references/generate-docs.md +36 -0
- package/skills/workspace-manager/references/ghq-status.md +28 -0
- package/skills/workspace-manager/references/go.md +33 -0
- package/skills/workspace-manager/references/history.md +41 -0
- package/skills/workspace-manager/references/list-org-repos.md +26 -0
- package/skills/workspace-manager/references/list-suites.md +21 -0
- package/skills/workspace-manager/references/list-workspaces.md +27 -0
- package/skills/workspace-manager/references/mcp.md +49 -0
- package/skills/workspace-manager/references/remove-repo.md +26 -0
- package/skills/workspace-manager/references/run-command.md +44 -0
- package/skills/workspace-manager/references/search-repos.md +24 -0
- package/skills/workspace-manager/references/sessions.md +27 -0
- package/skills/workspace-manager/references/suite-create.md +22 -0
- package/skills/workspace-manager/references/suite-delete.md +21 -0
- package/skills/workspace-manager/references/suite-export.md +19 -0
- package/skills/workspace-manager/references/suite-import.md +19 -0
- package/skills/workspace-manager/references/suite-use.md +27 -0
- package/skills/workspace-manager/references/switch-branch.md +25 -0
- package/skills/workspace-manager/references/update-cache.md +22 -0
- package/skills/workspace-manager/references/update-workspace.md +50 -0
- package/skills/workspace-manager/references/workspace-cleanup.md +33 -0
- package/skills/workspace-manager/references/workspace-diff.md +27 -0
- package/skills/workspace-manager/references/workspace-doctor.md +27 -0
- package/skills/workspace-manager/references/workspace-info.md +33 -0
- package/skills/workspace-manager/references/workspace-status.md +43 -0
- package/skills/workspace-manager/references/workspace-sync.md +26 -0
- package/skills/workspace-status.md +26 -0
- package/skills/workspace-sync.md +23 -0
- package/src/cli/ai-prompt.test.ts +667 -0
- package/src/cli/ai-prompt.ts +421 -0
- package/src/cli/dashboard/AgentList.tsx +44 -0
- package/src/cli/dashboard/DashboardSidebar.tsx +291 -0
- package/src/cli/dashboard/HelpFooter.tsx +22 -0
- package/src/cli/dashboard/StatusBadge.tsx +23 -0
- package/src/cli/dashboard/index.ts +5 -0
- package/src/cli/dashboard/types.ts +16 -0
- package/src/cli/tui.tsx +51 -0
- package/src/cli/workspace-cli.test.ts +30 -0
- package/src/commands/ai-prompt.ts +21 -0
- package/src/commands/analyze-deps.ts +119 -0
- package/src/commands/archive.ts +114 -0
- package/src/commands/branch/create.ts +94 -0
- package/src/commands/branch/index.ts +74 -0
- package/src/commands/branch/merge.ts +61 -0
- package/src/commands/branch/rebase.ts +54 -0
- package/src/commands/branch/switch.ts +150 -0
- package/src/commands/cache/index.ts +51 -0
- package/src/commands/cache/manager.ts +168 -0
- package/src/commands/cleanup.ts +132 -0
- package/src/commands/configure-claude.ts +55 -0
- package/src/commands/configure.ts +204 -0
- package/src/commands/create.ts +196 -0
- package/src/commands/dashboard/hook-handler.ts +138 -0
- package/src/commands/dashboard/index.ts +248 -0
- package/src/commands/dashboard/launcher.ts +42 -0
- package/src/commands/dashboard/session-picker.ts +73 -0
- package/src/commands/dashboard/sidebar.js +39 -0
- package/src/commands/dashboard/workspace-picker.ts +62 -0
- package/src/commands/delete.test.ts +250 -0
- package/src/commands/delete.ts +171 -0
- package/src/commands/deprecated-aliases.ts +55 -0
- package/src/commands/diff.ts +106 -0
- package/src/commands/doctor.ts +110 -0
- package/src/commands/generate-docs.ts +45 -0
- package/src/commands/ghq-status.ts +70 -0
- package/src/commands/go.ts +125 -0
- package/src/commands/history.ts +136 -0
- package/src/commands/list.test.ts +219 -0
- package/src/commands/list.ts +176 -0
- package/src/commands/mcp/index.ts +39 -0
- package/src/commands/migrate.ts +277 -0
- package/src/commands/remove-repo.ts +194 -0
- package/src/commands/report-bug.ts +88 -0
- package/src/commands/run.ts +125 -0
- package/src/commands/save-context.test.ts +113 -0
- package/src/commands/save-context.ts +141 -0
- package/src/commands/sessions.ts +99 -0
- package/src/commands/status.ts +111 -0
- package/src/commands/suite/create.ts +240 -0
- package/src/commands/suite/delete.ts +65 -0
- package/src/commands/suite/export.ts +97 -0
- package/src/commands/suite/import.ts +100 -0
- package/src/commands/suite/index.ts +66 -0
- package/src/commands/suite/list.ts +54 -0
- package/src/commands/suite/use.ts +232 -0
- package/src/commands/sync.ts +97 -0
- package/src/commands/update.ts +197 -0
- package/src/mcp/install.ts +529 -0
- package/src/mcp/server.ts +579 -0
- package/src/mcp/tools.test.ts +545 -0
- package/src/mcp/tools.ts +1019 -0
- package/src/mcp/update-workspace.test.ts +220 -0
- package/src/pi-extensions/permission-sync.ts.template +41 -0
- package/src/pi-extensions/permissions-gate.ts.template +69 -0
- package/src/pi-extensions/pr-fix-trigger.ts.template +124 -0
- package/src/pi-extensions/review-reminder.ts.template +58 -0
- package/src/pi-extensions/workspace-input-status.ts.template +919 -0
- package/src/program.ts +112 -0
- package/src/scripts/workspace-table.py +394 -0
- package/src/types/dashboard.ts +29 -0
- package/src/types/index.ts +109 -0
- package/src/types/ink.d.ts +171 -0
- package/src/utils/agent-config.test.ts +303 -0
- package/src/utils/agent-config.ts +264 -0
- package/src/utils/agent-state.test.ts +166 -0
- package/src/utils/agent-state.ts +135 -0
- package/src/utils/banner.ts +24 -0
- package/src/utils/branch-operations.ts +237 -0
- package/src/utils/bug-report.test.ts +174 -0
- package/src/utils/bug-report.ts +355 -0
- package/src/utils/cache.ts +150 -0
- package/src/utils/claude-integration.test.ts +381 -0
- package/src/utils/claude-integration.ts +649 -0
- package/src/utils/claude-sessions.test.ts +262 -0
- package/src/utils/claude-sessions.ts +251 -0
- package/src/utils/cleanup-operations.ts +94 -0
- package/src/utils/colors.ts +25 -0
- package/src/utils/command-helpers.ts +46 -0
- package/src/utils/config.test.ts +203 -0
- package/src/utils/config.ts +133 -0
- package/src/utils/context-file.ts +36 -0
- package/src/utils/dashboard-hooks.test.ts +168 -0
- package/src/utils/dashboard-hooks.ts +163 -0
- package/src/utils/dependency-analyzer.ts +243 -0
- package/src/utils/diff-operations.ts +59 -0
- package/src/utils/doc-generator.ts +187 -0
- package/src/utils/ghq-integration.test.ts +195 -0
- package/src/utils/ghq-integration.ts +317 -0
- package/src/utils/git-operations.test.ts +265 -0
- package/src/utils/git-operations.ts +233 -0
- package/src/utils/git-status.ts +171 -0
- package/src/utils/github.ts +74 -0
- package/src/utils/health-checks.ts +359 -0
- package/src/utils/history.ts +140 -0
- package/src/utils/hooks.ts +92 -0
- package/src/utils/logger.ts +37 -0
- package/src/utils/permission-sync.test.ts +593 -0
- package/src/utils/permission-sync.ts +720 -0
- package/src/utils/pi-extensions.test.ts +182 -0
- package/src/utils/pi-extensions.ts +226 -0
- package/src/utils/progress.ts +73 -0
- package/src/utils/prompts.test.ts +169 -0
- package/src/utils/prompts.ts +296 -0
- package/src/utils/repo-resolver.test.ts +313 -0
- package/src/utils/repo-resolver.ts +294 -0
- package/src/utils/retry.test.ts +124 -0
- package/src/utils/retry.ts +85 -0
- package/src/utils/run-operations.ts +38 -0
- package/src/utils/suite.test.ts +256 -0
- package/src/utils/suite.ts +144 -0
- package/src/utils/sync-operations.ts +87 -0
- package/src/utils/tmux-dashboard.ts +193 -0
- package/src/utils/validation.test.ts +139 -0
- package/src/utils/validation.ts +128 -0
- package/src/utils/version-check.test.ts +108 -0
- package/src/utils/version-check.ts +96 -0
- package/src/utils/workspace-meta.ts +173 -0
- package/sync-permissions.sh +137 -0
- package/tsconfig.json +20 -0
- package/uninstall.sh +162 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerArchiveCommand = registerArchiveCommand;
|
|
7
|
+
const workspace_meta_1 = require("../utils/workspace-meta");
|
|
8
|
+
const prompts_1 = require("../utils/prompts");
|
|
9
|
+
const logger_1 = require("../utils/logger");
|
|
10
|
+
const colors_1 = require("../utils/colors");
|
|
11
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
12
|
+
const command_helpers_1 = require("../utils/command-helpers");
|
|
13
|
+
function registerArchiveCommand(parent) {
|
|
14
|
+
parent
|
|
15
|
+
.command('archive')
|
|
16
|
+
.alias('a')
|
|
17
|
+
.description('Archive a workspace (30-day expiry)')
|
|
18
|
+
.option('-w, --workspace <names>', 'Comma-separated workspace names')
|
|
19
|
+
.option('--unarchive', 'Unarchive a previously archived workspace')
|
|
20
|
+
.action(async (opts, cmd) => {
|
|
21
|
+
const globalOpts = (0, command_helpers_1.getGlobalOpts)(cmd);
|
|
22
|
+
await handleArchive({ ...opts, ...globalOpts });
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async function handleArchive(opts) {
|
|
26
|
+
const isUnarchive = opts.unarchive ?? false;
|
|
27
|
+
const title = isUnarchive ? 'Unarchive Workspace' : 'Archive Workspace';
|
|
28
|
+
console.log('\n' + '='.repeat(60));
|
|
29
|
+
console.log((0, colors_1.colorize)(title, 'bright'));
|
|
30
|
+
console.log('='.repeat(60) + '\n');
|
|
31
|
+
try {
|
|
32
|
+
if (isUnarchive) {
|
|
33
|
+
const allWorkspaces = await (0, workspace_meta_1.listWorkspaces)(true);
|
|
34
|
+
const archivedWorkspaces = allWorkspaces.filter(ws => ws.metadata?.archivedAt);
|
|
35
|
+
if (archivedWorkspaces.length === 0) {
|
|
36
|
+
(0, logger_1.logInfo)('No archived workspaces found');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
let selectedNames;
|
|
40
|
+
if (opts.workspace) {
|
|
41
|
+
selectedNames = (0, command_helpers_1.parseList)(opts.workspace);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
selectedNames = await (0, prompts_1.promptMultiWorkspaceSelection)(archivedWorkspaces);
|
|
45
|
+
}
|
|
46
|
+
if (!opts.yes) {
|
|
47
|
+
const { confirmed } = await inquirer_1.default.prompt([{
|
|
48
|
+
type: 'confirm', name: 'confirmed',
|
|
49
|
+
message: selectedNames.length === 1
|
|
50
|
+
? `Unarchive workspace ${selectedNames[0]}?`
|
|
51
|
+
: `Unarchive these ${selectedNames.length} workspaces?`,
|
|
52
|
+
default: true,
|
|
53
|
+
}]);
|
|
54
|
+
if (!confirmed)
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
for (const name of selectedNames) {
|
|
58
|
+
try {
|
|
59
|
+
await (0, workspace_meta_1.unarchiveWorkspace)(name);
|
|
60
|
+
(0, logger_1.logSuccess)(`Unarchived "${(0, colors_1.colorize)(name, 'cyan')}"`);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
(0, logger_1.logError)(`Failed to unarchive "${name}"`);
|
|
64
|
+
if (error instanceof Error)
|
|
65
|
+
(0, logger_1.logError)(error.message);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const workspaces = await (0, workspace_meta_1.listWorkspaces)(false);
|
|
71
|
+
if (workspaces.length === 0) {
|
|
72
|
+
(0, logger_1.logInfo)('No active workspaces found');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
let selectedNames;
|
|
76
|
+
if (opts.workspace) {
|
|
77
|
+
selectedNames = (0, command_helpers_1.parseList)(opts.workspace);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
selectedNames = await (0, prompts_1.promptMultiWorkspaceSelection)(workspaces);
|
|
81
|
+
}
|
|
82
|
+
if (!opts.yes) {
|
|
83
|
+
const { confirmed } = await inquirer_1.default.prompt([{
|
|
84
|
+
type: 'confirm', name: 'confirmed',
|
|
85
|
+
message: selectedNames.length === 1
|
|
86
|
+
? `Archive workspace ${selectedNames[0]}? It will be auto-deleted in 30 days.`
|
|
87
|
+
: `Archive these ${selectedNames.length} workspaces? They will be auto-deleted in 30 days.`,
|
|
88
|
+
default: true,
|
|
89
|
+
}]);
|
|
90
|
+
if (!confirmed)
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
for (const name of selectedNames) {
|
|
94
|
+
try {
|
|
95
|
+
await (0, workspace_meta_1.archiveWorkspace)(name);
|
|
96
|
+
(0, logger_1.logSuccess)(`Archived "${(0, colors_1.colorize)(name, 'cyan')}" - will be auto-deleted in 30 days`);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
(0, logger_1.logError)(`Failed to archive "${name}"`);
|
|
100
|
+
if (error instanceof Error)
|
|
101
|
+
(0, logger_1.logError)(error.message);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
(0, logger_1.logError)(`Failed to ${isUnarchive ? 'unarchive' : 'archive'} workspace`);
|
|
108
|
+
if (error instanceof Error) {
|
|
109
|
+
(0, logger_1.logError)(error.message);
|
|
110
|
+
}
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.main = void 0;
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const workspace_meta_1 = require("../../utils/workspace-meta");
|
|
43
|
+
const prompts_1 = require("../../utils/prompts");
|
|
44
|
+
const branch_operations_1 = require("../../utils/branch-operations");
|
|
45
|
+
const logger_1 = require("../../utils/logger");
|
|
46
|
+
const colors_1 = require("../../utils/colors");
|
|
47
|
+
const config_1 = require("../../utils/config");
|
|
48
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
49
|
+
const main = async (opts) => {
|
|
50
|
+
try {
|
|
51
|
+
let workspaceName = opts?.workspace;
|
|
52
|
+
let branchName = opts?.branch;
|
|
53
|
+
const baseBranch = opts?.base;
|
|
54
|
+
const force = opts?.force ?? false;
|
|
55
|
+
// Resolve workspace interactively if needed
|
|
56
|
+
if (!workspaceName) {
|
|
57
|
+
if (!process.stdout.isTTY) {
|
|
58
|
+
(0, logger_1.logError)('Missing required option: --workspace');
|
|
59
|
+
(0, logger_1.logError)('Usage: w branch create --workspace <name> --branch <branch>');
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
const workspaces = await (0, workspace_meta_1.listWorkspaces)();
|
|
63
|
+
workspaceName = await (0, prompts_1.promptWorkspaceSelection)(workspaces);
|
|
64
|
+
}
|
|
65
|
+
// Resolve branch interactively if needed
|
|
66
|
+
if (!branchName) {
|
|
67
|
+
if (!process.stdout.isTTY) {
|
|
68
|
+
(0, logger_1.logError)('Missing required option: --branch');
|
|
69
|
+
(0, logger_1.logError)('Usage: w branch create --workspace <name> --branch <branch>');
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
const { branch } = await inquirer_1.default.prompt([
|
|
73
|
+
{
|
|
74
|
+
type: 'input',
|
|
75
|
+
name: 'branch',
|
|
76
|
+
message: 'New branch name:',
|
|
77
|
+
validate: (input) => input.trim() ? true : 'Branch name cannot be empty',
|
|
78
|
+
},
|
|
79
|
+
]);
|
|
80
|
+
branchName = branch;
|
|
81
|
+
}
|
|
82
|
+
const workspacePath = path.join(config_1.WORKSPACES_DIR, workspaceName);
|
|
83
|
+
const metadata = await (0, workspace_meta_1.loadMetadata)(workspacePath);
|
|
84
|
+
if (!metadata) {
|
|
85
|
+
(0, logger_1.logError)(`Workspace not found: ${workspaceName}`);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
(0, logger_1.logStep)(`Creating branch ${(0, colors_1.colorize)(branchName, 'cyan')} across all repositories...`);
|
|
89
|
+
const results = [];
|
|
90
|
+
for (const repo of metadata.repositories) {
|
|
91
|
+
const repoPath = path.join(workspacePath, repo.directoryName);
|
|
92
|
+
const result = await (0, branch_operations_1.createBranch)(repoPath, repo.directoryName, branchName, baseBranch, force);
|
|
93
|
+
results.push(result);
|
|
94
|
+
if (result.success) {
|
|
95
|
+
(0, logger_1.logSuccess)(`${repo.directoryName}: ${result.message}`);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
(0, logger_1.logWarning)(`${repo.directoryName}: ${result.message}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const successful = results.filter(r => r.success).length;
|
|
102
|
+
const failed = results.filter(r => !r.success).length;
|
|
103
|
+
console.log('');
|
|
104
|
+
(0, logger_1.logInfo)(`Created branches in ${successful}/${results.length} repositories`);
|
|
105
|
+
if (failed > 0) {
|
|
106
|
+
(0, logger_1.logWarning)(`${failed} repositories were skipped or failed`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
(0, logger_1.logError)('Failed to create branches');
|
|
111
|
+
if (error instanceof Error) {
|
|
112
|
+
(0, logger_1.logError)(error.message);
|
|
113
|
+
}
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
exports.main = main;
|
|
118
|
+
if (require.main === module)
|
|
119
|
+
(0, exports.main)();
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.registerBranchCommands = registerBranchCommands;
|
|
37
|
+
const command_helpers_1 = require("../../utils/command-helpers");
|
|
38
|
+
function registerBranchCommands(parent) {
|
|
39
|
+
const branch = parent
|
|
40
|
+
.command('branch')
|
|
41
|
+
.description('Branch management');
|
|
42
|
+
branch
|
|
43
|
+
.command('switch')
|
|
44
|
+
.description('Switch all repos to a specific branch')
|
|
45
|
+
.option('-w, --workspace <name>', 'Workspace name')
|
|
46
|
+
.option('-b, --branch <name>', 'Branch name')
|
|
47
|
+
.action(async (opts, cmd) => {
|
|
48
|
+
const globalOpts = (0, command_helpers_1.getGlobalOpts)(cmd);
|
|
49
|
+
const { main } = await Promise.resolve().then(() => __importStar(require('./switch')));
|
|
50
|
+
await main({
|
|
51
|
+
workspace: opts.workspace,
|
|
52
|
+
branch: opts.branch,
|
|
53
|
+
yes: globalOpts.yes,
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
branch
|
|
57
|
+
.command('create')
|
|
58
|
+
.description('Create branches across all repos')
|
|
59
|
+
.argument('[workspace]', 'Workspace name')
|
|
60
|
+
.argument('[branch]', 'Branch name')
|
|
61
|
+
.option('-w, --workspace <name>', 'Workspace name (flag alternative)')
|
|
62
|
+
.option('-b, --branch <name>', 'Branch name (flag alternative)')
|
|
63
|
+
.option('--base <branch>', 'Base branch')
|
|
64
|
+
.option('--force', 'Force create')
|
|
65
|
+
.action(async (workspaceArg, branchArg, opts) => {
|
|
66
|
+
const { main } = await Promise.resolve().then(() => __importStar(require('./create')));
|
|
67
|
+
await main({
|
|
68
|
+
workspace: opts.workspace || workspaceArg,
|
|
69
|
+
branch: opts.branch || branchArg,
|
|
70
|
+
base: opts.base,
|
|
71
|
+
force: opts.force,
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
branch
|
|
75
|
+
.command('merge')
|
|
76
|
+
.description('Merge branches across all repos')
|
|
77
|
+
.argument('<workspace>', 'Workspace name')
|
|
78
|
+
.argument('<source>', 'Source branch')
|
|
79
|
+
.argument('<target>', 'Target branch')
|
|
80
|
+
.option('--no-ff', 'No fast-forward')
|
|
81
|
+
.option('--ff-only', 'Fast-forward only')
|
|
82
|
+
.option('--squash', 'Squash merge')
|
|
83
|
+
.action(async (workspace, source, target, opts) => {
|
|
84
|
+
const { main } = await Promise.resolve().then(() => __importStar(require('./merge')));
|
|
85
|
+
await main({
|
|
86
|
+
workspace,
|
|
87
|
+
source,
|
|
88
|
+
target,
|
|
89
|
+
// Commander's --no-ff sets opts.ff = false
|
|
90
|
+
noFf: opts.ff === false,
|
|
91
|
+
ffOnly: opts.ffOnly,
|
|
92
|
+
squash: opts.squash,
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
branch
|
|
96
|
+
.command('rebase')
|
|
97
|
+
.description('Rebase branches across all repos')
|
|
98
|
+
.argument('<workspace>', 'Workspace name')
|
|
99
|
+
.argument('<base>', 'Base branch')
|
|
100
|
+
.action(async (workspace, base) => {
|
|
101
|
+
const { main } = await Promise.resolve().then(() => __importStar(require('./rebase')));
|
|
102
|
+
await main({ workspace, base });
|
|
103
|
+
});
|
|
104
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.main = void 0;
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const config_1 = require("../../utils/config");
|
|
40
|
+
const workspace_meta_1 = require("../../utils/workspace-meta");
|
|
41
|
+
const branch_operations_1 = require("../../utils/branch-operations");
|
|
42
|
+
const logger_1 = require("../../utils/logger");
|
|
43
|
+
const colors_1 = require("../../utils/colors");
|
|
44
|
+
const main = async (opts) => {
|
|
45
|
+
try {
|
|
46
|
+
const workspaceName = opts?.workspace ?? process.argv[2];
|
|
47
|
+
const sourceBranch = opts?.source ?? process.argv[3];
|
|
48
|
+
const targetBranch = opts?.target ?? process.argv[4];
|
|
49
|
+
if (!workspaceName || !sourceBranch || !targetBranch) {
|
|
50
|
+
(0, logger_1.logError)('Usage: workspace branch-merge <workspace> <source-branch> <target-branch> [--no-ff|--ff-only|--squash]');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const workspacePath = path.join(config_1.WORKSPACES_DIR, workspaceName);
|
|
54
|
+
const metadata = await (0, workspace_meta_1.loadMetadata)(workspacePath);
|
|
55
|
+
if (!metadata) {
|
|
56
|
+
(0, logger_1.logError)(`Workspace not found: ${workspaceName}`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
const options = {
|
|
60
|
+
noFf: opts?.noFf ?? process.argv.includes('--no-ff'),
|
|
61
|
+
ffOnly: opts?.ffOnly ?? process.argv.includes('--ff-only'),
|
|
62
|
+
squash: opts?.squash ?? process.argv.includes('--squash'),
|
|
63
|
+
};
|
|
64
|
+
(0, logger_1.logStep)(`Merging ${(0, colors_1.colorize)(sourceBranch, 'cyan')} into ${(0, colors_1.colorize)(targetBranch, 'cyan')}...`);
|
|
65
|
+
const results = [];
|
|
66
|
+
for (const repo of metadata.repositories) {
|
|
67
|
+
const repoPath = path.join(workspacePath, repo.name);
|
|
68
|
+
const result = await (0, branch_operations_1.mergeBranch)(repoPath, repo.name, sourceBranch, targetBranch, options);
|
|
69
|
+
results.push(result);
|
|
70
|
+
if (result.success) {
|
|
71
|
+
(0, logger_1.logSuccess)(`${repo.name}: ${result.message}`);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
(0, logger_1.logWarning)(`${repo.name}: ${result.message} - ${result.error || ''}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const successful = results.filter(r => r.success).length;
|
|
78
|
+
(0, logger_1.logInfo)(`Merged successfully in ${successful}/${results.length} repositories`);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
(0, logger_1.logError)('Failed to merge branches');
|
|
82
|
+
if (error instanceof Error) {
|
|
83
|
+
(0, logger_1.logError)(error.message);
|
|
84
|
+
}
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
exports.main = main;
|
|
89
|
+
if (require.main === module)
|
|
90
|
+
(0, exports.main)();
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.main = void 0;
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const config_1 = require("../../utils/config");
|
|
40
|
+
const workspace_meta_1 = require("../../utils/workspace-meta");
|
|
41
|
+
const branch_operations_1 = require("../../utils/branch-operations");
|
|
42
|
+
const logger_1 = require("../../utils/logger");
|
|
43
|
+
const colors_1 = require("../../utils/colors");
|
|
44
|
+
const main = async (opts) => {
|
|
45
|
+
try {
|
|
46
|
+
const workspaceName = opts?.workspace ?? process.argv[2];
|
|
47
|
+
const targetBranch = opts?.base ?? process.argv[3];
|
|
48
|
+
if (!workspaceName || !targetBranch) {
|
|
49
|
+
(0, logger_1.logError)('Usage: workspace branch-rebase <workspace> <target-branch>');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
const workspacePath = path.join(config_1.WORKSPACES_DIR, workspaceName);
|
|
53
|
+
const metadata = await (0, workspace_meta_1.loadMetadata)(workspacePath);
|
|
54
|
+
if (!metadata) {
|
|
55
|
+
(0, logger_1.logError)(`Workspace not found: ${workspaceName}`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
(0, logger_1.logStep)(`Rebasing onto ${(0, colors_1.colorize)(targetBranch, 'cyan')}...`);
|
|
59
|
+
const results = [];
|
|
60
|
+
for (const repo of metadata.repositories) {
|
|
61
|
+
const repoPath = path.join(workspacePath, repo.name);
|
|
62
|
+
const result = await (0, branch_operations_1.rebaseBranch)(repoPath, repo.name, targetBranch);
|
|
63
|
+
results.push(result);
|
|
64
|
+
if (result.success) {
|
|
65
|
+
(0, logger_1.logSuccess)(`${repo.name}: ${result.message}`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
(0, logger_1.logWarning)(`${repo.name}: ${result.message} - ${result.error || ''}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const successful = results.filter(r => r.success).length;
|
|
72
|
+
(0, logger_1.logInfo)(`Rebased successfully in ${successful}/${results.length} repositories`);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
(0, logger_1.logError)('Failed to rebase branches');
|
|
76
|
+
if (error instanceof Error) {
|
|
77
|
+
(0, logger_1.logError)(error.message);
|
|
78
|
+
}
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
exports.main = main;
|
|
83
|
+
if (require.main === module)
|
|
84
|
+
(0, exports.main)();
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.main = main;
|
|
41
|
+
const config_1 = require("../../utils/config");
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const workspace_meta_1 = require("../../utils/workspace-meta");
|
|
44
|
+
const prompts_1 = require("../../utils/prompts");
|
|
45
|
+
const logger_1 = require("../../utils/logger");
|
|
46
|
+
const colors_1 = require("../../utils/colors");
|
|
47
|
+
const branch_operations_1 = require("../../utils/branch-operations");
|
|
48
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
49
|
+
async function main(opts) {
|
|
50
|
+
console.log('\n' + '='.repeat(60));
|
|
51
|
+
console.log((0, colors_1.colorize)('Bulk Branch Switch', 'bright'));
|
|
52
|
+
console.log('='.repeat(60) + '\n');
|
|
53
|
+
const yes = opts?.yes ?? false;
|
|
54
|
+
try {
|
|
55
|
+
// Select workspace
|
|
56
|
+
let workspaceName;
|
|
57
|
+
if (opts?.workspace) {
|
|
58
|
+
workspaceName = opts.workspace;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
if (!process.stdout.isTTY) {
|
|
62
|
+
(0, logger_1.logError)('Missing required option: --workspace');
|
|
63
|
+
(0, logger_1.logError)('Usage: w branch switch --workspace <name> --branch <branch>');
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
const workspaces = await (0, workspace_meta_1.listWorkspaces)();
|
|
67
|
+
workspaceName = await (0, prompts_1.promptWorkspaceSelection)(workspaces);
|
|
68
|
+
}
|
|
69
|
+
const workspacePath = path.join(config_1.WORKSPACES_DIR, workspaceName);
|
|
70
|
+
(0, logger_1.logInfo)(`Selected workspace: ${(0, colors_1.colorize)(workspaceName, 'cyan')}`);
|
|
71
|
+
const metadata = await (0, workspace_meta_1.loadMetadata)(workspacePath);
|
|
72
|
+
if (!metadata) {
|
|
73
|
+
(0, logger_1.logError)('No metadata found for this workspace');
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
const repos = metadata.repositories.filter(r => r.status === 'success');
|
|
77
|
+
console.log(`\nFound ${repos.length} repositories\n`);
|
|
78
|
+
// Determine target branch
|
|
79
|
+
let targetBranch;
|
|
80
|
+
if (opts?.branch) {
|
|
81
|
+
targetBranch = opts.branch;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
if (!process.stdout.isTTY) {
|
|
85
|
+
(0, logger_1.logError)('Missing required option: --branch');
|
|
86
|
+
(0, logger_1.logError)('Usage: w branch switch --workspace <name> --branch <branch>');
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
const { branch } = await inquirer_1.default.prompt([
|
|
90
|
+
{
|
|
91
|
+
type: 'input',
|
|
92
|
+
name: 'branch',
|
|
93
|
+
message: 'Target branch name:',
|
|
94
|
+
default: 'main',
|
|
95
|
+
validate: (input) => {
|
|
96
|
+
if (!input || input.trim().length === 0) {
|
|
97
|
+
return 'Branch name cannot be empty';
|
|
98
|
+
}
|
|
99
|
+
return true;
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
]);
|
|
103
|
+
targetBranch = branch;
|
|
104
|
+
}
|
|
105
|
+
(0, logger_1.logWarning)(`This will switch all repositories to branch: ${(0, colors_1.colorize)(targetBranch, 'cyan')}`);
|
|
106
|
+
// Skip confirmation when --yes flag is provided
|
|
107
|
+
if (!yes && process.stdout.isTTY) {
|
|
108
|
+
const { confirmed } = await inquirer_1.default.prompt([
|
|
109
|
+
{
|
|
110
|
+
type: 'confirm',
|
|
111
|
+
name: 'confirmed',
|
|
112
|
+
message: 'Proceed with bulk branch switch?',
|
|
113
|
+
default: true,
|
|
114
|
+
},
|
|
115
|
+
]);
|
|
116
|
+
if (!confirmed) {
|
|
117
|
+
(0, logger_1.logInfo)('Branch switch cancelled');
|
|
118
|
+
process.exit(0);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
console.log('');
|
|
122
|
+
const results = [];
|
|
123
|
+
for (const repo of repos) {
|
|
124
|
+
const repoPath = path.join(workspacePath, repo.directoryName);
|
|
125
|
+
const displayName = repo.directoryName !== repo.name
|
|
126
|
+
? `${repo.directoryName} (${repo.name})`
|
|
127
|
+
: repo.name;
|
|
128
|
+
const result = await (0, branch_operations_1.switchBranch)(repoPath, displayName, targetBranch);
|
|
129
|
+
results.push(result);
|
|
130
|
+
}
|
|
131
|
+
console.log('\n' + '='.repeat(60));
|
|
132
|
+
console.log('Branch Switch Results Summary');
|
|
133
|
+
console.log('='.repeat(60));
|
|
134
|
+
const successful = results.filter(r => r.status === 'success');
|
|
135
|
+
const failed = results.filter(r => r.status === 'failed');
|
|
136
|
+
const skipped = results.filter(r => r.status === 'skipped');
|
|
137
|
+
console.log(`${(0, colors_1.colorize)('✓', 'green')} Switched: ${successful.length}`);
|
|
138
|
+
console.log(`${(0, colors_1.colorize)('✗', 'red')} Failed: ${failed.length}`);
|
|
139
|
+
console.log(`${(0, colors_1.colorize)('○', 'yellow')} Skipped: ${skipped.length}`);
|
|
140
|
+
console.log('='.repeat(60));
|
|
141
|
+
if (failed.length > 0) {
|
|
142
|
+
console.log('\nFailed repositories:');
|
|
143
|
+
failed.forEach(result => {
|
|
144
|
+
console.log(` ${(0, colors_1.colorize)('✗', 'red')} ${result.repo}: ${result.message}`);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
if (skipped.length > 0) {
|
|
148
|
+
console.log('\nSkipped repositories:');
|
|
149
|
+
skipped.forEach(result => {
|
|
150
|
+
console.log(` ${(0, colors_1.colorize)('○', 'yellow')} ${result.repo}: ${result.message}`);
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
console.log('');
|
|
154
|
+
(0, logger_1.logSuccess)('Bulk branch switch complete!');
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
(0, logger_1.logError)('Failed to switch branches');
|
|
158
|
+
if (error instanceof Error) {
|
|
159
|
+
(0, logger_1.logError)(error.message);
|
|
160
|
+
}
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (require.main === module)
|
|
165
|
+
main();
|