fix(data): merge preflights ignore untracked files in target working tree
HasChangesAsync counted untracked files, so a stray file in the shared target working dir (e.g. left by a concurrent session) blocked merge preflights even though nothing tracked changed. Add an includeUntracked overload defaulting to true, and pass includeUntracked: false only from the two target-working-tree merge preflights (TaskMergeService.MergeAsync, PlanningMergeOrchestrator.StartAsync). Auto-commit and the worktree cleanup data-loss guard keep counting untracked files, since those callers need to know about them.
This commit is contained in:
@@ -168,6 +168,39 @@ public class GitServiceMergeTests : IDisposable
|
||||
Assert.Equal("feature/checkout-test", current);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task HasChangesAsync_UntrackedFileOnly_DefaultReturnsTrue()
|
||||
{
|
||||
if (!GitRepoFixture.IsGitAvailable()) return;
|
||||
var repo = NewRepo();
|
||||
File.WriteAllText(Path.Combine(repo.RepoDir, "untracked.txt"), "new\n");
|
||||
|
||||
var git = new GitService();
|
||||
Assert.True(await git.HasChangesAsync(repo.RepoDir));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task HasChangesAsync_UntrackedFileOnly_IncludeUntrackedFalse_ReturnsFalse()
|
||||
{
|
||||
if (!GitRepoFixture.IsGitAvailable()) return;
|
||||
var repo = NewRepo();
|
||||
File.WriteAllText(Path.Combine(repo.RepoDir, "untracked.txt"), "new\n");
|
||||
|
||||
var git = new GitService();
|
||||
Assert.False(await git.HasChangesAsync(repo.RepoDir, includeUntracked: false));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task HasChangesAsync_ModifiedTrackedFile_IncludeUntrackedFalse_StillReturnsTrue()
|
||||
{
|
||||
if (!GitRepoFixture.IsGitAvailable()) return;
|
||||
var repo = NewRepo();
|
||||
File.WriteAllText(Path.Combine(repo.RepoDir, "README.md"), "changed\n");
|
||||
|
||||
var git = new GitService();
|
||||
Assert.True(await git.HasChangesAsync(repo.RepoDir, includeUntracked: false));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ListConflictedFilesAsync_MidConflict_ReturnsConflictedFile()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user