|
@@ -7,6 +7,7 @@ using System;
|
|
|
using GitMerge;
|
|
|
using System.Linq;
|
|
|
using UnityEditor;
|
|
|
+using UnityEngine.Scripting;
|
|
|
using Terra.Arbitrator.Settings;
|
|
|
using Terra.Arbitrator.Services;
|
|
|
using Terra.Arbitrator.Promises;
|
|
@@ -19,6 +20,7 @@ namespace Terra.Arbitrator.GUI
|
|
|
|
|
|
public enum SortColumn { Commit, Status, FilePath }
|
|
|
|
|
|
+ [Preserve]
|
|
|
public class ArbitratorController
|
|
|
{
|
|
|
private List<GitChange> _changes = new();
|
|
@@ -401,10 +403,40 @@ namespace Terra.Arbitrator.GUI
|
|
|
|
|
|
private void ResetMultipleFiles(List<string> filePaths)
|
|
|
{
|
|
|
- InfoMessage = $"Starting reset for {filePaths.Count} file(s)... This may trigger script compilation.";
|
|
|
- _requestRepaint?.Invoke();
|
|
|
- SessionState.SetString("BetterGit.ResetQueue", string.Join(";", filePaths));
|
|
|
- EditorApplication.delayCall += BetterGitStatePersistence.ContinueInterruptedReset;
|
|
|
+ // First, check if any of the files to be reset are scripts.
|
|
|
+ var hasScripts = filePaths.Any(p => p.EndsWith(".cs", StringComparison.OrdinalIgnoreCase));
|
|
|
+
|
|
|
+ if (hasScripts)
|
|
|
+ {
|
|
|
+ InfoMessage = $"Starting reset for {filePaths.Count} file(s)... This may trigger script compilation.";
|
|
|
+ _requestRepaint?.Invoke();
|
|
|
+ SessionState.SetString("BetterGit.ResetQueue", string.Join(";", filePaths));
|
|
|
+ EditorApplication.delayCall += BetterGitStatePersistence.ContinueInterruptedReset;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ StartOperation($"Resetting {filePaths.Count} file(s)...");
|
|
|
+
|
|
|
+ IPromise<string> promiseChain = new Promise<string>((resolve, _) => resolve(""));
|
|
|
+
|
|
|
+ foreach (var path in filePaths)
|
|
|
+ {
|
|
|
+ promiseChain = promiseChain.Then(_ => {
|
|
|
+ var change = GitService.GetChangeForFile(path);
|
|
|
+ return change != null ? GitService.ResetFileChanges(change) : new Promise<string>((res, _) => res(""));
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ promiseChain
|
|
|
+ .Then(successMsg => {
|
|
|
+ InfoMessage = $"Successfully reset {filePaths.Count} file(s).";
|
|
|
+ Refresh();
|
|
|
+ })
|
|
|
+ .Catch(ex => {
|
|
|
+ HandleOperationError(ex);
|
|
|
+ FinishOperation();
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void ForcePull()
|