public static List<GitItemStatus> GetStagedFiles()
{
var status = RunCmd(Settings.GitCommand, "diff -z --cached --name-status");
var gitItemStatusList = new List<GitItemStatus>();
if (status.Length < 50 && status.Contains("fatal: No HEAD commit to compare"))
{
status = RunCmd(Settings.GitCommand, "status --untracked-files=no");
var statusStrings = status.Split('\n');
foreach (var statusString in statusStrings)
{
if (statusString.StartsWith("#\tnew file:"))
{
ProcessStatusNewFile(statusString, gitItemStatusList);
}
}
}
else
{
var statusStrings = status.Split(new char[] { '\0', '\n' }, StringSplitOptions.RemoveEmptyEntries);
for (int n = 0; n + 1 < statusStrings.Length; n = n + 2)
{
if (string.IsNullOrEmpty(statusStrings[n]))
continue;
gitItemStatusList.Add(
new GitItemStatus
{
Name = statusStrings[n + 1].Trim(),
IsNew = statusStrings[n] == "A",
IsChanged = statusStrings[n] == "M",
IsDeleted = statusStrings[n] == "D",
IsTracked = true
});
}
}
return gitItemStatusList;
}