Skip to content

Commit a7e8468

Browse files
committed
Reject workspace names without manifest #1710
1 parent d11306f commit a7e8468

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

src/CodeIndex/Cli/WorkspaceCommandRunner.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ private static int Use(string[] args, bool json, JsonSerializerOptions jsonOptio
6666
var name = args[0];
6767
var manifest = WorkspaceManifestLoader.Find(Environment.CurrentDirectory);
6868
var useDefault = string.Equals(name, "default", StringComparison.OrdinalIgnoreCase);
69+
if (manifest == null && !useDefault)
70+
return CommandErrorWriter.WriteJsonOrHuman(json, jsonOptions, "workspace manifest was not found.", CommandExitCodes.UsageError, "run `cdidx workspace use <name>` from a manifest member or pass `default`.");
71+
6972
var member = useDefault
7073
? null
7174
: manifest?.Members.FirstOrDefault(m => string.Equals(Path.GetFileName(m.Path), name, StringComparison.OrdinalIgnoreCase));

tests/CodeIndex.Tests/WorkspaceCommandRunnerTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,38 @@ public void WorkspaceUse_RejectsUnknownManifestMember()
189189
}
190190
}
191191

192+
[Fact]
193+
public void WorkspaceUse_RejectsNamedWorkspaceWithoutManifest()
194+
{
195+
var root = TestProjectHelper.CreateTempProject("cdidx_workspace_use_no_manifest");
196+
var configHome = TestProjectHelper.CreateTempProject("cdidx_workspace_use_no_manifest_config");
197+
try
198+
{
199+
using var env = EnvironmentVariableScope.Capture("XDG_CONFIG_HOME");
200+
Environment.SetEnvironmentVariable("XDG_CONFIG_HOME", configHome);
201+
202+
var previous = Environment.CurrentDirectory;
203+
try
204+
{
205+
Environment.CurrentDirectory = root;
206+
var (exitCode, _, stderr) = ConsoleCapture.Capture(() => WorkspaceCommandRunner.Run(["use", "typo"], _jsonOptions));
207+
208+
Assert.Equal(CommandExitCodes.UsageError, exitCode);
209+
Assert.Contains("workspace manifest was not found", stderr);
210+
Assert.False(File.Exists(ActiveWorkspace.StatePath));
211+
}
212+
finally
213+
{
214+
Environment.CurrentDirectory = previous;
215+
}
216+
}
217+
finally
218+
{
219+
TestProjectHelper.DeleteDirectory(root);
220+
TestProjectHelper.DeleteDirectory(configHome);
221+
}
222+
}
223+
192224
[Fact]
193225
public void WorkspaceUseDefault_DoesNotSelectFirstManifestMember()
194226
{

0 commit comments

Comments
 (0)