コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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();
        }
コード例 #3
0
ファイル: GitFileWatcher.cs プロジェクト: Amitkapadi/UniGit
        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);
                    }
                }
            }
        }
コード例 #4
0
        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);
        }