refactor: change the way to refresh repository's data.

* mark dirty instead of calling refresh method directly
* force mark branches data dirty after remotes changed
This commit is contained in:
leo 2024-03-08 09:57:29 +08:00
parent 3eb8a82005
commit a89760c7a5
6 changed files with 33 additions and 17 deletions

View file

@ -53,8 +53,12 @@ namespace SourceGit.Models {
}
}
public void MarkWorkingCopyRefreshed() {
_updateWC = 0;
public void MarkBranchDirtyManually() {
_updateBranch = DateTime.Now.ToFileTime() - 1;
}
public void MarkWorkingCopyDirtyManually() {
_updateWC = DateTime.Now.ToFileTime() - 1;
}
public void Dispose() {

View file

@ -70,7 +70,10 @@ namespace SourceGit.ViewModels {
new Commands.Config(_repo.FullPath).Set($"remote.{_name}.sshkey", SSHKey);
}
}
CallUIThread(() => _repo.SetWatcherEnabled(true));
CallUIThread(() => {
_repo.MarkBranchesDirtyManually();
_repo.SetWatcherEnabled(true);
});
return succ;
});
}

View file

@ -19,7 +19,10 @@ namespace SourceGit.ViewModels {
return Task.Run(() => {
var succ = new Commands.Remote(_repo.FullPath).Delete(Remote.Name);
CallUIThread(() => _repo.SetWatcherEnabled(true));
CallUIThread(() => {
_repo.MarkBranchesDirtyManually();
_repo.SetWatcherEnabled(true);
});
return succ;
});
}

View file

@ -306,6 +306,14 @@ namespace SourceGit.ViewModels {
if (_watcher != null) _watcher.SetEnabled(enabled);
}
public void MarkBranchesDirtyManually() {
if (_watcher != null) _watcher.MarkBranchDirtyManually();
}
public void MarkWorkingCopyDirtyManually() {
if (_watcher != null) _watcher.MarkWorkingCopyDirtyManually();
}
public void NavigateToCommit(string sha) {
if (_histories != null) {
SelectedViewIndex = 0;
@ -357,7 +365,7 @@ namespace SourceGit.ViewModels {
} else if (File.Exists(otherMerge)) {
mode = "merge";
} else {
await Task.Run(RefreshWorkingCopyChanges);
MarkWorkingCopyDirtyManually();
return;
}
@ -394,7 +402,7 @@ namespace SourceGit.ViewModels {
} else if (File.Exists(Path.Combine(_gitDir, "MERGE_HEAD"))) {
cmd.Args = "merge --abort";
} else {
await Task.Run(RefreshWorkingCopyChanges);
MarkWorkingCopyDirtyManually();
return;
}
@ -491,8 +499,6 @@ namespace SourceGit.ViewModels {
HasUnsolvedConflict = hasUnsolvedConflict;
OnPropertyChanged(nameof(WorkingCopyChangesCount));
});
_watcher.MarkWorkingCopyRefreshed();
}
public void RefreshStashes() {

View file

@ -246,7 +246,7 @@ namespace SourceGit.ViewModels {
await Task.Run(() => new Commands.Add(_repo.FullPath, step).Exec());
}
}
_repo.RefreshWorkingCopyChanges();
_repo.MarkWorkingCopyDirtyManually();
_repo.SetWatcherEnabled(true);
IsStaging = false;
}
@ -266,7 +266,7 @@ namespace SourceGit.ViewModels {
await Task.Run(() => new Commands.Reset(_repo.FullPath, step).Exec());
}
}
_repo.RefreshWorkingCopyChanges();
_repo.MarkWorkingCopyDirtyManually();
_repo.SetWatcherEnabled(true);
IsUnstaging = false;
}
@ -296,7 +296,7 @@ namespace SourceGit.ViewModels {
if (succ) {
await Task.Run(() => new Commands.Add(_repo.FullPath, [ctx.Change]).Exec());
}
_repo.RefreshWorkingCopyChanges();
_repo.MarkWorkingCopyDirtyManually();
_repo.SetWatcherEnabled(true);
}
}
@ -308,7 +308,7 @@ namespace SourceGit.ViewModels {
if (succ) {
await Task.Run(() => new Commands.Add(_repo.FullPath, [ctx.Change]).Exec());
}
_repo.RefreshWorkingCopyChanges();
_repo.MarkWorkingCopyDirtyManually();
_repo.SetWatcherEnabled(true);
}
}
@ -362,7 +362,7 @@ namespace SourceGit.ViewModels {
PopupHost.ShowAndStartPopup(new Push(_repo, null));
}
}
_repo.RefreshWorkingCopyChanges();
_repo.MarkWorkingCopyDirtyManually();
_repo.SetWatcherEnabled(true);
IsCommitting = false;
}

View file

@ -734,7 +734,7 @@ namespace SourceGit.Views {
new Commands.Apply(ctx.RepositoryPath, tmpFile, true, "nowarn", "--cache --index").Exec();
File.Delete(tmpFile);
repo.RefreshWorkingCopyChanges();
repo.MarkWorkingCopyDirtyManually();
repo.SetWatcherEnabled(true);
e.Handled = true;
};
@ -760,7 +760,7 @@ namespace SourceGit.Views {
new Commands.Apply(ctx.RepositoryPath, tmpFile, true, "nowarn", "--reverse").Exec();
File.Delete(tmpFile);
repo.RefreshWorkingCopyChanges();
repo.MarkWorkingCopyDirtyManually();
repo.SetWatcherEnabled(true);
e.Handled = true;
};
@ -788,7 +788,7 @@ namespace SourceGit.Views {
new Commands.Apply(ctx.RepositoryPath, tmpFile, true, "nowarn", "--cache --index --reverse").Exec();
File.Delete(tmpFile);
repo.RefreshWorkingCopyChanges();
repo.MarkWorkingCopyDirtyManually();
repo.SetWatcherEnabled(true);
e.Handled = true;
};
@ -814,7 +814,7 @@ namespace SourceGit.Views {
new Commands.Apply(ctx.RepositoryPath, tmpFile, true, "nowarn", "--index --reverse").Exec();
File.Delete(tmpFile);
repo.RefreshWorkingCopyChanges();
repo.MarkWorkingCopyDirtyManually();
repo.SetWatcherEnabled(true);
e.Handled = true;
};