139 lines
4.2 KiB
C#
139 lines
4.2 KiB
C#
using System.IO;
|
|
using System.Reflection;
|
|
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
using Codice.Client.Common;
|
|
using Codice.Utils;
|
|
using PlasticGui;
|
|
|
|
namespace Unity.PlasticSCM.Editor.AssetUtils
|
|
{
|
|
internal static class AssetsPath
|
|
{
|
|
internal static class GetFullPath
|
|
{
|
|
internal static string ForObject(Object obj)
|
|
{
|
|
string relativePath = AssetDatabase.GetAssetPath(obj);
|
|
|
|
if (string.IsNullOrEmpty(relativePath))
|
|
return null;
|
|
|
|
return Path.GetFullPath(relativePath);
|
|
}
|
|
|
|
internal static string ForGuid(string guid)
|
|
{
|
|
string relativePath = GetAssetPath(guid);
|
|
|
|
if (string.IsNullOrEmpty(relativePath))
|
|
return null;
|
|
|
|
return Path.GetFullPath(relativePath);
|
|
}
|
|
}
|
|
|
|
internal static class GetFullPathUnderWorkspace
|
|
{
|
|
internal static string ForAsset(
|
|
string wkPath,
|
|
string assetPath)
|
|
{
|
|
if (string.IsNullOrEmpty(assetPath))
|
|
return null;
|
|
|
|
string fullPath = Path.GetFullPath(assetPath);
|
|
|
|
if (!PathHelper.IsContainedOn(fullPath, wkPath))
|
|
return null;
|
|
|
|
if (!fullPath.StartsWith("/"))
|
|
fullPath = fullPath.Substring(0, 1).ToLowerInvariant() + fullPath.Substring(1);
|
|
return fullPath.TrimEnd('/', '\\');
|
|
}
|
|
|
|
internal static string ForGuid(
|
|
string wkPath,
|
|
string guid)
|
|
{
|
|
return ForAsset(wkPath, GetAssetPath(guid));
|
|
}
|
|
}
|
|
|
|
internal static string GetLayoutsFolderRelativePath()
|
|
{
|
|
return string.Concat(mAssetsFolderRelativePath, "/Layouts");
|
|
}
|
|
|
|
internal static string GetStylesFolderRelativePath()
|
|
{
|
|
return string.Concat(mAssetsFolderRelativePath, "/Styles");
|
|
}
|
|
|
|
internal static string GetImagesFolderRelativePath()
|
|
{
|
|
return string.Concat(mAssetsFolderRelativePath, "/Images");
|
|
}
|
|
|
|
internal static string GetLibEditorFolderFullPath()
|
|
{
|
|
return mLibEditorFolderFullPath;
|
|
}
|
|
|
|
internal static string GetRelativePath(string fullPath)
|
|
{
|
|
return PathHelper.GetRelativePath(mProjectFullPath, fullPath).Substring(1);
|
|
}
|
|
|
|
internal static bool IsPackagesRootElement(string path)
|
|
{
|
|
return PathHelper.IsSamePath(mProjectPackagesFullPath, PathHelper.GetParentPath(path));
|
|
}
|
|
|
|
internal static bool IsScript(string path)
|
|
{
|
|
return Path.GetExtension(path).Equals(".cs");
|
|
}
|
|
|
|
internal static bool IsRunningAsUPMPackage()
|
|
{
|
|
return IsRunningAsUPMPackage(mLibEditorFolderFullPath);
|
|
}
|
|
|
|
static string GetAssetPath(string guid)
|
|
{
|
|
if (string.IsNullOrEmpty(guid))
|
|
return null;
|
|
|
|
return AssetDatabase.GUIDToAssetPath(guid);
|
|
}
|
|
|
|
static bool IsRunningAsUPMPackage(string libEditorFolderFullPath)
|
|
{
|
|
// The Lib/Editor path containing the "unityplastic.dll" ends with
|
|
// - "Packages/com.unity.collab-proxy@xxx/Lib/Editor" when running as an UPM package
|
|
// - "Assets/Plugins/PlasticSCM/Lib/Editor" in the development environment
|
|
return libEditorFolderFullPath.Contains(PackageInfo.NAME);
|
|
}
|
|
|
|
static AssetsPath()
|
|
{
|
|
mLibEditorFolderFullPath = Path.GetFullPath(
|
|
AssemblyLocation.GetAssemblyDirectory(
|
|
Assembly.GetAssembly(typeof(PlasticLocalization))));
|
|
|
|
mAssetsFolderRelativePath = IsRunningAsUPMPackage(mLibEditorFolderFullPath) ?
|
|
"Packages/com.unity.collab-proxy/Editor/Assets" :
|
|
"Assets/Plugins/PlasticSCM/Editor/Assets";
|
|
}
|
|
|
|
static readonly string mProjectFullPath = ProjectPath.Get();
|
|
static readonly string mProjectPackagesFullPath = Path.Combine(mProjectFullPath, "Packages");
|
|
|
|
static string mLibEditorFolderFullPath;
|
|
static string mAssetsFolderRelativePath;
|
|
}
|
|
}
|