public GitLfsManager(GitManager gitManager, GitCallbacks gitCallbacks, ILogger logger, GitSettingsJson gitSettings) { this.gitManager = gitManager; this.gitCallbacks = gitCallbacks; this.logger = logger; this.gitSettings = gitSettings; gitCallbacks.UpdateRepository += OnUpdateRepository; gitManager.AddSettingsAffector(this); try { version = GitHelper.RunExeOutput(gitManager.GetCurrentRepoPath(), "git-lfs", "version", null); isInstalled = true; } catch (Exception) { isInstalled = false; return; } UpdateInitilized(); if (Initilized) { RegisterFilter(); Update(); } }
public void Update() { RegisterFilter(); if (File.Exists(UniGitPathHelper.Combine(gitManager.GetCurrentRepoPath(), ".gitattributes"))) { using (TextReader file = File.OpenText(UniGitPathHelper.Combine(gitManager.GetCurrentRepoPath(), ".gitattributes"))) { trackedInfo = file.ReadToEnd().Split(UniGitPathHelper.NewLineChar).Select(GitLfsTrackedInfo.Parse).Where(l => l != null).ToArray(); } } UpdateInitilized(); }
private void CreateWatchers() { string rootedPath = gitManager.GetCurrentRepoPath(); string projectPath = rootedPath.Replace(paths.ProjectPath, ""); if (!UniGitPathHelper.IsPathInAssetFolder(projectPath)) { var mainFileWatcher = new FileSystemWatcher(rootedPath) { InternalBufferSize = 4, EnableRaisingEvents = gitSettings.TrackSystemFiles, IncludeSubdirectories = false, NotifyFilter = NotifyFilters.FileName }; fileWatchers.Add(mainFileWatcher); Subscribe(mainFileWatcher); var repoDirectoryInfo = new DirectoryInfo(rootedPath); foreach (var directory in repoDirectoryInfo.GetDirectories()) { if (!gitManager.Repository.Ignore.IsPathIgnored(directory.FullName) && ShouldTrackDirectory(directory)) { var fileWatcher = new FileSystemWatcher(directory.FullName) { InternalBufferSize = 4, EnableRaisingEvents = gitSettings.TrackSystemFiles, IncludeSubdirectories = true, NotifyFilter = NotifyFilters.FileName }; fileWatchers.Add(fileWatcher); Subscribe(fileWatcher); } } } }
public int Compare(StatusListEntry x, StatusListEntry y) { int stateCompare = window.IsGrouping() ? GetPriority(x.State).CompareTo(GetPriority(y.State)) : 0; if (stateCompare == 0) { var settings = window.GitDiffSettings; if (settings.sortDir == GitDiffWindow.SortDir.Descending) { var oldLeft = x; x = y; y = oldLeft; } if (settings.unstagedChangesPriority) { bool canStageX = GitManager.CanStage(x.State); bool canUnstageX = GitManager.CanUnstage(x.State); bool canStageY = GitManager.CanStage(y.State); bool canUnstageY = GitManager.CanUnstage(y.State); //prioritize upsaged changes that are pending if ((canStageX && canUnstageX) && !(canStageY && canUnstageY)) { return(-1); } if (!(canStageX && canUnstageX) && (canStageY && canUnstageY)) { return(1); } } switch (settings.sortType) { case GitDiffWindow.SortType.Name: stateCompare = string.Compare(x.Name, y.Name, StringComparison.InvariantCultureIgnoreCase); break; case GitDiffWindow.SortType.Path: stateCompare = string.Compare(x.LocalPath, y.LocalPath, StringComparison.InvariantCultureIgnoreCase); break; case GitDiffWindow.SortType.ModificationDate: //todo cache modification dates DateTime modifedTimeLeft = GetClosest(gitManager.GetPathWithMeta(x.LocalPath).Select(p => File.GetLastWriteTime(UniGitPathHelper.Combine(gitManager.GetCurrentRepoPath(), p)))); DateTime modifedRightTime = GetClosest(gitManager.GetPathWithMeta(x.LocalPath).Select(p => File.GetLastWriteTime(UniGitPathHelper.Combine(gitManager.GetCurrentRepoPath(), p)))); stateCompare = DateTime.Compare(modifedRightTime, modifedTimeLeft); break; case GitDiffWindow.SortType.CreationDate: //todo cache creation dates DateTime createdTimeLeft = GetClosest(gitManager.GetPathWithMeta(x.LocalPath).Select(p => File.GetCreationTime(UniGitPathHelper.Combine(gitManager.GetCurrentRepoPath(), p)))); DateTime createdRightTime = GetClosest(gitManager.GetPathWithMeta(y.LocalPath).Select(p => File.GetCreationTime(UniGitPathHelper.Combine(gitManager.GetCurrentRepoPath(), p)))); stateCompare = DateTime.Compare(createdRightTime, createdTimeLeft); break; default: throw new ArgumentOutOfRangeException(); } } if (stateCompare == 0) { stateCompare = String.Compare(x.LocalPath, y.LocalPath, StringComparison.Ordinal); } return(stateCompare); }