예제 #1
0
        public override SourceControlFileInfo.eRepositoryItemStatus GetFileStatus(string Path, bool ShowIndicationkForLockedItems, ref string error)
        {
            try
            {
                Console.WriteLine("GITHub - GetFileStatus");
                Path = System.IO.Path.GetFullPath(Path);
                int    RepositoryFolderCount = RepositoryRootFolder.Count();
                string localFilePath         = string.Empty;
                if (Path.Count() > (RepositoryFolderCount))
                {
                    localFilePath = Path.Substring(RepositoryFolderCount);
                }

                if (localFilePath.StartsWith("\\"))
                {
                    localFilePath = localFilePath.Substring(1);
                }

                using (var repo = new LibGit2Sharp.Repository(RepositoryRootFolder))
                {
                    if (Path == SolutionFolder && repo.RetrieveStatus().Count() != 0)
                    {
                        return(SourceControlFileInfo.eRepositoryItemStatus.Modified);
                    }

                    foreach (var item in repo.RetrieveStatus())
                    {
                        if (NormalizePath(item.FilePath).StartsWith(NormalizePath(localFilePath)) && item.State != FileStatus.NewInWorkdir)
                        {
                            return(SourceControlFileInfo.eRepositoryItemStatus.Modified);
                        }

                        if (NormalizePath(localFilePath) == NormalizePath(item.FilePath))
                        {
                            return(GetItemStatus(item.State));
                        }
                        else if (NormalizePath(item.FilePath).Contains(NormalizePath(localFilePath)) && !localFilePath.EndsWith(".xml"))
                        {
                            return(GetItemStatus(item.State));
                        }
                    }
                }
                return(SourceControlFileInfo.eRepositoryItemStatus.Equel);
            }
            catch (Exception ex)
            {
                error = ex.Message + Environment.NewLine + ex.InnerException;
                return(SourceControlFileInfo.eRepositoryItemStatus.Unknown);
            }
        }
