mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-27 17:29:50 +08:00
Optional: Make Git Add/Rm/Commit use Dart-git
It's a quick toggle for easy testing.
This commit is contained in:
@ -1,11 +1,10 @@
|
|||||||
// @dart=2.9
|
// @dart=2.9
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:io';
|
|
||||||
|
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
||||||
import 'package:dart_git/git.dart' as git;
|
import 'package:dart_git/dart_git.dart' as git;
|
||||||
import 'package:git_bindings/git_bindings.dart';
|
import 'package:git_bindings/git_bindings.dart';
|
||||||
|
|
||||||
import 'package:gitjournal/core/note.dart';
|
import 'package:gitjournal/core/note.dart';
|
||||||
@ -15,6 +14,8 @@ import 'package:gitjournal/error_reporting.dart';
|
|||||||
import 'package:gitjournal/settings.dart';
|
import 'package:gitjournal/settings.dart';
|
||||||
import 'package:gitjournal/utils/logger.dart';
|
import 'package:gitjournal/utils/logger.dart';
|
||||||
|
|
||||||
|
final bool useDartGit = false;
|
||||||
|
|
||||||
class NoteRepoResult {
|
class NoteRepoResult {
|
||||||
bool error;
|
bool error;
|
||||||
String noteFilePath;
|
String noteFilePath;
|
||||||
@ -35,13 +36,46 @@ class GitNoteRepository {
|
|||||||
@required this.settings,
|
@required this.settings,
|
||||||
}) : _gitRepo = GitRepo(folderPath: gitDirPath);
|
}) : _gitRepo = GitRepo(folderPath: gitDirPath);
|
||||||
|
|
||||||
|
Future<void> _add(String pathSpec) async {
|
||||||
|
if (useDartGit) {
|
||||||
|
var repo = await git.GitRepository.load(gitDirPath);
|
||||||
|
await repo.add(pathSpec);
|
||||||
|
} else {
|
||||||
|
await _gitRepo.add(pathSpec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _rm(String pathSpec) async {
|
||||||
|
if (useDartGit) {
|
||||||
|
var repo = await git.GitRepository.load(gitDirPath);
|
||||||
|
await repo.rm(pathSpec);
|
||||||
|
} else {
|
||||||
|
await _gitRepo.rm(pathSpec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _commit(
|
||||||
|
{String message, String authorEmail, String authorName}) async {
|
||||||
|
if (useDartGit) {
|
||||||
|
var repo = await git.GitRepository.load(gitDirPath);
|
||||||
|
var author = git.GitAuthor(name: authorName, email: authorEmail);
|
||||||
|
await repo.commit(message: message, author: author);
|
||||||
|
} else {
|
||||||
|
await _gitRepo.commit(
|
||||||
|
message: message,
|
||||||
|
authorEmail: settings.gitAuthorEmail,
|
||||||
|
authorName: settings.gitAuthor,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<NoteRepoResult> addNote(Note note) async {
|
Future<NoteRepoResult> addNote(Note note) async {
|
||||||
return _addNote(note, "Added Note");
|
return _addNote(note, "Added Note");
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<NoteRepoResult> _addNote(Note note, String commitMessage) async {
|
Future<NoteRepoResult> _addNote(Note note, String commitMessage) async {
|
||||||
await _gitRepo.add(".");
|
await _add(".");
|
||||||
await _gitRepo.commit(
|
await _commit(
|
||||||
message: commitMessage,
|
message: commitMessage,
|
||||||
authorEmail: settings.gitAuthorEmail,
|
authorEmail: settings.gitAuthorEmail,
|
||||||
authorName: settings.gitAuthor,
|
authorName: settings.gitAuthor,
|
||||||
@ -51,8 +85,8 @@ class GitNoteRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<NoteRepoResult> addFolder(NotesFolderFS folder) async {
|
Future<NoteRepoResult> addFolder(NotesFolderFS folder) async {
|
||||||
await _gitRepo.add(".");
|
await _add(".");
|
||||||
await _gitRepo.commit(
|
await _commit(
|
||||||
message: "Created New Folder",
|
message: "Created New Folder",
|
||||||
authorEmail: settings.gitAuthorEmail,
|
authorEmail: settings.gitAuthorEmail,
|
||||||
authorName: settings.gitAuthor,
|
authorName: settings.gitAuthor,
|
||||||
@ -65,8 +99,8 @@ class GitNoteRepository {
|
|||||||
var pathSpec = config.folder.pathSpec();
|
var pathSpec = config.folder.pathSpec();
|
||||||
pathSpec = pathSpec.isNotEmpty ? pathSpec : '/';
|
pathSpec = pathSpec.isNotEmpty ? pathSpec : '/';
|
||||||
|
|
||||||
await _gitRepo.add(".");
|
await _add(".");
|
||||||
await _gitRepo.commit(
|
await _commit(
|
||||||
message: "Update folder config for $pathSpec",
|
message: "Update folder config for $pathSpec",
|
||||||
authorEmail: settings.gitAuthorEmail,
|
authorEmail: settings.gitAuthorEmail,
|
||||||
authorName: settings.gitAuthor,
|
authorName: settings.gitAuthor,
|
||||||
@ -80,8 +114,8 @@ class GitNoteRepository {
|
|||||||
String newFullPath,
|
String newFullPath,
|
||||||
) async {
|
) async {
|
||||||
// FIXME: This is a hacky way of adding the changes, ideally we should be calling rm + add or something
|
// FIXME: This is a hacky way of adding the changes, ideally we should be calling rm + add or something
|
||||||
await _gitRepo.add(".");
|
await _add(".");
|
||||||
await _gitRepo.commit(
|
await _commit(
|
||||||
message: "Renamed Folder",
|
message: "Renamed Folder",
|
||||||
authorEmail: settings.gitAuthorEmail,
|
authorEmail: settings.gitAuthorEmail,
|
||||||
authorName: settings.gitAuthor,
|
authorName: settings.gitAuthor,
|
||||||
@ -95,8 +129,8 @@ class GitNoteRepository {
|
|||||||
String newFullPath,
|
String newFullPath,
|
||||||
) async {
|
) async {
|
||||||
// FIXME: This is a hacky way of adding the changes, ideally we should be calling rm + add or something
|
// FIXME: This is a hacky way of adding the changes, ideally we should be calling rm + add or something
|
||||||
await _gitRepo.add(".");
|
await _add(".");
|
||||||
await _gitRepo.commit(
|
await _commit(
|
||||||
message: "Renamed Note",
|
message: "Renamed Note",
|
||||||
authorEmail: settings.gitAuthorEmail,
|
authorEmail: settings.gitAuthorEmail,
|
||||||
authorName: settings.gitAuthor,
|
authorName: settings.gitAuthor,
|
||||||
@ -110,8 +144,8 @@ class GitNoteRepository {
|
|||||||
String newFullPath,
|
String newFullPath,
|
||||||
) async {
|
) async {
|
||||||
// FIXME: This is a hacky way of adding the changes, ideally we should be calling rm + add or something
|
// FIXME: This is a hacky way of adding the changes, ideally we should be calling rm + add or something
|
||||||
await _gitRepo.add(".");
|
await _add(".");
|
||||||
await _gitRepo.commit(
|
await _commit(
|
||||||
message: "Renamed File",
|
message: "Renamed File",
|
||||||
authorEmail: settings.gitAuthorEmail,
|
authorEmail: settings.gitAuthorEmail,
|
||||||
authorName: settings.gitAuthor,
|
authorName: settings.gitAuthor,
|
||||||
@ -125,8 +159,8 @@ class GitNoteRepository {
|
|||||||
String newFullPath,
|
String newFullPath,
|
||||||
) async {
|
) async {
|
||||||
// FIXME: This is a hacky way of adding the changes, ideally we should be calling rm + add or something
|
// FIXME: This is a hacky way of adding the changes, ideally we should be calling rm + add or something
|
||||||
await _gitRepo.add(".");
|
await _add(".");
|
||||||
await _gitRepo.commit(
|
await _commit(
|
||||||
message: "Note Moved",
|
message: "Note Moved",
|
||||||
authorEmail: settings.gitAuthorEmail,
|
authorEmail: settings.gitAuthorEmail,
|
||||||
authorName: settings.gitAuthor,
|
authorName: settings.gitAuthor,
|
||||||
@ -138,8 +172,8 @@ class GitNoteRepository {
|
|||||||
Future<NoteRepoResult> removeNote(Note note) async {
|
Future<NoteRepoResult> removeNote(Note note) async {
|
||||||
// We are not calling note.remove() as gitRm will also remove the file
|
// We are not calling note.remove() as gitRm will also remove the file
|
||||||
var spec = note.pathSpec();
|
var spec = note.pathSpec();
|
||||||
await _gitRepo.rm(spec);
|
await _rm(spec);
|
||||||
await _gitRepo.commit(
|
await _commit(
|
||||||
message: "Removed Note " + spec,
|
message: "Removed Note " + spec,
|
||||||
authorEmail: settings.gitAuthorEmail,
|
authorEmail: settings.gitAuthorEmail,
|
||||||
authorName: settings.gitAuthor,
|
authorName: settings.gitAuthor,
|
||||||
@ -150,15 +184,13 @@ class GitNoteRepository {
|
|||||||
|
|
||||||
Future<NoteRepoResult> removeFolder(NotesFolderFS folder) async {
|
Future<NoteRepoResult> removeFolder(NotesFolderFS folder) async {
|
||||||
var spec = folder.pathSpec();
|
var spec = folder.pathSpec();
|
||||||
await _gitRepo.rm(spec);
|
await _rm(spec);
|
||||||
await _gitRepo.commit(
|
await _commit(
|
||||||
message: "Removed Folder " + spec,
|
message: "Removed Folder " + spec,
|
||||||
authorEmail: settings.gitAuthorEmail,
|
authorEmail: settings.gitAuthorEmail,
|
||||||
authorName: settings.gitAuthor,
|
authorName: settings.gitAuthor,
|
||||||
);
|
);
|
||||||
|
|
||||||
await Directory(folder.folderPath).delete(recursive: true);
|
|
||||||
|
|
||||||
return NoteRepoResult(noteFilePath: folder.folderPath, error: false);
|
return NoteRepoResult(noteFilePath: folder.folderPath, error: false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +221,8 @@ class GitNoteRepository {
|
|||||||
var branch = await repo.currentBranch();
|
var branch = await repo.currentBranch();
|
||||||
var branchConfig = repo.config.branch(branch);
|
var branchConfig = repo.config.branch(branch);
|
||||||
if (branchConfig == null) {
|
if (branchConfig == null) {
|
||||||
logExceptionWarning(Exception("Branch '$branch' not in config"), StackTrace.current);
|
logExceptionWarning(
|
||||||
|
Exception("Branch '$branch' not in config"), StackTrace.current);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,7 +272,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: HEAD
|
ref: HEAD
|
||||||
resolved-ref: "4e47b63f5c48899fbf4c3db5b556cc16c0cbeca3"
|
resolved-ref: "51e16c02aba0628211ee29b42a5d45b3a7d596df"
|
||||||
url: "https://github.com/GitJournal/dart-git.git"
|
url: "https://github.com/GitJournal/dart-git.git"
|
||||||
source: git
|
source: git
|
||||||
version: "0.0.2"
|
version: "0.0.2"
|
||||||
|
Reference in New Issue
Block a user