protected override void HandleGit(Repository repo, string directory, string relativeDir, string repoUrl) { ConsoleEx.PrintLine(relativeDir); List <Branch> localBranches = repo.Branches .Where(b => !b.IsRemote) .OrderByDescending(b => b.IsCurrentRepositoryHead) .ThenBy(b => b.FriendlyName, StringComparer.OrdinalIgnoreCase) .ToList(); foreach (var b in localBranches) { var branchDisplay = new ColorString(" "); if (b.IsCurrentRepositoryHead) { branchDisplay.Text("* "); } else { branchDisplay.Text(" "); } branchDisplay.Green(b.FriendlyName); if (b.IsTracking) { branchDisplay.Reset("...") .Red(b.TrackedBranch.FriendlyName); } ConsoleEx.PrintLine(branchDisplay); } }
protected override void HandleGit(Repository repo, string directory, string relativeDir, string repoUrl) { var options = new StatusOptions { IncludeIgnored = IncludeIgnored, IncludeUntracked = !ExcludeUntracked, Show = StatusShowOption.IndexAndWorkDir, DetectRenamesInIndex = true, DetectRenamesInWorkDir = true, }; RepositoryStatus status = repo.RetrieveStatus(options); bool hasChanges = status.Any(); PrintLine($"{(hasChanges ? Cyan : White)}{relativeDir}"); Branch currentBranch = repo.Branches.FirstOrDefault(b => b.IsCurrentRepositoryHead && !b.IsRemote); if (currentBranch is null) { return; } var branchStr = new ColorString(" ## ").Green(currentBranch.FriendlyName); if (currentBranch.IsTracking) { branchStr = branchStr .Reset("...") .Red(currentBranch.TrackedBranch.FriendlyName); if (currentBranch.TrackingDetails.AheadBy.HasValue) { int aheadBy = currentBranch.TrackingDetails.AheadBy.Value; if (aheadBy != 0) { branchStr = branchStr .Reset(" [ahead: ") .Green(aheadBy.ToString()) .Reset("]"); } } if (currentBranch.TrackingDetails.BehindBy.HasValue) { int behindBy = currentBranch.TrackingDetails.BehindBy.Value; if (behindBy != 0) { branchStr = branchStr .Reset(" [behind: ") .Red(behindBy.ToString()) .Reset("]"); } } } PrintLine(branchStr); if (!hasChanges) { return; } foreach (StatusEntry statusItem in status) { ColorString statusStr = Statuses .Where(s => (statusItem.State & s.status) == s.status) .Aggregate(new ColorString(" "), (acc, s) => acc.Text(s.display, s.color)); statusStr = statusStr.Text($" {statusItem.FilePath}", CColor.Reset); PrintLine(statusStr); if ((statusItem.State & FileStatus.RenamedInIndex) == FileStatus.RenamedInIndex) { RenameDetails details = statusItem.HeadToIndexRenameDetails; PrintLine($" {details.OldFilePath} => {details.NewFilePath} (Similarity: {details.Similarity})"); } if ((statusItem.State & FileStatus.RenamedInWorkdir) == FileStatus.RenamedInWorkdir) { RenameDetails details = statusItem.IndexToWorkDirRenameDetails; PrintLine($" {details.OldFilePath} => {details.NewFilePath} (Similarity: {details.Similarity})"); } } }