예제 #2
0
        public override ObservableList <SourceControlFileInfo> GetPathFilesStatus(string Path, ref string error, bool includLockedFiles = false)
        {
            Console.WriteLine("GITHub - GetPathFilesStatus");
            ObservableList <SourceControlFileInfo> list = new ObservableList <SourceControlFileInfo>();

            try
            {
                string relativePath = System.IO.Path.GetFullPath(Path);
                relativePath = relativePath.Substring(RepositoryRootFolder.Count());

                if (relativePath.StartsWith(@"\"))
                {
                    relativePath = relativePath.Substring(1);
                }

                using (var repo = new LibGit2Sharp.Repository(RepositoryRootFolder))
                {
                    foreach (var item in repo.RetrieveStatus())
                    {
                        if (WorkSpace.Instance.SolutionRepository.IsSolutionPathToAvoid(System.IO.Path.Combine(RepositoryRootFolder, item.FilePath)))
                        {
                            continue;
                        }

                        if (System.IO.Path.GetExtension(item.FilePath) == ".ldb" || System.IO.Path.GetExtension(item.FilePath) == ".ignore")
                        {
                            continue;
                        }


                        //sometimes remote file path uses / otherwise \  our code should be path independent
                        if (relativePath == string.Empty || System.IO.Path.GetFullPath(System.IO.Path.Combine(RepositoryRootFolder, item.FilePath)).StartsWith(System.IO.Path.GetFullPath(Path)))
                        {
                            SourceControlFileInfo SCFI = new SourceControlFileInfo();
                            SCFI.Path         = RepositoryRootFolder + @"\" + item.FilePath;
                            SCFI.SolutionPath = @"~\" + item.FilePath;
                            SCFI.Status       = SourceControlFileInfo.eRepositoryItemStatus.Unknown;
                            SCFI.Selected     = true;
                            SCFI.Diff         = "";
                            if (item.State == FileStatus.ModifiedInWorkdir)
                            {
                                SCFI.Status = SourceControlFileInfo.eRepositoryItemStatus.Modified;
                            }
                            if (item.State == FileStatus.ModifiedInIndex)
                            {
                                SCFI.Status = SourceControlFileInfo.eRepositoryItemStatus.ModifiedAndResolved;
                            }
                            if (item.State == FileStatus.NewInWorkdir)
                            {
                                SCFI.Status = SourceControlFileInfo.eRepositoryItemStatus.New;
                            }
                            if (item.State == FileStatus.DeletedFromWorkdir)
                            {
                                SCFI.Status = SourceControlFileInfo.eRepositoryItemStatus.Deleted;
                            }


                            if (SCFI.Status != SourceControlFileInfo.eRepositoryItemStatus.Unknown)
                            {
                                list.Add(SCFI);
                            }
                        }
                    }
                }
                return(list);
            }
            catch (Exception ex)
            {
                error = ex.Message + Environment.NewLine + ex.InnerException;
                return(list);
            }
        }
예제 #3
0
        public override ObservableList <SourceControlFileInfo> GetPathFilesStatus(string Path, ref string error, List <string> PathsToIgnore = null, bool includLockedFiles = false)
        {
            Console.WriteLine("GITHub - GetPathFilesStatus");
            ObservableList <SourceControlFileInfo> list = new ObservableList <SourceControlFileInfo>();

            try
            {
                string relativePath = System.IO.Path.GetFullPath(Path);
                relativePath = relativePath.Substring(RepositoryRootFolder.Count());

                if (relativePath.StartsWith(@"\"))
                {
                    relativePath = relativePath.Substring(1);
                }

                using (var repo = new LibGit2Sharp.Repository(RepositoryRootFolder))
                {
                    foreach (var item in repo.RetrieveStatus())
                    {
                        if (PathsToIgnore != null)
                        {
                            bool pathToIgnoreFound = false;
                            foreach (string pathToIgnore in PathsToIgnore)
                            {
                                if (System.IO.Path.GetFullPath(RepositoryRootFolder + @"\" + item.FilePath).Contains(System.IO.Path.GetFullPath(pathToIgnore)) ||
                                    item.FilePath.Contains(pathToIgnore))
                                {
                                    pathToIgnoreFound = true;
                                    break;
                                }
                            }
                            if (pathToIgnoreFound)
                            {
                                continue;
                            }
                        }

                        if (System.IO.Path.GetExtension(item.FilePath) == ".ldb" || System.IO.Path.GetExtension(item.FilePath) == ".ignore")
                        {
                            continue;
                        }


                        if (relativePath == string.Empty || item.FilePath.StartsWith(relativePath))
                        {
                            SourceControlFileInfo SCFI = new SourceControlFileInfo();
                            SCFI.Path         = RepositoryRootFolder + @"\" + item.FilePath;
                            SCFI.SolutionPath = @"~\" + item.FilePath;
                            SCFI.Status       = SourceControlFileInfo.eRepositoryItemStatus.Unknown;
                            SCFI.Selected     = true;
                            SCFI.Diff         = "";
                            if (item.State == FileStatus.ModifiedInWorkdir)
                            {
                                SCFI.Status = SourceControlFileInfo.eRepositoryItemStatus.Modified;
                            }
                            if (item.State == FileStatus.ModifiedInIndex)
                            {
                                SCFI.Status = SourceControlFileInfo.eRepositoryItemStatus.ModifiedAndResolved;
                            }
                            if (item.State == FileStatus.NewInWorkdir)
                            {
                                SCFI.Status = SourceControlFileInfo.eRepositoryItemStatus.New;
                            }
                            if (item.State == FileStatus.DeletedFromWorkdir)
                            {
                                SCFI.Status = SourceControlFileInfo.eRepositoryItemStatus.Deleted;
                            }


                            if (SCFI.Status != SourceControlFileInfo.eRepositoryItemStatus.Unknown)
                            {
                                list.Add(SCFI);
                            }
                        }
                    }
                }
                return(list);
            }
            catch (Exception ex)
            {
                error = ex.Message + Environment.NewLine + ex.InnerException;
                return(list);
            }
        }