public static void Checkout(string path)
        {
            if (UnityEditor.VersionControl.Provider.enabled && UnityEditor.VersionControl.Provider.isActive)
            {
                var asset = UnityEditor.VersionControl.Provider.GetAssetByPath(path);
                if (asset == null)
                {
                    return;
                }

                UnityEditor.VersionControl.AssetList lst = new UnityEditor.VersionControl.AssetList();
                lst.Add(asset);
                if (UnityEditor.VersionControl.Provider.AddIsValid(lst))
                {
                    UnityEditor.VersionControl.Provider.Add(lst, false);
                }
                if (UnityEditor.VersionControl.Provider.hasCheckoutSupport)
                {
                    UnityEditor.VersionControl.Provider.Checkout(asset, UnityEditor.VersionControl.CheckoutMode.Both);
                }
            }
            if (System.IO.File.Exists(path))
            {
                System.IO.FileInfo fileInfo = new System.IO.FileInfo(path);
                fileInfo.IsReadOnly = false;
            }
        }
Beispiel #2
0
 /// <summary>
 /// Checks out a file should Version Control be active and valid.
 /// </summary>
 /// <param name="path">Path to the file that needs checking out.</param>
 /// <param name="logger">Logger, used to log any error messages.</param>
 /// <returns>False should the checkout fail, otherwise true.</returns>
 public static bool CheckoutFile(string path, Logger logger)
 {
     try {
         if (UnityEditor.VersionControl.Provider.enabled &&
             UnityEditor.VersionControl.Provider.isActive &&
             (!UnityEditor.VersionControl.Provider.requiresNetwork ||
              UnityEditor.VersionControl.Provider.onlineState ==
              UnityEditor.VersionControl.OnlineState.Online))
         {
             // Some versions of Unity seem to have bug to convert "string path" to
             // "AssetList assets" (See #359). Generate it in advance as a workaround.
             var assetList = new UnityEditor.VersionControl.AssetList();
             assetList.Add(new UnityEditor.VersionControl.Asset(path));
             // Unity 2019.1+ broke backwards compatibility of Checkout() by adding an
             // optional argument to the method so we dynamically invoke the method to add
             // the optional
             // argument for the Unity 2019.1+ overload at runtime.
             var task = (UnityEditor.VersionControl.Task)VersionHandler.InvokeStaticMethod(
                 typeof(UnityEditor.VersionControl.Provider),
                 "Checkout",
                 new object[] { assetList, UnityEditor.VersionControl.CheckoutMode.Exact },
                 namedArgs: null);
             task.Wait();
             if (!task.success)
             {
                 var errorMessage = new List <string>();
                 errorMessage.Add(String.Format("Failed to checkout {0}.", path));
                 if (task.messages != null)
                 {
                     foreach (var message in task.messages)
                     {
                         if (message != null)
                         {
                             errorMessage.Add(message.message);
                         }
                     }
                 }
                 logger.Log(String.Join("\n", errorMessage.ToArray()),
                            level: LogLevel.Warning);
                 return(false);
             }
         }
         return(true);
     } catch (Exception ex) {
         logger.Log(String.Format("Failed to checkout {0} ({1}.", path, ex),
                    level: LogLevel.Warning);
         return(false);
     }
 }