public string[] GetRemoteFileLines(string fullFilePath)
        {
            var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(fullFilePath);

            if (workspaceInfo == null)
            {
                return(null);
            }

            using (var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(workspaceInfo.ServerUri))
            {
                if (projectCollection == null)
                {
                    return(null);
                }
                projectCollection.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
                try
                {
                    projectCollection.EnsureAuthenticated();
                }
                catch (TeamFoundationServerUnauthorizedException ex)
                {
                    TeamCodingProjectTypeProvider.Get <ITeamCodingPackageProvider>().Logger.WriteError(ex);
                    return(null);
                }

                var serverWorkspace = workspaceInfo.GetWorkspace(projectCollection);
                if (serverWorkspace == null)
                {
                    return(null);
                }
                var versionControlServer = projectCollection.GetService <VersionControlServer>();
                if (versionControlServer == null)
                {
                    return(null);
                }

                try
                {
                    if (!versionControlServer.ServerItemExists(fullFilePath, ItemType.File))
                    {
                        return(null);
                    }
                }
                catch (TeamFoundationServerUnauthorizedException ex)
                {
                    TeamCodingProjectTypeProvider.Get <ITeamCodingPackageProvider>().Logger.WriteError(ex);
                    return(null);
                }

                var serverVersion = versionControlServer.GetItem(fullFilePath);

                if (serverVersion.ItemType != ItemType.File)
                {
                    return(null);
                }

                return(serverVersion.DownloadFile().ReadAlltext().Split(new[] { "\r\n" }, StringSplitOptions.None));
            }
        }
Exemplo n.º 2
0
        private DocumentRepoMetaData.CaretInfo GetRoslynCaretInfo(SyntaxNode syntaxRoot, SnapshotPoint snapshotPoint)
        {
            var caretToken = syntaxRoot.FindToken(snapshotPoint);

            int[] memberHashCodes = null;
            IEnumerable <SyntaxNode> memberNodes = null;

            var desiredLeafNode = caretToken.Parent.AncestorsAndSelf().FirstOrDefault(n => n.IsUniquelyIdentifiedNode());

            switch (caretToken.Language)
            {
            case "C#":
            case "Visual Basic":
                memberNodes     = caretToken.Parent.AncestorsAndSelf().Reverse().TakeWhileInclusive(n => n != desiredLeafNode).ToArray();
                memberHashCodes = memberNodes.Select(n => n.GetValueBasedHashCode()).ToArray();
                break;

            default:
                TeamCodingProjectTypeProvider.Get <ITeamCodingPackageProvider>().Logger.WriteInformation($"Document with unsupported language found: {caretToken.Language}"); return(null);
            }

            var lastNode = memberNodes.Last();

            var caretLine    = snapshotPoint.GetContainingLine();
            var lastNodeLine = snapshotPoint.Snapshot.GetLineFromPosition(lastNode.Span.Start);

            int leafMemberLineOffset = caretLine.LineNumber - lastNodeLine.LineNumber;

            return(new DocumentRepoMetaData.CaretInfo()
            {
                SyntaxNodeIds = memberHashCodes,
                LeafMemberLineOffset = leafMemberLineOffset,
                LeafMemberCaretOffset = snapshotPoint.Position - caretLine.Start
            });
        }
        public DocumentRepoMetaData GetRepoDocInfo(string fullFilePath)
        {
            var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(fullFilePath);

            if (workspaceInfo == null)
            {
                return(null);
            }

            using (var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(workspaceInfo.ServerUri))
            {
                if (projectCollection == null)
                {
                    return(null);
                }
                projectCollection.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
                try
                {
                    projectCollection.EnsureAuthenticated();
                }
                catch (TeamFoundationServerUnauthorizedException ex)
                {
                    TeamCodingProjectTypeProvider.Get <ITeamCodingPackageProvider>().Logger.WriteError(ex);
                    return(null);
                }

                var serverWorkspace = workspaceInfo.GetWorkspace(projectCollection);
                if (serverWorkspace == null)
                {
                    return(null);
                }
                var versionControlServer = projectCollection.GetService <VersionControlServer>();
                if (versionControlServer == null)
                {
                    return(null);
                }

                try
                {
                    if (!versionControlServer.ServerItemExists(fullFilePath, ItemType.File))
                    {
                        return(null);
                    }
                }
                catch (TeamFoundationServerUnauthorizedException ex)
                {
                    TeamCodingProjectTypeProvider.Get <ITeamCodingPackageProvider>().Logger.WriteError(ex);
                    return(null);
                }

                var serverItem = serverWorkspace.GetServerItemForLocalItem(fullFilePath);

                var branch = versionControlServer.QueryBranchObjects(new ItemIdentifier(serverItem), RecursionType.None).FirstOrDefault()?.Properties?.RootItem?.Item;
                return(new DocumentRepoMetaData()
                {
                    RepoProvider = nameof(TeamFoundationServiceRepository),
                    RelativePath = serverItem,
                    LastActioned = DateTime.UtcNow,
                    RepoUrl = workspaceInfo.ServerUri.ToString(),
                    RepoBranch = branch,
                    BeingEdited = serverWorkspace.GetPendingChanges(fullFilePath).Any()
                });
            }
        }