using FCPModUpdater.Models; namespace FCPModUpdater.Services; public interface IGitService { Task IsGitRepositoryAsync(string path, CancellationToken ct = default); Task GetRemoteUrlAsync(string path, CancellationToken ct = default); Task GetCurrentCommitAsync(string path, CancellationToken ct = default); Task GetCurrentBranchAsync(string path, CancellationToken ct = default); Task<(int Behind, int Ahead)> GetCommitDifferenceAsync(string path, CancellationToken ct = default); Task> GetIncomingCommitsAsync(string path, int limit = 10, CancellationToken ct = default); Task FetchAsync(string path, IProgress? progress = null, CancellationToken ct = default); Task PullAsync(string path, IProgress? progress = null, CancellationToken ct = default); Task<(bool Success, string? Error)> CloneAsync(string url, string targetPath, IProgress? progress = null, IProgress? percentProgress = null, CancellationToken ct = default); Task> GetRemoteBranchesAsync(string path, CancellationToken ct = default); Task CheckoutAsync(string path, string branchOrCommit, CancellationToken ct = default); Task ResetToCommitAsync(string path, string commitHash, CancellationToken ct = default); Task HasLocalChangesAsync(string path, CancellationToken ct = default); Task> GetCommitHistoryAsync(string path, int limit = 20, CancellationToken ct = default); }