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));