Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add comment for skip worktree together with assume unchanged #11243

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 38 additions & 36 deletions GitCommands/Git/GitModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2840,58 +2840,60 @@ public IReadOnlyList<GitItemStatus> GetTreeFiles(ObjectId commitId, bool full)

if (!excludeSkipWorktreeFiles)
{
result.AddRange(GetSkipWorktreeFilesFromString(lsOutput));
result.AddRange(GetSkipWorktreeFilesFromString(lsOutput, excludeAssumeUnchangedFiles));
}
}

return result;
}

private static IReadOnlyList<GitItemStatus> GetAssumeUnchangedFilesFromString(string lsString)
{
List<GitItemStatus> result = new();

foreach (string line in lsString.LazySplit('\n', StringSplitOptions.RemoveEmptyEntries))
static IReadOnlyList<GitItemStatus> GetAssumeUnchangedFilesFromString(string lsString)
{
char statusCharacter = line[0];
if (char.IsUpper(statusCharacter))
List<GitItemStatus> result = new();

foreach (string line in lsString.LazySplit('\n', StringSplitOptions.RemoveEmptyEntries))
{
// git-ls-files -v will return lowercase status characters for assume unchanged files
continue;
char statusCharacter = line[0];
if (char.IsUpper(statusCharacter))
{
// git-ls-files -v will return lowercase status characters for assume unchanged files
continue;
}

// Get a default status object, then set AssumeUnchanged
string fileName = line.SubstringAfter(' ');
GitItemStatus gitItemStatus = GitItemStatus.GetDefaultStatus(fileName);
gitItemStatus.IsAssumeUnchanged = true;
result.Add(gitItemStatus);
}

// Get a default status object, then set AssumeUnchanged
string fileName = line.SubstringAfter(' ');
GitItemStatus gitItemStatus = GitItemStatus.GetDefaultStatus(fileName);
gitItemStatus.IsAssumeUnchanged = true;
result.Add(gitItemStatus);
return result;
}

return result;
}

private static IReadOnlyList<GitItemStatus> GetSkipWorktreeFilesFromString(string lsString)
{
List<GitItemStatus> result = new();

foreach (string line in lsString.LazySplit('\n', StringSplitOptions.RemoveEmptyEntries))
static IReadOnlyList<GitItemStatus> GetSkipWorktreeFilesFromString(string lsString, bool excludeAssumeUnchangedFiles)
{
char statusCharacter = line[0];
const char SkippedStatus = 'S';
const char SkippedStatusAssumeUnchanged = 's';
if (statusCharacter is not SkippedStatus or SkippedStatusAssumeUnchanged)
List<GitItemStatus> result = new();

foreach (string line in lsString.LazySplit('\n', StringSplitOptions.RemoveEmptyEntries))
{
continue;
// If both AssumeUnchange and SkipWorktree is set, status will be 's',
// already handled in GetAssumeUnchangedFilesFromString()
char statusCharacter = line[0];
const char SkippedStatus = 'S';
const char SkippedStatusAssumeUnchanged = 's';
if (statusCharacter is not SkippedStatus && (!excludeAssumeUnchangedFiles || statusCharacter is not SkippedStatusAssumeUnchanged))
{
continue;
}

// Get a default status object, then set SkipWorktree
string fileName = line.SubstringAfter(' ');
GitItemStatus gitItemStatus = GitItemStatus.GetDefaultStatus(fileName);
gitItemStatus.IsSkipWorktree = true;
result.Add(gitItemStatus);
}

// Get a default status object, then set SkipWorktree
string fileName = line.SubstringAfter(' ');
GitItemStatus gitItemStatus = GitItemStatus.GetDefaultStatus(fileName);
gitItemStatus.IsSkipWorktree = true;
result.Add(gitItemStatus);
return result;
}

return result;
}

public IReadOnlyList<GitItemStatus> GetAllChangedFilesWithSubmodulesStatus(bool excludeIgnoredFiles = true,
Expand Down
Loading