Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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})");
                }
            }
        }