fix: fall back to workspace name for ws_specific file naming

When wsNameForFiles is not set (no wmill.yaml workspace config),
ws_specific items would not get workspace-suffixed filenames during
pull. Now falls back to workspace.name/workspaceId.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Diego Imbert
2026-04-15 13:13:53 +02:00
parent fbf9e6da20
commit a43660c044

View File

@@ -2196,6 +2196,9 @@ export async function pull(
// Compute the workspace name for file naming
const wsNameForFiles = wsNameForConfig ? resolveWsNameForFiles(opts, wsNameForConfig) : undefined;
// For ws_specific items, fall back to workspace name when wsNameForFiles is not set
const wsNameForWsSpecific = wsNameForFiles ?? workspace.name ?? workspace.workspaceId;
// Merge CLI flags with resolved settings (CLI flags take precedence only for explicit overrides)
opts = mergeCliWithEffectiveOptions(originalCliOpts, effectiveOpts);
@@ -2295,7 +2298,7 @@ export async function pull(
change.path,
specificItems,
wsNameForFiles,
) ?? (wsNameForFiles ? toWorkspaceSpecificPath(change.path, wsNameForFiles) : undefined),
) ?? (toWorkspaceSpecificPath(change.path, wsNameForWsSpecific)),
}
: {}),
})),
@@ -2307,7 +2310,7 @@ export async function pull(
if (changes.length > 0) {
if (!opts.jsonOutput) {
prettyChanges(changes, specificItems, wsNameForFiles, undefined, wsSpecificPaths);
prettyChanges(changes, specificItems, wsNameForFiles, undefined, wsSpecificPaths, wsNameForWsSpecific);
}
if (opts.dryRun) {
log.info(colors.gray(`Dry run complete.`));
@@ -2337,7 +2340,7 @@ export async function pull(
change.path,
specificItems,
wsNameForFiles,
) ?? (wsNameForFiles ? toWorkspaceSpecificPath(change.path, wsNameForFiles) : undefined);
) ?? (toWorkspaceSpecificPath(change.path, wsNameForWsSpecific));
if (workspaceSpecificPath) {
targetPath = workspaceSpecificPath;
}
@@ -2547,7 +2550,7 @@ export async function pull(
change.path,
specificItems,
wsNameForFiles,
) ?? (wsNameForFiles ? toWorkspaceSpecificPath(change.path, wsNameForFiles) : undefined),
) ?? (toWorkspaceSpecificPath(change.path, wsNameForWsSpecific)),
}
: {}),
})),
@@ -2578,6 +2581,7 @@ function prettyChanges(
branchOverride?: string,
folderDefaultAnnotations?: Map<string, string>,
wsSpecificPaths?: WsSpecificItem[],
wsNameFallback?: string,
) {
for (const change of changes) {
let displayPath = change.path;
@@ -2588,11 +2592,12 @@ function prettyChanges(
(specificItems && isSpecificItem(change.path, specificItems)) ||
isWsSpecificItem(change.path, wsSpecificPaths)
) {
const effectiveWsName = branchOverride ?? wsNameFallback;
const workspaceSpecificPath = getWorkspaceSpecificPath(
change.path,
specificItems,
branchOverride,
) ?? (branchOverride ? toWorkspaceSpecificPath(change.path, branchOverride) : undefined);
) ?? (effectiveWsName ? toWorkspaceSpecificPath(change.path, effectiveWsName) : undefined);
if (workspaceSpecificPath) {
displayPath = workspaceSpecificPath;
wsNote = " (workspace-specific)";
@@ -2742,6 +2747,9 @@ export async function push(
// Compute the workspace name for file naming
const wsNameForFiles = wsNameForConfig ? resolveWsNameForFiles(opts, wsNameForConfig) : undefined;
// For ws_specific items, fall back to workspace name when wsNameForFiles is not set
const wsNameForWsSpecific = wsNameForFiles ?? workspace.name ?? workspace.workspaceId;
// Merge CLI flags with resolved settings (CLI flags take precedence only for explicit overrides)
opts = mergeCliWithEffectiveOptions(originalCliOpts, effectiveOpts);
@@ -3089,7 +3097,7 @@ export async function push(
change.path,
specificItems,
wsNameForFiles,
) ?? (wsNameForFiles ? toWorkspaceSpecificPath(change.path, wsNameForFiles) : undefined),
) ?? (toWorkspaceSpecificPath(change.path, wsNameForWsSpecific)),
}
: {}),
})),
@@ -3132,7 +3140,7 @@ export async function push(
}
if (!opts.jsonOutput) {
prettyChanges(changes, specificItems, wsNameForFiles, folderDefaultAnnotations, wsSpecificPaths);
prettyChanges(changes, specificItems, wsNameForFiles, folderDefaultAnnotations, wsSpecificPaths, wsNameForWsSpecific);
}
if (opts.dryRun) {
@@ -3408,7 +3416,7 @@ export async function push(
change.path,
specificItems,
wsNameForFiles,
) ?? (wsNameForFiles ? toWorkspaceSpecificPath(change.path, wsNameForFiles) : undefined);
) ?? (toWorkspaceSpecificPath(change.path, wsNameForWsSpecific));
}
await pushObj(
@@ -3476,7 +3484,7 @@ export async function push(
change.path,
specificItems,
wsNameForFiles,
) ?? (wsNameForFiles ? toWorkspaceSpecificPath(change.path, wsNameForFiles) : undefined);
) ?? (toWorkspaceSpecificPath(change.path, wsNameForWsSpecific));
if (workspaceSpecificPath) {
localFilePath = workspaceSpecificPath;
}
@@ -3874,7 +3882,7 @@ export async function push(
change.path,
specificItems,
wsNameForFiles,
) ?? (wsNameForFiles ? toWorkspaceSpecificPath(change.path, wsNameForFiles) : undefined),
) ?? (toWorkspaceSpecificPath(change.path, wsNameForWsSpecific)),
}
: {}),
})),