public void SetOriginDescription(string fullDescription) { FullOriginDescription = fullDescription; var match = Regex.Match(fullDescription, "Your branch is based on .* but the upstream is gone."); if (match.Success) { OriginDescription = "Local Only"; OriginStatus = GitOriginStatusEnum.LocalOnly; return; } match = Regex.Match(fullDescription, "Your branch is up-to-date with .*"); if (match.Success) { OriginDescription = "Up-to-date"; OriginStatus = GitOriginStatusEnum.UpToDate; return; } match = Regex.Match(fullDescription, @"Your branch is ahead of .* by (\d+) commit"); if (match.Success) { OriginDescription = "Push(" + match.Groups[1] + ")"; OriginStatus = GitOriginStatusEnum.Ahead; return; } match = Regex.Match(fullDescription, @"Your branch is behind .* by (\d+) commit"); if (match.Success) { OriginDescription = "Pull(" + match.Groups[1] + ")"; OriginStatus = GitOriginStatusEnum.Behind; return; } match = Regex.Match(fullDescription, @"Your branch and .* have diverged,and have (\d+) and (\d+) different commits? each, respectively."); if (match.Success) { OriginDescription = "Push(" + match.Groups[1] + ") Pull(" + match.Groups[2] + ")"; OriginStatus = GitOriginStatusEnum.Diverged; return; } }
public void LoadFromGitOutput(IList<string> lines, IList<string> submodulePathList) { GitStatusMessageLines = new List<string>(lines); GitStatus = GitStatusEnum.Unknown; RemoveHints(lines); if (lines.Count < 2) return; ProcessBranchString(lines[0]); int localStatusLineIndex = 2; if (string.IsNullOrEmpty(Branch)) return; if (lines[1].StartsWith("Your branch")) { MergeDivergedLines(lines); SetOriginDescription(lines[1]); if (lines.Count < 3) return; } else { localStatusLineIndex = 1; OriginStatus = GitOriginStatusEnum.LocalOnly; OriginDescription = "Local Only"; } ProcessLocalStatusLine(lines, localStatusLineIndex); SetSubmodulesFileType(submodulePathList); if (GitStatus != GitStatusEnum.MergeConflicts) GitStatus = GetStatusType(); }