From 5fd891220ca6ef3e4ec24103ffcf91f528c7e0b0 Mon Sep 17 00:00:00 2001 From: Raymond Wu Date: Tue, 29 Jan 2019 14:44:17 -0500 Subject: [PATCH 1/5] Added srctool version 6.12.2.633 to the project. Srctool lists all files indexed within a .pdb file. It comes packaged alongside pdbstr in Debugging Tools for Windows. Source: http://tools.pirho.net/files/NetFxProblem/Tools/windbg_6.12.0002.633_x86/debugger_x86/ Official docs on srctool: https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/the-srctool-utility --- src/GitLink/GitLink.csproj | 3 +++ src/GitLink/srctool.exe | Bin 0 -> 24848 bytes src/GitLink/winsdk.redist.txt | 8 +++++++- 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 src/GitLink/srctool.exe diff --git a/src/GitLink/GitLink.csproj b/src/GitLink/GitLink.csproj index 9609148..7c09e97 100644 --- a/src/GitLink/GitLink.csproj +++ b/src/GitLink/GitLink.csproj @@ -22,6 +22,9 @@ PreserveNewest + + PreserveNewest + diff --git a/src/GitLink/srctool.exe b/src/GitLink/srctool.exe new file mode 100644 index 0000000000000000000000000000000000000000..7d23abe6015df0ee0429aafa60f1ad82ae8b8e48 GIT binary patch literal 24848 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 literal 0 HcmV?d00001 diff --git a/src/GitLink/winsdk.redist.txt b/src/GitLink/winsdk.redist.txt index ce31923..e7bb9a4 100644 --- a/src/GitLink/winsdk.redist.txt +++ b/src/GitLink/winsdk.redist.txt @@ -13,4 +13,10 @@ dbghelp.dll pdbstr.exe =================== -(1) You may redistribute pdbstr.exe version 6.12.2.633 \ No newline at end of file +(1) You may redistribute pdbstr.exe version 6.12.2.633 + +=================== +srctool.exe +=================== + +(1) You may redistribute srctool.exe version 6.12.2.633 \ No newline at end of file From aa8931ec0dc0f637b0b0c4341da1fa20b0ec42c6 Mon Sep 17 00:00:00 2001 From: Raymond Wu Date: Tue, 29 Jan 2019 14:44:34 -0500 Subject: [PATCH 2/5] #203 Added the option to index pdb files using srctool Use srctool to obtain a list of source files from the pdb and filter out files not found in git or with an invalid extension --- src/GitLink/Helpers/SrcToolHelper.cs | 67 ++++++++++++++++++++++++++++ src/GitLink/LinkOptions.cs | 2 + src/GitLink/Linker.cs | 40 +++++++++++------ 3 files changed, 96 insertions(+), 13 deletions(-) create mode 100644 src/GitLink/Helpers/SrcToolHelper.cs diff --git a/src/GitLink/Helpers/SrcToolHelper.cs b/src/GitLink/Helpers/SrcToolHelper.cs new file mode 100644 index 0000000..823ef50 --- /dev/null +++ b/src/GitLink/Helpers/SrcToolHelper.cs @@ -0,0 +1,67 @@ +// +// Copyright (c) 2014 - 2016 CatenaLogic. All rights reserved. +// + +namespace GitLink +{ + using System.Collections.Generic; + using System.Diagnostics; + using System.IO; + using Catel; + using Catel.Logging; + using GitTools.Git; + + internal static class SrcToolHelper + { + private static readonly ILog Log = LogManager.GetCurrentClassLogger(); + + internal static List GetSourceFiles(string srcToolFilePath, string projectPdbFile) + { + Argument.IsNotNullOrWhitespace(() => projectPdbFile); + List sources = new List(); + + var processStartInfo = new ProcessStartInfo(srcToolFilePath) + { + Arguments = string.Format("-r \"{0}\"", projectPdbFile), + CreateNoWindow = true, + UseShellExecute = false, + RedirectStandardOutput = true, + }; + + using (var process = new Process()) + { + process.OutputDataReceived += (s, e) => + { + if (e.Data != null) + { + var sourceFile = e.Data.ToLower(); + + if (Linker.ValidExtension(sourceFile)) + { + var repositoryDirectory = GitDirFinder.TreeWalkForGitDir(Path.GetDirectoryName(sourceFile)); + + if (repositoryDirectory != null) + { + sources.Add(sourceFile); + } + } + } + }; + + process.EnableRaisingEvents = true; + process.StartInfo = processStartInfo; + process.Start(); + process.BeginOutputReadLine(); + process.WaitForExit(); + + var processExitCode = process.ExitCode; + if (processExitCode != 0) + { + throw Log.ErrorAndCreateException("SrcTool exited with unexpected error code '{0}'", processExitCode); + } + } + + return sources; + } + } +} diff --git a/src/GitLink/LinkOptions.cs b/src/GitLink/LinkOptions.cs index 5435dab..3974ef1 100644 --- a/src/GitLink/LinkOptions.cs +++ b/src/GitLink/LinkOptions.cs @@ -26,6 +26,8 @@ public struct LinkOptions public bool IndexAllDepotFiles { get; set; } + public bool IndexWithSrcTool { get; set; } + public string IntermediateOutputPath { get; set; } } } diff --git a/src/GitLink/Linker.cs b/src/GitLink/Linker.cs index 7b451f9..1e986ae 100644 --- a/src/GitLink/Linker.cs +++ b/src/GitLink/Linker.cs @@ -30,6 +30,7 @@ public static class Linker private static readonly string FilenamePlaceholder = Uri.EscapeUriString("{filename}"); private static readonly string RevisionPlaceholder = Uri.EscapeUriString("{revision}"); private static readonly string PdbStrExePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "pdbstr.exe"); + private static readonly string SrcToolExePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "srctool.exe"); private static readonly string[] ExtensionsToIgnore = new string[] { ".g.cs" }; private static IReadOnlyList _sourceFilesList = null; @@ -81,11 +82,18 @@ public static class Linker } else { - _sourceFilesList = GetSourceFilesFromPdb(pdbPath, !options.SkipVerify); + if (options.IndexWithSrcTool) + { + _sourceFilesList = SrcToolHelper.GetSourceFiles(SrcToolExePath, pdbPath); + } + else + { + _sourceFilesList = GetSourceFilesFromPdb(pdbPath, !options.SkipVerify); + } if (!_sourceFilesList.Any()) { - Log.Error($"No source files were found in the PDB: {pdbPath}. If your PDB is native you should use the -a option."); + Log.Error($"No source files were found in the PDB: {pdbPath}. If your PDB is native you could use the -a or -t option."); return false; } @@ -282,17 +290,7 @@ private static List GetSourceFilesFromDepot(string repositoryDirectory) { sourceFiles = from file in Directory.GetFiles(repo.Info.WorkingDirectory, "*.*", SearchOption.AllDirectories) where !repo.Ignore.IsPathIgnored(file) - let ext = Path.GetExtension(file) - where string.Equals(ext, ".cs", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".cpp", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".c", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".cc", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".cxx", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".c++", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".h", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".hh", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".inl", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".hpp", StringComparison.OrdinalIgnoreCase) + where ValidExtension(file) select file; } @@ -364,5 +362,21 @@ private static string ReplaceSlashes(IProvider provider, string relativePathForU return relativePathForUrl; } + + public static Boolean ValidExtension(string sourceFile) + { + var ext = Path.GetExtension(sourceFile); + + return string.Equals(ext, ".cs", StringComparison.OrdinalIgnoreCase) + || string.Equals(ext, ".cpp", StringComparison.OrdinalIgnoreCase) + || string.Equals(ext, ".c", StringComparison.OrdinalIgnoreCase) + || string.Equals(ext, ".cc", StringComparison.OrdinalIgnoreCase) + || string.Equals(ext, ".cxx", StringComparison.OrdinalIgnoreCase) + || string.Equals(ext, ".c++", StringComparison.OrdinalIgnoreCase) + || string.Equals(ext, ".h", StringComparison.OrdinalIgnoreCase) + || string.Equals(ext, ".hh", StringComparison.OrdinalIgnoreCase) + || string.Equals(ext, ".inl", StringComparison.OrdinalIgnoreCase) + || string.Equals(ext, ".hpp", StringComparison.OrdinalIgnoreCase); + } } } From d989f7c57c4e561747e25ae09e2758248f08132e Mon Sep 17 00:00:00 2001 From: Raymond Wu Date: Wed, 30 Jan 2019 12:04:53 -0500 Subject: [PATCH 3/5] Updated the program to include the srctool option --- src/GitLink/Program.cs | 3 +++ src/GitLinkTask/LinkPdbToGitRemote.cs | 3 +++ src/GitLinkTask/build/GitLink.targets | 1 + 3 files changed, 7 insertions(+) diff --git a/src/GitLink/Program.cs b/src/GitLink/Program.cs index 2110255..d6127ea 100644 --- a/src/GitLink/Program.cs +++ b/src/GitLink/Program.cs @@ -32,6 +32,7 @@ private static int Main(string[] args) string pdbPath = null; bool skipVerify = false; bool allDepotFiles = false; + bool useSrcTool = false; LinkMethod method = LinkMethod.Http; var arguments = ArgumentSyntax.Parse(args, syntax => { @@ -41,6 +42,7 @@ private static int Main(string[] args) syntax.DefineOption("baseDir", ref baseDir, "The path to the root of the git repo."); syntax.DefineOption("s|skipVerify", ref skipVerify, "Verify all source files are available in source control."); syntax.DefineOption("a|allDepotFiles", ref allDepotFiles, "Index all source files from depot. Add this option for native PDBs (C++)."); + syntax.DefineOption("t|useSrcTool", ref useSrcTool, "Index all source files using SrcTool. This option supports .NET/native PDBs (Cannot be used with allDepotFiles)."); syntax.DefineParameter("pdb", ref pdbPath, "The PDB to add source indexing to."); if (!string.IsNullOrEmpty(pdbPath) && !File.Exists(pdbPath) && !Directory.Exists(pdbPath)) @@ -68,6 +70,7 @@ private static int Main(string[] args) SkipVerify = skipVerify, Method = method, IndexAllDepotFiles = allDepotFiles, + IndexWithSrcTool = useSrcTool, }; if (File.Exists(pdbPath)) diff --git a/src/GitLinkTask/LinkPdbToGitRemote.cs b/src/GitLinkTask/LinkPdbToGitRemote.cs index 27e8724..031de21 100644 --- a/src/GitLinkTask/LinkPdbToGitRemote.cs +++ b/src/GitLinkTask/LinkPdbToGitRemote.cs @@ -26,6 +26,8 @@ public string Method public bool IndexAllDepotFiles { get; set; } + public bool IndexWithSrcTool { get; set; } + public string GitRemoteUrl { get; set; } public string GitCommitId { get; set; } @@ -48,6 +50,7 @@ public override bool Execute() CommitId = GitCommitId, GitWorkingDirectory = GitWorkingDirectory, IndexAllDepotFiles = IndexAllDepotFiles, + IndexWithSrcTool = IndexWithSrcTool, IntermediateOutputPath = Path.GetFullPath(AddTrailingSlash(IntermediateOutputPath)), }; bool success = Linker.Link(PdbFile.GetMetadata("FullPath"), options); diff --git a/src/GitLinkTask/build/GitLink.targets b/src/GitLinkTask/build/GitLink.targets index ecadc7e..06aef42 100644 --- a/src/GitLinkTask/build/GitLink.targets +++ b/src/GitLinkTask/build/GitLink.targets @@ -14,6 +14,7 @@ Method="$(GitLinkMethod)" SkipVerify="$(GitLinkSkipVerify)" IndexAllDepotFiles="$(GitLinkIndexAllDepotFiles)" + IndexWithSrcTool="$(GitLinkIndexWithSrcTool)" GitRemoteUrl="$(GitLinkGitRemoteUrl)" GitWorkingDirectory="$(GitWorkingDirectory)" GitCommitId="$(GitCommitId)" From 5bbcd480266fff7e30971825f57e3271e38541b5 Mon Sep 17 00:00:00 2001 From: Raymond Wu Date: Thu, 7 Feb 2019 13:38:28 -0500 Subject: [PATCH 4/5] Optimize by using a HashSet to lookup valid extensions --- src/GitLink/Linker.cs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/GitLink/Linker.cs b/src/GitLink/Linker.cs index 1e986ae..166dabe 100644 --- a/src/GitLink/Linker.cs +++ b/src/GitLink/Linker.cs @@ -32,6 +32,7 @@ public static class Linker private static readonly string PdbStrExePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "pdbstr.exe"); private static readonly string SrcToolExePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "srctool.exe"); private static readonly string[] ExtensionsToIgnore = new string[] { ".g.cs" }; + private static readonly HashSet SourceExtensions = new HashSet(StringComparer.OrdinalIgnoreCase) { ".cs", ".cpp", ".c", ".cc", ".cxx", ".c++", ".h", ".hh", ".inl", ".hpp" }; private static IReadOnlyList _sourceFilesList = null; public static bool LinkDirectory(string pdbFolderPath, LinkOptions options = default(LinkOptions)) @@ -367,16 +368,7 @@ public static Boolean ValidExtension(string sourceFile) { var ext = Path.GetExtension(sourceFile); - return string.Equals(ext, ".cs", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".cpp", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".c", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".cc", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".cxx", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".c++", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".h", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".hh", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".inl", StringComparison.OrdinalIgnoreCase) - || string.Equals(ext, ".hpp", StringComparison.OrdinalIgnoreCase); + return SourceExtensions.Contains(ext); } } } From b579a6995f04a0c11e01bb41cd01c0ae1dd66ae7 Mon Sep 17 00:00:00 2001 From: Raymond Wu Date: Sat, 16 Feb 2019 15:41:48 -0500 Subject: [PATCH 5/5] Update README and contributors file --- CONTRIBUTORS | 3 ++- README.md | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index de1b252..959fda1 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -16,4 +16,5 @@ Wesley Eledui Marek Fišera Shai Nahum Amadeusz Wieczorek -Adrien JUND \ No newline at end of file +Adrien JUND +Raymond Wu \ No newline at end of file diff --git a/README.md b/README.md index 6147ad1..b760232 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,15 @@ Native PDBs (from C++ projects) are supported by using -a option: All known C++ source files from your git depot will be indexed in the PDB. +### Indexing with SrcTool + +Srctool is capable of listing the raw source file information from a .pdb file. +If you are dealing with a huge git repository and only need to index source files from a Native PDB that are found in git (And not the entire git depot) use the -t option: + + GitLink.exe -t + +.NET PDBs (C#) are also supported. + ### More options There are many more parameters you can use. Display the usage doc with the following command line: