enhance: exec git command directly instead of call methods from WorkingCopy (#330)

This commit is contained in:
leo 2024-08-08 09:33:46 +08:00
parent dc32c3e95d
commit f8bc48c49c
No known key found for this signature in database

View file

@ -1147,27 +1147,22 @@ namespace SourceGit.Views
if (!selection.HasChanges) if (!selection.HasChanges)
return; return;
var repoView = this.FindAncestorOfType<Repository>();
if (repoView == null)
return;
var repo = repoView.DataContext as ViewModels.Repository;
if (repo == null)
return;
repo.SetWatcherEnabled(false);
if (!selection.HasLeftChanges) if (!selection.HasLeftChanges)
{ {
var workcopyView = this.FindAncestorOfType<WorkingCopy>(); new Commands.Add(repo.FullPath, [change]).Exec();
if (workcopyView == null)
return;
var workcopy = workcopyView.DataContext as ViewModels.WorkingCopy;
workcopy?.StageChanges(new List<Models.Change> { change });
} }
else else
{ {
var repoView = this.FindAncestorOfType<Repository>();
if (repoView == null)
return;
var repo = repoView.DataContext as ViewModels.Repository;
if (repo == null)
return;
repo.SetWatcherEnabled(false);
var tmpFile = Path.GetTempFileName(); var tmpFile = Path.GetTempFileName();
if (change.WorkTree == Models.ChangeState.Untracked) if (change.WorkTree == Models.ChangeState.Untracked)
{ {
@ -1186,10 +1181,10 @@ namespace SourceGit.Views
new Commands.Apply(diff.Repo, tmpFile, true, "nowarn", "--cache --index").Exec(); new Commands.Apply(diff.Repo, tmpFile, true, "nowarn", "--cache --index").Exec();
File.Delete(tmpFile); File.Delete(tmpFile);
repo.MarkWorkingCopyDirtyManually();
repo.SetWatcherEnabled(true);
} }
repo.MarkWorkingCopyDirtyManually();
repo.SetWatcherEnabled(true);
} }
private void OnUnstageChunk(object sender, RoutedEventArgs e) private void OnUnstageChunk(object sender, RoutedEventArgs e)
@ -1210,27 +1205,25 @@ namespace SourceGit.Views
if (!selection.HasChanges) if (!selection.HasChanges)
return; return;
var repoView = this.FindAncestorOfType<Repository>();
if (repoView == null)
return;
var repo = repoView.DataContext as ViewModels.Repository;
if (repo == null)
return;
repo.SetWatcherEnabled(false);
if (!selection.HasLeftChanges) if (!selection.HasLeftChanges)
{ {
var workcopyView = this.FindAncestorOfType<WorkingCopy>(); if (change.DataForAmend != null)
if (workcopyView == null) new Commands.UnstageChangesForAmend(repo.FullPath, [change]).Exec();
return; else
new Commands.Reset(repo.FullPath, [change]).Exec();
var workcopy = workcopyView.DataContext as ViewModels.WorkingCopy;
workcopy?.UnstageChanges(new List<Models.Change> { change });
} }
else else
{ {
var repoView = this.FindAncestorOfType<Repository>();
if (repoView == null)
return;
var repo = repoView.DataContext as ViewModels.Repository;
if (repo == null)
return;
repo.SetWatcherEnabled(false);
var treeGuid = new Commands.QueryStagedFileBlobGuid(diff.Repo, change.Path).Result(); var treeGuid = new Commands.QueryStagedFileBlobGuid(diff.Repo, change.Path).Result();
var tmpFile = Path.GetTempFileName(); var tmpFile = Path.GetTempFileName();
if (change.Index == Models.ChangeState.Added) if (change.Index == Models.ChangeState.Added)
@ -1242,10 +1235,10 @@ namespace SourceGit.Views
new Commands.Apply(diff.Repo, tmpFile, true, "nowarn", "--cache --index --reverse").Exec(); new Commands.Apply(diff.Repo, tmpFile, true, "nowarn", "--cache --index --reverse").Exec();
File.Delete(tmpFile); File.Delete(tmpFile);
repo.MarkWorkingCopyDirtyManually();
repo.SetWatcherEnabled(true);
} }
repo.MarkWorkingCopyDirtyManually();
repo.SetWatcherEnabled(true);
} }
private void OnDiscardChunk(object sender, RoutedEventArgs e) private void OnDiscardChunk(object sender, RoutedEventArgs e)
@ -1266,27 +1259,22 @@ namespace SourceGit.Views
if (!selection.HasChanges) if (!selection.HasChanges)
return; return;
var repoView = this.FindAncestorOfType<Repository>();
if (repoView == null)
return;
var repo = repoView.DataContext as ViewModels.Repository;
if (repo == null)
return;
repo.SetWatcherEnabled(false);
if (!selection.HasLeftChanges) if (!selection.HasLeftChanges)
{ {
var workcopyView = this.FindAncestorOfType<WorkingCopy>(); Commands.Discard.Changes(repo.FullPath, [change]);
if (workcopyView == null)
return;
var workcopy = workcopyView.DataContext as ViewModels.WorkingCopy;
workcopy?.Discard(new List<Models.Change> { change });
} }
else else
{ {
var repoView = this.FindAncestorOfType<Repository>();
if (repoView == null)
return;
var repo = repoView.DataContext as ViewModels.Repository;
if (repo == null)
return;
repo.SetWatcherEnabled(false);
var tmpFile = Path.GetTempFileName(); var tmpFile = Path.GetTempFileName();
if (change.Index == Models.ChangeState.Added) if (change.Index == Models.ChangeState.Added)
{ {
@ -1305,10 +1293,10 @@ namespace SourceGit.Views
new Commands.Apply(diff.Repo, tmpFile, true, "nowarn", "--reverse").Exec(); new Commands.Apply(diff.Repo, tmpFile, true, "nowarn", "--reverse").Exec();
File.Delete(tmpFile); File.Delete(tmpFile);
repo.MarkWorkingCopyDirtyManually();
repo.SetWatcherEnabled(true);
} }
repo.MarkWorkingCopyDirtyManually();
repo.SetWatcherEnabled(true);
} }
} }
} }