From dfd71b8e25e790a574845bc5afe8451876bc579f Mon Sep 17 00:00:00 2001 From: Lamparter <71598437+Lamparter@users.noreply.github.com> Date: Tue, 19 May 2026 21:30:52 +0100 Subject: [PATCH] Move `GetRepositoryHead` --- src/Files.App/Utils/Git/GitHelpers.cs | 35 +++------------------------ src/Files.App/Utils/Git/LibGit2.cs | 32 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/Files.App/Utils/Git/GitHelpers.cs b/src/Files.App/Utils/Git/GitHelpers.cs index 4f44bc8427a9..a0e1916b9a93 100644 --- a/src/Files.App/Utils/Git/GitHelpers.cs +++ b/src/Files.App/Utils/Git/GitHelpers.cs @@ -25,6 +25,9 @@ internal static partial class GitHelpers /// public static Task GetBranchNames(string? path) => _implementation.GetBranchNames(path); + /// + public static Task GetRepositoryHead(string? path) => _implementation.GetRepositoryHead(path); + #region Legacy implementation // Property already moved into abstraction @@ -91,38 +94,6 @@ private set // Event handler already moved into abstraction public static event EventHandler? GitFetchCompleted; - public static async Task GetRepositoryHead(string? path) - { - if (string.IsNullOrWhiteSpace(path) || !IsRepoValid(path)) - return null; - - var (_, returnValue) = await DoGitOperationAsync<(GitOperationResult, BranchItem?)>(() => - { - BranchItem? head = null; - try - { - using var repository = new Repository(path); - var branch = GetValidBranches(repository.Branches).FirstOrDefault(b => b.IsCurrentRepositoryHead); - if (branch is not null) - head = new BranchItem( - branch.FriendlyName, - branch.IsCurrentRepositoryHead, - branch.IsRemote, - TryGetTrackingDetails(branch)?.AheadBy ?? 0, - TryGetTrackingDetails(branch)?.BehindBy ?? 0 - ); - } - catch - { - return (GitOperationResult.GenericError, head); - } - - return (GitOperationResult.Success, head); - }, true); - - return returnValue; - } - public static async Task Checkout(string? repositoryPath, string? branch) { // Re-enable when Metris feature is available again diff --git a/src/Files.App/Utils/Git/LibGit2.cs b/src/Files.App/Utils/Git/LibGit2.cs index d6e47000b457..2f272fe4dff7 100644 --- a/src/Files.App/Utils/Git/LibGit2.cs +++ b/src/Files.App/Utils/Git/LibGit2.cs @@ -127,6 +127,38 @@ public async Task GetBranchNames(string? path) return returnValue; } + public async Task GetRepositoryHead(string? path) + { + if (string.IsNullOrWhiteSpace(path) || !IsRepoValid(path)) + return null; + + var (_, returnValue) = await DoGitOperationAsync<(GitOperationResult, BranchItem?)>(() => + { + BranchItem? head = null; + try + { + using var repository = new Repository(path); + var branch = GetValidBranches(repository.Branches).FirstOrDefault(b => b.IsCurrentRepositoryHead); + if (branch is not null) + head = new BranchItem( + branch.FriendlyName, + branch.IsCurrentRepositoryHead, + branch.IsRemote, + TryGetTrackingDetails(branch)?.AheadBy ?? 0, + TryGetTrackingDetails(branch)?.BehindBy ?? 0 + ); + } + catch + { + return (GitOperationResult.GenericError, head); + } + + return (GitOperationResult.Success, head); + }, true); + + return returnValue; + } + private static bool IsRepoValid(string path) { return SafetyExtensions.IgnoreExceptions(() => Repository.IsValid(path));