暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

PlasticProjectSettingsProvider.cs 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598
  1. using System;
  2. using UnityEditor;
  3. using UnityEngine;
  4. using UnityEngine.UIElements;
  5. using Codice.Client.Commands;
  6. using Codice.Client.Common.EventTracking;
  7. using Codice.Client.Common.FsNodeReaders;
  8. using Codice.Client.Common.Threading;
  9. using Codice.CM.Common;
  10. using Codice.Utils;
  11. using PlasticGui;
  12. using PlasticGui.WorkspaceWindow.PendingChanges;
  13. using Unity.PlasticSCM.Editor.UI;
  14. using AssetPostprocessor = Unity.PlasticSCM.Editor.AssetUtils.Processor.AssetPostprocessor;
  15. namespace Unity.PlasticSCM.Editor
  16. {
  17. class PlasticProjectSettingsProvider : SettingsProvider
  18. {
  19. public PlasticProjectSettingsProvider(
  20. string path, SettingsScope scope = SettingsScope.User)
  21. : base(path, scope)
  22. {
  23. label = UnityConstants.PROJECT_SETTINGS_TAB_TITLE;
  24. }
  25. [SettingsProvider]
  26. public static SettingsProvider CreateSettingsProvider()
  27. {
  28. if (CollabPlugin.IsEnabled())
  29. return null;
  30. if (!FindWorkspace.HasWorkspace(ApplicationDataPath.Get()))
  31. return null;
  32. PlasticApp.InitializeIfNeeded();
  33. return new PlasticProjectSettingsProvider(
  34. UnityConstants.PROJECT_SETTINGS_TAB_PATH, SettingsScope.Project)
  35. {
  36. keywords = GetSearchKeywordsFromGUIContentProperties<Styles>()
  37. };
  38. }
  39. public override void OnActivate(
  40. string searchContext,
  41. VisualElement rootElement)
  42. {
  43. IAutoRefreshView autoRefreshView = GetPendingChangesView();
  44. if (autoRefreshView != null)
  45. autoRefreshView.DisableAutoRefresh();
  46. mIsPluginEnabled = PlasticPluginIsEnabledPreference.IsEnabled();
  47. mWkInfo = FindWorkspace.InfoForApplicationPath(
  48. ApplicationDataPath.Get(), PlasticGui.Plastic.API);
  49. CheckFsWatcher(mWkInfo);
  50. mAutomaticAdd = AssetPostprocessor.AutomaticAdd;
  51. mPendingChangesSavedOptions = new PendingChangesOptions();
  52. mPendingChangesSavedOptions.LoadPendingChangesOptions();
  53. SetPendingChangesOptions(mPendingChangesSavedOptions);
  54. mIsProjectSettingsActivated = true;
  55. }
  56. public override void OnDeactivate()
  57. {
  58. if (!mIsProjectSettingsActivated)
  59. {
  60. return;
  61. }
  62. mIsProjectSettingsActivated = false;
  63. bool arePendingChangesOptionsChanged = false;
  64. try
  65. {
  66. AssetPostprocessor.SetAutomaticAddOption(mAutomaticAdd);
  67. PendingChangesOptions newPendingChangesOptions = GetPendingChangesOptions();
  68. arePendingChangesOptionsChanged = !mPendingChangesSavedOptions.AreSameOptions(newPendingChangesOptions);
  69. if (arePendingChangesOptionsChanged)
  70. {
  71. newPendingChangesOptions.SavePreferences();
  72. }
  73. }
  74. finally
  75. {
  76. IAutoRefreshView autoRefreshView = GetPendingChangesView();
  77. if (autoRefreshView != null)
  78. {
  79. autoRefreshView.EnableAutoRefresh();
  80. if (arePendingChangesOptionsChanged)
  81. {
  82. autoRefreshView.ForceRefresh();
  83. }
  84. }
  85. }
  86. }
  87. public override void OnGUI(string searchContext)
  88. {
  89. DrawSettingsSection(
  90. DoIsEnabledSetting);
  91. if (!mIsPluginEnabled)
  92. return;
  93. DrawSplitter.ForWidth(UnityConstants.SETTINGS_GUI_WIDTH);
  94. DrawSettingsSection(
  95. DoPendingChangesSettings);
  96. }
  97. void DoIsEnabledSetting()
  98. {
  99. using (new EditorGUILayout.HorizontalScope())
  100. {
  101. string message = PlasticLocalization.GetString(
  102. mIsPluginEnabled ?
  103. PlasticLocalization.Name.UnityVCSIsEnabled :
  104. PlasticLocalization.Name.UnityVCSIsDisabled);
  105. GUILayout.Label(
  106. message,
  107. EditorStyles.boldLabel,
  108. GUILayout.Height(20));
  109. EditorGUILayout.Space(8);
  110. DoIsEnabledButton();
  111. GUILayout.FlexibleSpace();
  112. }
  113. }
  114. void DoIsEnabledButton()
  115. {
  116. if (!GUILayout.Button(PlasticLocalization.GetString(
  117. mIsPluginEnabled ?
  118. PlasticLocalization.Name.DisableButton :
  119. PlasticLocalization.Name.EnableButton),
  120. UnityStyles.ProjectSettings.ToggleOn))
  121. {
  122. return;
  123. }
  124. if (!mIsPluginEnabled)
  125. {
  126. mIsPluginEnabled = true;
  127. TrackFeatureUseEvent.For(
  128. PlasticGui.Plastic.API.GetRepositorySpec(mWkInfo),
  129. TrackFeatureUseEvent.Features.UnityPackage.EnableManually);
  130. PlasticPlugin.Enable();
  131. PlasticPluginIsEnabledPreference.Enable();
  132. return;
  133. }
  134. if (mIsPluginEnabled)
  135. {
  136. mIsPluginEnabled = false;
  137. TrackFeatureUseEvent.For(
  138. PlasticGui.Plastic.API.GetRepositorySpec(mWkInfo),
  139. TrackFeatureUseEvent.Features.UnityPackage.DisableManually);
  140. PlasticPluginIsEnabledPreference.Disable();
  141. CloseWindowIfOpened.Plastic();
  142. PlasticShutdown.Shutdown();
  143. return;
  144. }
  145. }
  146. void DoPendingChangesSettings()
  147. {
  148. DoGeneralSettings();
  149. DoFileChangeSettings();
  150. DoFileVisibililySettings();
  151. DoFileDetectionSetings();
  152. EditorGUILayout.Space(10);
  153. DoFsWatcherMessage(mFSWatcherEnabled);
  154. }
  155. void DoGeneralSettings()
  156. {
  157. GUILayout.Label(
  158. PlasticLocalization.GetString(
  159. PlasticLocalization.Name.ProjectSettingsGeneral),
  160. EditorStyles.boldLabel);
  161. EditorGUILayout.Space(1);
  162. mAutomaticAdd = EditorGUILayout.Toggle(Styles.AutomaticAdd, mAutomaticAdd);
  163. mShowCheckouts = EditorGUILayout.Toggle(Styles.ShowCheckouts, mShowCheckouts);
  164. mAutoRefresh = EditorGUILayout.Toggle(Styles.AutoRefresh, mAutoRefresh);
  165. }
  166. void DoFileChangeSettings()
  167. {
  168. EditorGUILayout.Space(5);
  169. GUILayout.Label(
  170. PlasticLocalization.GetString(
  171. PlasticLocalization.Name.ProjectSettingsFileChange),
  172. EditorStyles.boldLabel);
  173. EditorGUILayout.Space(1);
  174. mShowChangedFiles = EditorGUILayout.Toggle(Styles.ShowChangedFiles, mShowChangedFiles);
  175. mCheckFileContent = EditorGUILayout.Toggle(Styles.CheckFileContent, mCheckFileContent);
  176. }
  177. void DoFileVisibililySettings()
  178. {
  179. EditorGUILayout.Space(5);
  180. GUILayout.Label(
  181. PlasticLocalization.GetString(
  182. PlasticLocalization.Name.ProjectSettingsFileVisibility),
  183. EditorStyles.boldLabel);
  184. EditorGUILayout.Space(1);
  185. mUseChangeLists = EditorGUILayout.Toggle(Styles.UseChangeLists, mUseChangeLists);
  186. mShowPrivateFields = EditorGUILayout.Toggle(Styles.ShowPrivateFields, mShowPrivateFields);
  187. mShowIgnoredFiles = EditorGUILayout.Toggle(Styles.ShowIgnoredFields, mShowIgnoredFiles);
  188. mShowHiddenFiles = EditorGUILayout.Toggle(Styles.ShowHiddenFields, mShowHiddenFiles);
  189. mShowDeletedFiles = EditorGUILayout.Toggle(Styles.ShowDeletedFilesDirs, mShowDeletedFiles);
  190. }
  191. void DoFileDetectionSetings()
  192. {
  193. EditorGUILayout.Space(5);
  194. GUILayout.Label(
  195. PlasticLocalization.GetString(
  196. PlasticLocalization.Name.ProjectSettingsMoveAndRename),
  197. EditorStyles.boldLabel);
  198. EditorGUILayout.Space(1);
  199. mShowMovedFiles = EditorGUILayout.Toggle(Styles.ShowMovedFiles, mShowMovedFiles);
  200. mMatchBinarySameExtension = EditorGUILayout.Toggle(Styles.MatchBinarySameExtension, mMatchBinarySameExtension);
  201. mMatchTextSameExtension = EditorGUILayout.Toggle(Styles.MatchTextSameExtension, mMatchTextSameExtension);
  202. mSimilarityPercent = EditorGUILayout.IntSlider(Styles.SimilarityPercent, mSimilarityPercent, 0, 100);
  203. }
  204. void DoFsWatcherMessage(bool isEnabled)
  205. {
  206. GUIContent message = new GUIContent(
  207. isEnabled ?
  208. GetFsWatcherEnabledMessage() :
  209. GetFsWatcherDisabledMessage(),
  210. isEnabled ?
  211. Images.GetInfoIcon() :
  212. Images.GetWarnIcon());
  213. GUILayout.Label(message, UnityStyles.Dialog.Toggle, GUILayout.Height(32));
  214. GUILayout.Space(-10);
  215. string formattedExplanation = isEnabled ?
  216. GetFsWatcherEnabledExplanation() :
  217. GetFsWatcherDisabledExplanation();
  218. string helpLink = GetHelpLink();
  219. DrawTextBlockWithEndLink.For(
  220. helpLink, formattedExplanation, UnityStyles.Paragraph);
  221. }
  222. void CheckFsWatcher(WorkspaceInfo wkInfo)
  223. {
  224. bool isFileSystemWatcherEnabled = false;
  225. IThreadWaiter waiter = ThreadWaiter.GetWaiter(10);
  226. waiter.Execute(
  227. /*threadOperationDelegate*/
  228. delegate
  229. {
  230. isFileSystemWatcherEnabled =
  231. IsFileSystemWatcherEnabled(wkInfo);
  232. },
  233. /*afterOperationDelegate*/
  234. delegate
  235. {
  236. if (waiter.Exception != null)
  237. return;
  238. mFSWatcherEnabled = isFileSystemWatcherEnabled;
  239. });
  240. }
  241. void SetPendingChangesOptions(PendingChangesOptions options)
  242. {
  243. mShowCheckouts = IsEnabled(
  244. WorkspaceStatusOptions.FindCheckouts, options.WorkspaceStatusOptions);
  245. mAutoRefresh = options.AutoRefresh;
  246. mShowChangedFiles = IsEnabled(
  247. WorkspaceStatusOptions.FindChanged, options.WorkspaceStatusOptions);
  248. mCheckFileContent = options.CheckFileContentForChanged;
  249. mUseChangeLists = options.UseChangeLists;
  250. mShowPrivateFields = IsEnabled(
  251. WorkspaceStatusOptions.FindPrivates, options.WorkspaceStatusOptions);
  252. mShowIgnoredFiles = IsEnabled(
  253. WorkspaceStatusOptions.ShowIgnored, options.WorkspaceStatusOptions);
  254. mShowHiddenFiles = IsEnabled(
  255. WorkspaceStatusOptions.ShowHiddenChanges, options.WorkspaceStatusOptions);
  256. mShowDeletedFiles = IsEnabled(
  257. WorkspaceStatusOptions.FindLocallyDeleted, options.WorkspaceStatusOptions);
  258. mShowMovedFiles = IsEnabled(
  259. WorkspaceStatusOptions.CalculateLocalMoves, options.WorkspaceStatusOptions);
  260. mMatchBinarySameExtension =
  261. options.MovedMatchingOptions.bBinMatchingOnlySameExtension;
  262. mMatchTextSameExtension =
  263. options.MovedMatchingOptions.bTxtMatchingOnlySameExtension;
  264. mSimilarityPercent = (int)((1 - options.MovedMatchingOptions.AllowedChangesPerUnit) * 100f);
  265. }
  266. PendingChangesOptions GetPendingChangesOptions()
  267. {
  268. WorkspaceStatusOptions resultWkStatusOptions =
  269. WorkspaceStatusOptions.None;
  270. if (mShowCheckouts)
  271. {
  272. resultWkStatusOptions |= WorkspaceStatusOptions.FindCheckouts;
  273. resultWkStatusOptions |= WorkspaceStatusOptions.FindReplaced;
  274. resultWkStatusOptions |= WorkspaceStatusOptions.FindCopied;
  275. }
  276. if (mShowChangedFiles)
  277. resultWkStatusOptions |= WorkspaceStatusOptions.FindChanged;
  278. if (mShowPrivateFields)
  279. resultWkStatusOptions |= WorkspaceStatusOptions.FindPrivates;
  280. if (mShowIgnoredFiles)
  281. resultWkStatusOptions |= WorkspaceStatusOptions.ShowIgnored;
  282. if (mShowHiddenFiles)
  283. resultWkStatusOptions |= WorkspaceStatusOptions.ShowHiddenChanges;
  284. if (mShowDeletedFiles)
  285. resultWkStatusOptions |= WorkspaceStatusOptions.FindLocallyDeleted;
  286. if (mShowMovedFiles)
  287. resultWkStatusOptions |= WorkspaceStatusOptions.CalculateLocalMoves;
  288. MovedMatchingOptions matchingOptions = new MovedMatchingOptions();
  289. matchingOptions.AllowedChangesPerUnit =
  290. (100 - mSimilarityPercent) / 100f;
  291. matchingOptions.bBinMatchingOnlySameExtension =
  292. mMatchBinarySameExtension;
  293. matchingOptions.bTxtMatchingOnlySameExtension =
  294. mMatchTextSameExtension;
  295. return new PendingChangesOptions(
  296. resultWkStatusOptions,
  297. matchingOptions,
  298. mUseChangeLists,
  299. true,
  300. false,
  301. mAutoRefresh,
  302. false,
  303. mCheckFileContent,
  304. false);
  305. }
  306. static void DrawSettingsSection(Action drawSettings)
  307. {
  308. float originalLabelWidth = EditorGUIUtility.labelWidth;
  309. try
  310. {
  311. EditorGUIUtility.labelWidth = UnityConstants.SETTINGS_GUI_WIDTH;
  312. using (new EditorGUILayout.HorizontalScope())
  313. {
  314. GUILayout.Space(10);
  315. using (new EditorGUILayout.VerticalScope())
  316. {
  317. GUILayout.Space(10);
  318. drawSettings();
  319. GUILayout.Space(10);
  320. }
  321. GUILayout.Space(10);
  322. }
  323. }
  324. finally
  325. {
  326. EditorGUIUtility.labelWidth = originalLabelWidth;
  327. }
  328. }
  329. static IAutoRefreshView GetPendingChangesView()
  330. {
  331. if (!EditorWindow.HasOpenInstances<PlasticWindow>())
  332. return null;
  333. PlasticWindow window = EditorWindow.
  334. GetWindow<PlasticWindow>(null, false);
  335. return window.GetPendingChangesView();
  336. }
  337. static string GetFsWatcherEnabledMessage()
  338. {
  339. if (PlatformIdentifier.IsWindows() || PlatformIdentifier.IsMac())
  340. return PlasticLocalization.GetString(
  341. PlasticLocalization.Name.PendingChangesFilesystemWatcherEnabled);
  342. return PlasticLocalization.GetString(
  343. PlasticLocalization.Name.PendingChangesINotifyEnabled);
  344. }
  345. static string GetFsWatcherDisabledMessage()
  346. {
  347. if (PlatformIdentifier.IsWindows() || PlatformIdentifier.IsMac())
  348. return PlasticLocalization.GetString(
  349. PlasticLocalization.Name.PendingChangesFilesystemWatcherDisabled);
  350. return PlasticLocalization.GetString(
  351. PlasticLocalization.Name.PendingChangesINotifyDisabled);
  352. }
  353. static string GetFsWatcherEnabledExplanation()
  354. {
  355. if (PlatformIdentifier.IsWindows() || PlatformIdentifier.IsMac())
  356. return PlasticLocalization.GetString(
  357. PlasticLocalization.Name.PendingChangesFilesystemWatcherEnabledExplanationUnityVCS);
  358. return PlasticLocalization.GetString(
  359. PlasticLocalization.Name.PendingChangesINotifyEnabledExplanation);
  360. }
  361. static string GetFsWatcherDisabledExplanation()
  362. {
  363. if (PlatformIdentifier.IsWindows() || PlatformIdentifier.IsMac())
  364. {
  365. return PlasticLocalization.GetString(
  366. PlasticLocalization.Name.PendingChangesFilesystemWatcherDisabledExplanationUnityVCS)
  367. .Replace("[[HELP_URL|{0}]]", "{0}");
  368. }
  369. return PlasticLocalization.GetString(
  370. PlasticLocalization.Name.PendingChangesINotifyDisabledExplanation);
  371. }
  372. static string GetHelpLink()
  373. {
  374. if (PlatformIdentifier.IsWindows() || PlatformIdentifier.IsMac())
  375. return FS_WATCHER_HELP_URL;
  376. return INOTIFY_HELP_URL;
  377. }
  378. static bool IsFileSystemWatcherEnabled(
  379. WorkspaceInfo wkInfo)
  380. {
  381. return WorkspaceWatcherFsNodeReadersCache.Get().
  382. IsWatcherEnabled(wkInfo);
  383. }
  384. static bool IsEnabled(
  385. WorkspaceStatusOptions option,
  386. WorkspaceStatusOptions options)
  387. {
  388. return (options & option) == option;
  389. }
  390. internal interface IAutoRefreshView
  391. {
  392. void DisableAutoRefresh();
  393. void EnableAutoRefresh();
  394. void ForceRefresh();
  395. }
  396. class Styles
  397. {
  398. internal static GUIContent AutomaticAdd =
  399. new GUIContent(PlasticLocalization.GetString(
  400. PlasticLocalization.Name.ProjectSettingsAutomaticAdd),
  401. PlasticLocalization.GetString(
  402. PlasticLocalization.Name.ProjectSettingsAutomaticAddExplanation));
  403. internal static GUIContent ShowCheckouts =
  404. new GUIContent(PlasticLocalization.GetString(
  405. PlasticLocalization.Name.PendingChangesShowCheckouts),
  406. PlasticLocalization.GetString(
  407. PlasticLocalization.Name.PendingChangesShowCheckoutsExplanation));
  408. internal static GUIContent AutoRefresh =
  409. new GUIContent(PlasticLocalization.GetString(
  410. PlasticLocalization.Name.PendingChangesAutoRefresh),
  411. PlasticLocalization.GetString(
  412. PlasticLocalization.Name.PendingChangesAutoRefreshExplanation));
  413. internal static GUIContent ShowChangedFiles =
  414. new GUIContent(PlasticLocalization.GetString(
  415. PlasticLocalization.Name.PendingChangesFindChanged),
  416. PlasticLocalization.GetString(
  417. PlasticLocalization.Name.PendingChangesFindChangedExplanation));
  418. internal static GUIContent CheckFileContent =
  419. new GUIContent(PlasticLocalization.GetString(
  420. PlasticLocalization.Name.PendingChangesCheckFileContent),
  421. PlasticLocalization.GetString(
  422. PlasticLocalization.Name.PendingChangesCheckFileContentExplanation));
  423. internal static GUIContent UseChangeLists =
  424. new GUIContent(PlasticLocalization.GetString(
  425. PlasticLocalization.Name.PendingChangesGroupInChangeLists),
  426. PlasticLocalization.GetString(
  427. PlasticLocalization.Name.PendingChangesGroupInChangeListsExplanation));
  428. internal static GUIContent ShowPrivateFields =
  429. new GUIContent(PlasticLocalization.GetString(
  430. PlasticLocalization.Name.PendingChangesShowPrivateFiles),
  431. PlasticLocalization.GetString(
  432. PlasticLocalization.Name.PendingChangesShowPrivateFilesExplanation));
  433. internal static GUIContent ShowIgnoredFields =
  434. new GUIContent(PlasticLocalization.GetString(
  435. PlasticLocalization.Name.PendingChangesShowIgnoredFiles),
  436. PlasticLocalization.GetString(
  437. PlasticLocalization.Name.PendingChangesShowIgnoredFilesExplanation));
  438. internal static GUIContent ShowHiddenFields =
  439. new GUIContent(PlasticLocalization.GetString(
  440. PlasticLocalization.Name.PendingChangesShowHiddenFiles),
  441. PlasticLocalization.GetString(
  442. PlasticLocalization.Name.PendingChangesShowHiddenFilesExplanation));
  443. internal static GUIContent ShowDeletedFilesDirs =
  444. new GUIContent(PlasticLocalization.GetString(
  445. PlasticLocalization.Name.PendingChangesShowDeletedFiles),
  446. PlasticLocalization.GetString(
  447. PlasticLocalization.Name.PendingChangesShowDeletedFilesExplanation));
  448. internal static GUIContent ShowMovedFiles =
  449. new GUIContent(PlasticLocalization.GetString(
  450. PlasticLocalization.Name.PendingChangesFindMovedFiles),
  451. PlasticLocalization.GetString(
  452. PlasticLocalization.Name.PendingChangesFindMovedFilesExplanation));
  453. internal static GUIContent MatchBinarySameExtension =
  454. new GUIContent(PlasticLocalization.GetString(
  455. PlasticLocalization.Name.PendingChangesMatchBinarySameExtension),
  456. PlasticLocalization.GetString(
  457. PlasticLocalization.Name.PendingChangesMatchBinarySameExtensionExplanation));
  458. internal static GUIContent MatchTextSameExtension =
  459. new GUIContent(PlasticLocalization.GetString(
  460. PlasticLocalization.Name.PendingChangesMatchTextSameExtension),
  461. PlasticLocalization.GetString(
  462. PlasticLocalization.Name.PendingChangesMatchTextSameExtensionExplanation));
  463. internal static GUIContent SimilarityPercent =
  464. new GUIContent(PlasticLocalization.GetString(
  465. PlasticLocalization.Name.PendingChangesSimilarityPercentage),
  466. PlasticLocalization.GetString(
  467. PlasticLocalization.Name.PendingChangesSimilarityPercentageExplanation));
  468. }
  469. bool mIsProjectSettingsActivated;
  470. bool mIsPluginEnabled;
  471. WorkspaceInfo mWkInfo;
  472. PendingChangesOptions mPendingChangesSavedOptions;
  473. bool mAutomaticAdd;
  474. bool mShowCheckouts;
  475. bool mAutoRefresh;
  476. bool mFSWatcherEnabled;
  477. bool mShowChangedFiles;
  478. bool mCheckFileContent;
  479. bool mUseChangeLists;
  480. bool mShowPrivateFields;
  481. bool mShowIgnoredFiles;
  482. bool mShowHiddenFiles;
  483. bool mShowDeletedFiles;
  484. bool mShowMovedFiles;
  485. bool mMatchBinarySameExtension;
  486. bool mMatchTextSameExtension;
  487. int mSimilarityPercent;
  488. const string FS_WATCHER_HELP_URL = "https://plasticscm.com/download/help/support";
  489. const string INOTIFY_HELP_URL = "https://plasticscm.com/download/help/inotify";
  490. }
  491. }