microsoft / microsoft/aspire

aspire ls dedupes settings vs walk using case-sensitive comparison on macOS

Open
#17,635 2 comments 0 reactions 0 assignees View on GitHub
area-cli bug triage:bot-seen
Dominant language
C#
Stars
6.3k
Forks
991
Avg merge
2d 15h
Merged PRs (30d)
196

Description

## Background

PR #17631 (L5 from #17626) added symlink-aware dedupe between the apphost path declared in `aspire.config.json` / `.aspire/settings.json` and the path produced by the recursive workspace walk in `aspire ls`. The dedupe currently uses `OperatingSystem.IsWindows() ? OrdinalIgnoreCase : Ordinal` (same comparison code as before the PR; #17626 only added symlink canonicalization on top).

## Bug

macOS APFS is case-insensitive by default. If the user authored the settings path with different casing than the actual on-disk filename, e.g.

```json
{ "appHost": { "path": "$WS/APPHOST.csproj" } }
```

…while the discovery walk surfaces `$WS/AppHost.csproj`, `aspire ls` shows two rows for the same file:

```
│ /private/var/.../AppHost.csproj │ csharp │ possibly-unbuildable │
│ /var/.../APPHOST.csproj │ csharp │ possibly-unbuildable │
```

Both paths refer to the same inode on the file system, so they should dedupe.

## Repro

```bash
WS=$(mktemp -d)
echo '' > "$WS/AppHost.csproj"
cat > "$WS/aspire.config.json" <

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.