mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-25 16:19:58 +08:00
Repository: Null safety
This commit is contained in:
@ -1,5 +1,3 @@
|
||||
// @dart=2.9
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
@ -46,10 +44,10 @@ class GitJournalRepo with ChangeNotifier {
|
||||
final String cacheDir;
|
||||
final String id;
|
||||
|
||||
String _currentBranch;
|
||||
String? _currentBranch;
|
||||
|
||||
GitNoteRepository _gitRepo;
|
||||
NotesCache _notesCache;
|
||||
late GitNoteRepository _gitRepo;
|
||||
late NotesCache _notesCache;
|
||||
|
||||
String repoPath;
|
||||
|
||||
@ -58,29 +56,31 @@ class GitJournalRepo with ChangeNotifier {
|
||||
int numChanges = 0;
|
||||
|
||||
bool get hasJournalEntries {
|
||||
return notesFolder.hasNotes;
|
||||
return notesFolder!.hasNotes;
|
||||
}
|
||||
|
||||
NotesFolderFS notesFolder;
|
||||
NotesFolderFS? notesFolder;
|
||||
|
||||
bool remoteGitRepoConfigured = false;
|
||||
|
||||
static Future<GitJournalRepo> load({
|
||||
@required String gitBaseDir,
|
||||
@required String cacheDir,
|
||||
@required SharedPreferences pref,
|
||||
@required String id,
|
||||
required String gitBaseDir,
|
||||
required String cacheDir,
|
||||
required SharedPreferences pref,
|
||||
required String id,
|
||||
}) async {
|
||||
await migrateSettings(id, pref, gitBaseDir);
|
||||
|
||||
var settings = Settings(id);
|
||||
settings.load(pref);
|
||||
|
||||
logEvent(Event.Settings, parameters: settings.toLoggableMap());
|
||||
logEvent(Event.Settings,
|
||||
parameters: settings.toLoggableMap() as Map<String, String>);
|
||||
|
||||
Log.i("Setting ${settings.toLoggableMap()}");
|
||||
|
||||
var repoPath = await settings.buildRepoPath(gitBaseDir);
|
||||
var repoPath =
|
||||
await (settings.buildRepoPath(gitBaseDir) as FutureOr<String>);
|
||||
Log.i("Loading Repo at path $repoPath");
|
||||
|
||||
var repoDir = Directory(repoPath);
|
||||
@ -104,7 +104,11 @@ class GitJournalRepo with ChangeNotifier {
|
||||
// Code path for 'branch is null' exception
|
||||
var branch = await repo.currentBranch();
|
||||
var head = await repo.head();
|
||||
var branchConfig = repo.config.branch(branch);
|
||||
|
||||
BranchConfig? branchConfig;
|
||||
if (branch != null) {
|
||||
branchConfig = repo.config.branch(branch);
|
||||
}
|
||||
|
||||
if (branch == null || head == null || branchConfig == null) {
|
||||
var remoteConfig = repo.config.remotes[0];
|
||||
@ -133,13 +137,13 @@ class GitJournalRepo with ChangeNotifier {
|
||||
}
|
||||
|
||||
GitJournalRepo._internal({
|
||||
@required this.id,
|
||||
@required this.repoPath,
|
||||
@required this.gitBaseDirectory,
|
||||
@required this.cacheDir,
|
||||
@required this.settings,
|
||||
@required this.remoteGitRepoConfigured,
|
||||
@required String currentBranch,
|
||||
required this.id,
|
||||
required this.repoPath,
|
||||
required this.gitBaseDirectory,
|
||||
required this.cacheDir,
|
||||
required this.settings,
|
||||
required this.remoteGitRepoConfigured,
|
||||
required String? currentBranch,
|
||||
}) {
|
||||
_gitRepo = GitNoteRepository(gitDirPath: repoPath, settings: settings);
|
||||
notesFolder = NotesFolderFS(null, _gitRepo.gitDirPath, settings);
|
||||
@ -165,7 +169,7 @@ class GitJournalRepo with ChangeNotifier {
|
||||
}
|
||||
|
||||
void _loadFromCache() async {
|
||||
await _notesCache.load(notesFolder);
|
||||
await _notesCache.load(notesFolder!);
|
||||
Log.i("Finished loading the notes cache");
|
||||
|
||||
await _loadNotes();
|
||||
@ -175,10 +179,11 @@ class GitJournalRepo with ChangeNotifier {
|
||||
Future<void> _loadNotes() async {
|
||||
// FIXME: We should report the notes that failed to load
|
||||
return _loadLock.synchronized(() async {
|
||||
await notesFolder.loadRecursively();
|
||||
await _notesCache.buildCache(notesFolder);
|
||||
await notesFolder!.loadRecursively();
|
||||
await _notesCache.buildCache(notesFolder!);
|
||||
|
||||
numChanges = await _gitRepo.numChanges();
|
||||
var changes = await _gitRepo.numChanges();
|
||||
numChanges = changes != null ? changes : 0;
|
||||
notifyListeners();
|
||||
});
|
||||
}
|
||||
@ -186,14 +191,14 @@ class GitJournalRepo with ChangeNotifier {
|
||||
Future<void> syncNotes({bool doNotThrow = false}) async {
|
||||
if (!remoteGitRepoConfigured) {
|
||||
Log.d("Not syncing because RemoteRepo not configured");
|
||||
return true;
|
||||
return;
|
||||
}
|
||||
|
||||
logEvent(Event.RepoSynced);
|
||||
syncStatus = SyncStatus.Pulling;
|
||||
notifyListeners();
|
||||
|
||||
Future noteLoadingFuture;
|
||||
Future? noteLoadingFuture;
|
||||
try {
|
||||
await _gitRepo.fetch();
|
||||
await _gitRepo.merge();
|
||||
@ -214,7 +219,7 @@ class GitJournalRepo with ChangeNotifier {
|
||||
syncStatus = SyncStatus.Error;
|
||||
syncStatusError = e.toString();
|
||||
notifyListeners();
|
||||
if (shouldLogGitException(e)) {
|
||||
if (e is Exception && shouldLogGitException(e)) {
|
||||
await logException(e, stacktrace);
|
||||
}
|
||||
if (!doNotThrow) rethrow;
|
||||
@ -258,7 +263,7 @@ class GitJournalRepo with ChangeNotifier {
|
||||
Log.d("Got removeFolder lock");
|
||||
Log.d("Removing Folder: " + folder.folderPath);
|
||||
|
||||
folder.parentFS.removeFolder(folder);
|
||||
folder.parentFS!.removeFolder(folder);
|
||||
_gitRepo.removeFolder(folder).then((NoteRepoResult _) {
|
||||
_syncNotes();
|
||||
numChanges += 1;
|
||||
@ -443,7 +448,7 @@ class GitJournalRepo with ChangeNotifier {
|
||||
|
||||
_notesCache.clear();
|
||||
remoteGitRepoConfigured = true;
|
||||
notesFolder.reset(repoPath);
|
||||
notesFolder!.reset(repoPath);
|
||||
|
||||
settings.folderName = repoFolderName;
|
||||
settings.save();
|
||||
@ -461,6 +466,10 @@ class GitJournalRepo with ChangeNotifier {
|
||||
|
||||
Future<void> moveRepoToPath() async {
|
||||
var newRepoPath = await settings.buildRepoPath(gitBaseDirectory);
|
||||
if (newRepoPath == null) {
|
||||
Log.e("failed to get newRepoPath");
|
||||
return;
|
||||
}
|
||||
|
||||
if (newRepoPath != repoPath) {
|
||||
Log.i("Old Path: $repoPath");
|
||||
@ -474,7 +483,7 @@ class GitJournalRepo with ChangeNotifier {
|
||||
_gitRepo = GitNoteRepository(gitDirPath: repoPath, settings: settings);
|
||||
|
||||
_notesCache.clear();
|
||||
notesFolder.reset(repoPath);
|
||||
notesFolder!.reset(repoPath);
|
||||
notifyListeners();
|
||||
|
||||
_loadNotes();
|
||||
@ -484,7 +493,7 @@ class GitJournalRepo with ChangeNotifier {
|
||||
Future<void> discardChanges(Note note) async {
|
||||
var repo = await GitRepository.load(repoPath);
|
||||
await repo.checkout(note.filePath);
|
||||
return note.load();
|
||||
await note.load();
|
||||
}
|
||||
|
||||
Future<List<GitRemoteConfig>> remoteConfigs() async {
|
||||
@ -499,13 +508,13 @@ class GitJournalRepo with ChangeNotifier {
|
||||
var remoteName = repo.config.remotes.first.name;
|
||||
var remoteBranches = await repo.remoteBranches(remoteName);
|
||||
branches.addAll(remoteBranches.map((e) {
|
||||
return e.name.branchName();
|
||||
return e.name.branchName()!;
|
||||
}));
|
||||
}
|
||||
return branches.toList()..sort();
|
||||
}
|
||||
|
||||
String get currentBranch => _currentBranch;
|
||||
String? get currentBranch => _currentBranch;
|
||||
|
||||
Future<String> checkoutBranch(String branchName) async {
|
||||
Log.i("Changing branch to $branchName");
|
||||
@ -522,7 +531,7 @@ class GitJournalRepo with ChangeNotifier {
|
||||
print("Done checking out $branchName");
|
||||
|
||||
await _notesCache.clear();
|
||||
notesFolder.reset(repoPath);
|
||||
notesFolder!.reset(repoPath);
|
||||
notifyListeners();
|
||||
|
||||
_loadNotes();
|
||||
@ -575,8 +584,8 @@ Future<void> _copyDirectory(String source, String destination) async {
|
||||
/// Add a GitIgnore file if no file is present. This way we always at least have
|
||||
/// one commit. It makes doing a git pull and push easier
|
||||
Future<void> _addFileInRepo({
|
||||
@required GitJournalRepo repo,
|
||||
@required Settings settings,
|
||||
required GitJournalRepo repo,
|
||||
required Settings settings,
|
||||
}) async {
|
||||
var repoPath = repo.repoPath;
|
||||
var dirList = await Directory(repoPath).list().toList();
|
||||
|
Reference in New Issue
Block a user