浏览代码

Sujith :) ->
1. Added preserve changes

sujith 2 月之前
父节点
当前提交
268f3db769

+ 36 - 4
Assets/Better Git/Arbitrator/Editor/GUI/ArbitratorController.cs

@@ -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()

+ 2 - 0
Assets/Better Git/Arbitrator/Editor/GUI/ArbitratorWindow.cs

@@ -8,9 +8,11 @@ using System;
 using System.Linq;
 using UnityEngine;
 using UnityEditor;
+using UnityEngine.Scripting;
 
 namespace Terra.Arbitrator.GUI
 {
+    [Preserve]
     public class ArbitratorWindow : EditorWindow
     {
         private const string DockNextTo = "UnityEditor.GameView,UnityEditor.dll";

+ 2 - 1
Assets/Better Git/Arbitrator/Editor/GUI/BetterGitSettingsProvider.cs

@@ -1,9 +1,10 @@
 using UnityEditor;
-using UnityEngine;
+using UnityEngine.Scripting;
 using Terra.Arbitrator.Settings;
 
 namespace Terra.Arbitrator.GUI
 {
+    [Preserve]
     internal class BetterGitSettingsProvider : SettingsProvider
     {
         // The path in the Project Settings window.

+ 2 - 0
Assets/Better Git/Arbitrator/Editor/GUI/ConflictResolutionWindow.cs

@@ -5,10 +5,12 @@
 
 using UnityEditor;
 using UnityEngine;
+using UnityEngine.Scripting;
 using System.Collections.Generic;
 
 namespace Terra.Arbitrator.GUI
 {
+    [Preserve]
     public class ConflictResolutionWindow : EditorWindow
     {
         private List<string> _conflictingFiles;

+ 2 - 0
Assets/Better Git/Arbitrator/Editor/GUI/GitAssetPostprocessor.cs

@@ -4,9 +4,11 @@
 // trigger a refresh of the Better Git window when assets change.
 
 using UnityEditor;
+using UnityEngine.Scripting;
 
 namespace Terra.Arbitrator.GUI
 {
+    [Preserve]
     public class GitAssetPostprocessor : AssetPostprocessor
     {
         private static void OnPostprocessAllAssets(string[] _, string[] __, string[] ___, string[] ____)

+ 2 - 0
Assets/Better Git/Arbitrator/Editor/Promises/IPromise.cs

@@ -5,11 +5,13 @@
 // This decouples the consumer from the implementation.
 
 using System;
+using UnityEngine.Scripting;
 
 namespace Terra.Arbitrator.Promises
 {
     public enum PromiseState { Pending, Resolved, Rejected }
 
+    [Preserve]
     public interface IPromise<out TResult>
     {
         /// <summary>

+ 3 - 0
Assets/Better Git/Arbitrator/Editor/Promises/ITrackablePromise.cs

@@ -3,11 +3,14 @@
 // A non-generic interface that allows the PromiseManager to track and
 // tick promises without needing to know their specific result type.
 
+using UnityEngine.Scripting;
+
 namespace Terra.Arbitrator.Promises
 {
     /// <summary>
     /// Represents a promise that can be ticked by the PromiseManager.
     /// </summary>
+    [Preserve]
     public interface ITrackablePromise
     {
         /// <summary>

+ 2 - 0
Assets/Better Git/Arbitrator/Editor/Promises/Promise.cs

@@ -5,9 +5,11 @@
 
 using System;
 using System.Threading;
+using UnityEngine.Scripting;
 
 namespace Terra.Arbitrator.Promises
 {
+    [Preserve]
     public class Promise<TResult> : IPromise<TResult>, ITrackablePromise
     {
         private PromiseState State { get; set; }

+ 2 - 0
Assets/Better Git/Arbitrator/Editor/Promises/PromiseManager.cs

@@ -4,10 +4,12 @@
 // promises, ensuring their callbacks are executed on the main thread.
 
 using UnityEditor;
+using UnityEngine.Scripting;
 using System.Collections.Generic;
 
 namespace Terra.Arbitrator.Promises
 {
+    [Preserve]
     [InitializeOnLoad] // Ensures the static constructor is called when the editor loads.
     public static class PromiseManager
     {

+ 2 - 0
Assets/Better Git/Arbitrator/Editor/Services/BetterGitStatePersistence.cs

@@ -5,9 +5,11 @@
 
 using System.Linq;
 using UnityEditor;
+using UnityEngine.Scripting;
 
 namespace Terra.Arbitrator.Services
 {
+    [Preserve]
     [InitializeOnLoad]
     public static class BetterGitStatePersistence
     {

+ 2 - 0
Assets/Better Git/Arbitrator/Editor/Services/GitChange.cs

@@ -9,12 +9,14 @@
 // 2. This class is used by GitService.cs and ArbitratorWindow.cs.
 
 using LibGit2Sharp;
+using UnityEngine.Scripting;
 
 namespace Terra.Arbitrator.Services
 {
     /// <summary>
     /// A data container for a single file change detected by Git.
     /// </summary>
+    [Preserve]
     public class GitChange
     {
         public string FilePath { get; private set; }

+ 2 - 0
Assets/Better Git/Arbitrator/Editor/Services/GitCommand.cs

@@ -9,6 +9,7 @@ using System.IO;
 using System.Linq;
 using UnityEngine;
 using System.Text;
+using UnityEngine.Scripting;
 using System.Threading.Tasks;
 using System.Runtime.InteropServices;
 
@@ -18,6 +19,7 @@ namespace Terra.Arbitrator.Services
     /// An internal helper class for executing Git commands.
     /// It centralizes the logic for finding executables and running them via CliWrap.
     /// </summary>
+    [Preserve]
     internal static class GitCommand
     {
         private static string _projectRoot;

+ 3 - 0
Assets/Better Git/Arbitrator/Editor/Services/GitExecutors.cs

@@ -13,6 +13,7 @@ using LibGit2Sharp;
 using System.Text;
 using System.Globalization;
 using System.ComponentModel;
+using UnityEngine.Scripting;
 using System.Threading.Tasks;
 using Terra.Arbitrator.Settings;
 using System.Collections.Generic;
@@ -22,6 +23,7 @@ namespace Terra.Arbitrator.Services
     /// <summary>
     /// A simple data container for branch information.
     /// </summary>
+    [Preserve]
     public class BranchData
     {
         public string CurrentBranch { get; set; }
@@ -32,6 +34,7 @@ namespace Terra.Arbitrator.Services
     /// Contains the promise executor methods for all Git operations.
     /// This is an internal implementation detail and is not exposed publicly.
     /// </summary>
+    [Preserve]
     internal static class GitExecutors
     {
         private static string _projectRoot;

+ 2 - 0
Assets/Better Git/Arbitrator/Editor/Services/GitService.cs

@@ -5,6 +5,7 @@
 // internal GitExecutors class.
 
 using System;
+using UnityEngine.Scripting;
 using Terra.Arbitrator.Promises;
 using Terra.Arbitrator.Settings;
 using System.Collections.Generic;
@@ -14,6 +15,7 @@ namespace Terra.Arbitrator.Services
     /// <summary>
     /// The public static API for interacting with the Git repository.
     /// </summary>
+    [Preserve]
     public static class GitService
     {
         /// <summary>

+ 2 - 0
Assets/Better Git/Arbitrator/Editor/Settings/BetterGitSettings.cs

@@ -1,7 +1,9 @@
 using UnityEditor;
+using UnityEngine.Scripting;
 
 namespace Terra.Arbitrator.Settings
 {
+    [Preserve]
     public static class BetterGitSettings
     {
         // Define unique keys to avoid conflicts in EditorPrefs.

+ 3 - 1
Assets/Better Git/Arbitrator/Editor/Settings/PullAnalysisRequest.cs

@@ -3,11 +3,13 @@
 // A data container for the result of a pre-pull conflict analysis.
 // It indicates if conflicts were found and which files are involved.
 
-using System.Collections.Generic;
 using System.Linq;
+using UnityEngine.Scripting;
+using System.Collections.Generic;
 
 namespace Terra.Arbitrator.Settings
 {
+    [Preserve]
     public class PullAnalysisResult
     {
         public bool HasConflicts { get; private set; }