From 0c2e680a1b9e24f166850af4e38bb8485454440e Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 29 Aug 2010 14:34:34 +0200 Subject: [PATCH] Fixed retrieving the file status from git. --- .../GitAddIn/Src/GitStatusCache.cs | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/AddIns/VersionControl/GitAddIn/Src/GitStatusCache.cs b/src/AddIns/VersionControl/GitAddIn/Src/GitStatusCache.cs index 56717d71b6f..6e18e8c212e 100644 --- a/src/AddIns/VersionControl/GitAddIn/Src/GitStatusCache.cs +++ b/src/AddIns/VersionControl/GitAddIn/Src/GitStatusCache.cs @@ -102,6 +102,9 @@ static void GitGetFiles(string wcRoot, GitStatusSet statusSet) static void GitGetStatus(string wcRoot, GitStatusSet statusSet) { + string command = "git status --porcelain --untracked-files=no"; + bool hasErrors = false; + ProcessRunner runner = new ProcessRunner(); runner.WorkingDirectory = wcRoot; runner.LogStandardOutputAndError = false; @@ -110,11 +113,15 @@ static void GitGetStatus(string wcRoot, GitStatusSet statusSet) Match m = statusParseRegex.Match(e.Line); if (m.Success) { statusSet.AddEntry(m.Groups[2].Value, StatusFromText(m.Groups[1].Value)); + } else { + if (!hasErrors) { + hasErrors = true; + GitMessageView.AppendLine(runner.WorkingDirectory + "> " + command); + } + GitMessageView.AppendLine("unknown output: " + e.Line); } } }; - string command = "git status -a --untracked-files=no"; - bool hasErrors = false; runner.ErrorLineReceived += delegate(object sender, LineReceivedEventArgs e) { if (!hasErrors) { hasErrors = true; @@ -128,19 +135,17 @@ static void GitGetStatus(string wcRoot, GitStatusSet statusSet) static GitStatus StatusFromText(string text) { - switch (text) { - case "deleted": - return GitStatus.Deleted; - case "modified": - return GitStatus.Modified; - case "new file": - return GitStatus.Added; - default: - throw new NotSupportedException(); - } + if (text.Contains("A")) + return GitStatus.Added; + else if (text.Contains("D")) + return GitStatus.Deleted; + else if (text.Contains("M")) + return GitStatus.Modified; + else + return GitStatus.None; } - static readonly Regex statusParseRegex = new Regex(@"#\s+(deleted|modified|new file):\s+(\S.*)$"); + static readonly Regex statusParseRegex = new Regex(@"^([DMA ][DMA ])\s(\S.*)$"); } public class GitStatusSet