GitRepo: Minor refactor

Start using the Result class, and use the git_bindings with a prefix.
The git bindings are being phased out for dart-git.
This commit is contained in:
Vishesh Handa
2021-06-10 13:32:34 +02:00
parent a3c539bf1f
commit 20c2277008

View File

@ -1,8 +1,9 @@
import 'dart:async'; import 'dart:async';
import 'dart:io' show Platform; import 'dart:io' show Platform;
import 'package:dart_git/dart_git.dart' as git; import 'package:dart_git/dart_git.dart';
import 'package:git_bindings/git_bindings.dart'; import 'package:dart_git/utils/result.dart';
import 'package:git_bindings/git_bindings.dart' as gb;
import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/core/notes_folder.dart';
@ -25,44 +26,57 @@ class NoteRepoResult {
class GitNoteRepository { class GitNoteRepository {
final String gitDirPath; final String gitDirPath;
final GitRepo _gitRepo; final gb.GitRepo _gitRepo;
final Settings settings; final Settings settings;
GitNoteRepository({ GitNoteRepository({
required this.gitDirPath, required this.gitDirPath,
required this.settings, required this.settings,
}) : _gitRepo = GitRepo(folderPath: gitDirPath) { }) : _gitRepo = gb.GitRepo(folderPath: gitDirPath) {
// git-bindings aren't properly implemented in these platforms // git-bindings aren't properly implemented in these platforms
if (Platform.isLinux || Platform.isMacOS || Platform.isWindows) { if (Platform.isLinux || Platform.isMacOS || Platform.isWindows) {
useDartGit = true; useDartGit = true;
} }
} }
Future<void> _add(String pathSpec) async { Future<Result<void>> _add(String pathSpec) async {
if (useDartGit) { if (useDartGit) {
var repo = await git.GitRepository.load(gitDirPath).getOrThrow(); var repo = await GitRepository.load(gitDirPath).getOrThrow();
await repo.add(pathSpec).throwOnError(); return await repo.add(pathSpec);
} else { } else {
await _gitRepo.add(pathSpec); try {
await _gitRepo.add(pathSpec);
} on Exception catch (ex, st) {
return Result.fail(ex, st);
}
} }
return Result(null);
} }
Future<void> _rm(String pathSpec) async { Future<Result<void>> _rm(String pathSpec) async {
if (useDartGit) { if (useDartGit) {
var repo = await git.GitRepository.load(gitDirPath).getOrThrow(); var repo = await GitRepository.load(gitDirPath).getOrThrow();
await repo.rm(pathSpec).throwOnError(); return await repo.rm(pathSpec);
} else { } else {
await _gitRepo.rm(pathSpec); try {
await _gitRepo.rm(pathSpec);
} on Exception catch (ex, st) {
return Result.fail(ex, st);
}
} }
return Result(null);
} }
Future<void> _commit( Future<void> _commit({
{required String /*!*/ message, required String message,
required String authorEmail, required String authorEmail,
required String authorName}) async { required String authorName,
}) async {
if (useDartGit) { if (useDartGit) {
var repo = await git.GitRepository.load(gitDirPath).getOrThrow(); var repo = await GitRepository.load(gitDirPath).getOrThrow();
var author = git.GitAuthor(name: authorName, email: authorEmail); var author = GitAuthor(name: authorName, email: authorEmail);
await repo.commit(message: message, author: author).throwOnError(); await repo.commit(message: message, author: author).throwOnError();
} else { } else {
await _gitRepo.commit( await _gitRepo.commit(
@ -216,13 +230,13 @@ class GitNoteRepository {
privateKey: settings.sshPrivateKey, privateKey: settings.sshPrivateKey,
password: settings.sshPassword, password: settings.sshPassword,
); );
} on GitException catch (ex, stackTrace) { } on gb.GitException catch (ex, stackTrace) {
Log.e("GitPull Failed", ex: ex, stacktrace: stackTrace); Log.e("GitPull Failed", ex: ex, stacktrace: stackTrace);
} }
} }
Future<void> merge() async { Future<void> merge() async {
var repo = await git.GitRepository.load(gitDirPath).getOrThrow(); var repo = await GitRepository.load(gitDirPath).getOrThrow();
var branch = await repo.currentBranch().getOrThrow(); var branch = await repo.currentBranch().getOrThrow();
var branchConfig = repo.config.branch(branch); var branchConfig = repo.config.branch(branch);
@ -247,7 +261,7 @@ class GitNoteRepository {
authorEmail: settings.gitAuthorEmail, authorEmail: settings.gitAuthorEmail,
authorName: settings.gitAuthor, authorName: settings.gitAuthor,
); );
} on GitException catch (ex, stackTrace) { } on gb.GitException catch (ex, stackTrace) {
Log.e("Git Merge Failed", ex: ex, stacktrace: stackTrace); Log.e("Git Merge Failed", ex: ex, stacktrace: stackTrace);
} }
} }
@ -255,7 +269,7 @@ class GitNoteRepository {
Future<void> push() async { Future<void> push() async {
// Only push if we have something we need to push // Only push if we have something we need to push
try { try {
var repo = await git.GitRepository.load(gitDirPath).getOrThrow(); var repo = await GitRepository.load(gitDirPath).getOrThrow();
var canPush = await repo.canPush().getOrThrow(); var canPush = await repo.canPush().getOrThrow();
if (!canPush) { if (!canPush) {
return; return;
@ -271,7 +285,7 @@ class GitNoteRepository {
privateKey: settings.sshPrivateKey, privateKey: settings.sshPrivateKey,
password: settings.sshPassword, password: settings.sshPassword,
); );
} on GitException catch (ex, stackTrace) { } on gb.GitException catch (ex, stackTrace) {
if (ex.cause == 'cannot push non-fastforwardable reference') { if (ex.cause == 'cannot push non-fastforwardable reference') {
await fetch(); await fetch();
await merge(); await merge();
@ -284,7 +298,7 @@ class GitNoteRepository {
Future<int?> numChanges() async { Future<int?> numChanges() async {
try { try {
var repo = await git.GitRepository.load(gitDirPath).getOrThrow(); var repo = await GitRepository.load(gitDirPath).getOrThrow();
var n = await repo.numChangesToPush().getOrThrow(); var n = await repo.numChangesToPush().getOrThrow();
return n; return n;
} catch (ex, st) { } catch (ex, st) {
@ -314,7 +328,7 @@ const ignoredMessages = [
]; ];
bool shouldLogGitException(Exception ex) { bool shouldLogGitException(Exception ex) {
if (ex is! GitException) { if (ex is! gb.GitException) {
return false; return false;
} }
var msg = ex.cause.toLowerCase(); var msg = ex.cause.toLowerCase();