public void GetLocalVersionCommandLine()
        {
            var provider = new VaultVersionControlProvider(@"C:\Program Files\SourceGear\Vault Client\vault.exe");

            var args = new VersionControlArguments
            {
                Credentials = new NetworkCredential("Username", "Password"),
                Operation = VersionControlOperation.GetLocalVersion,
                Project = "ProjectName",
                Provider = "Vault",
                Server = "Server:Port",
                SourcePath = "SourcePath\\FileName.ext"
            };

            var result = provider.BuildCommandLineArguments(args);

            Assert.AreEqual("listfolder -host \"Server:Port\" -user \"Username\" -password \"Password\" -repository \"ProjectName\" \"$SourcePath\"", result);
        }
        public void GetSourceIndexForFile()
        {
            var provider = new VaultVersionControlProvider("%VCS_EXECUTABLE%");

            var args = new VersionControlArguments
            {
                Credentials = new NetworkCredential("Username", "Password"),
                DestinationPath = @"D:\Source\",
                Project = "ProjectName",
                Provider = "Vault",
                Server = "Server:Port",
                SourcePath = "$/ProjectName/SourcePath",
                Label = "My Label"
            };
            var indexer = new SourceIndexer(provider, args);

            Assert.AreEqual(@"D:\Source\ProjectName\SourcePath\File.ext*/ProjectName/SourcePath*My Label", indexer.GetVersionIndexForFile(@"d:\Source\ProjectName\SourcePath\File.ext"), ignoreCase: true);
            Assert.AreEqual(@"D:\Source\ProjectName\SourcePath\File.ext*/ProjectName/SourcePath*My Label", indexer.GetVersionIndexForFile(@"D:\Source\ProjectName\SourcePath\File.ext"), ignoreCase: true);
        }
        public void GetVersionCommandForFile()
        {
            var provider = new VaultVersionControlProvider("%VCS_EXECUTABLE%");

            var args = new VersionControlArguments
            {
                Credentials = new NetworkCredential("Username", "Password"),
                DestinationPath = @"D:\Source",
                Project = "ProjectName",
                Provider = "Vault",
                Server = "Server:Port",
                SourcePath = "$/SourcePath",
                Label = "My Label"
            };
            var indexer = new SourceIndexer(provider, args);

            var command = indexer.GetVersionCommand();

            Assert.AreEqual("\"%VCS_EXECUTABLE%\" getlabel -host \"%VCS_SERVER%\" -user \"%VCS_USERNAME%\" -password \"%VCS_PASSWORD%\" -repository \"%VCS_PROJECT%\" -destpath \"%TARG%\\%VAR3%%fnbksl%(%VAR2%)\" \"$%VAR2%/%fnfile%(%VAR1%)\" \"%VAR3%\"", command, ignoreCase: true);
        }
        public void BuildCommandLineArguments_for_get_specific_version()
        {
            var provider = new VaultVersionControlProvider(@"C:\Program Files\SourceGear\Vault Client\vault.exe");

            var args = new VersionControlArguments
            {
                Credentials = new NetworkCredential("Username", "Password"),
                DestinationPath = "DestinationPath",
                Operation = VersionControlOperation.Get,
                Project = "ProjectName",
                Provider = "Vault",
                Server = "Server:Port",
                SourcePath = "SourcePath",
                Version = "50"
            };

            var result = provider.BuildCommandLineArguments(args);

            Assert.AreEqual("getversion -host \"Server:Port\" -user \"Username\" -password \"Password\" -repository \"ProjectName\" 50 \"$SourcePath\" \"DestinationPath\"", result);
        }
        public void GetLocalVersion()
        {
            var provider = new VaultVersionControlProvider(@"C:\Program Files\SourceGear\Vault Client\vault.exe");

            var args = new VersionControlArguments
            {
                Credentials = new NetworkCredential("Username", "Password"),
                Operation = VersionControlOperation.GetLocalVersion,
                Project = "ProjectName",
                Provider = "Vault",
                Server = "Server:Port",
                SourcePath = "SourcePath\\UnchangedFile.cs"
            };

            var process = new Mock<IProcessResult>();
            process.Setup(process1 => process1.StandardOutput).Returns(VaultTestResponses.ListFolderResponse);

            var result = provider.ParseResult(args, process.Object);

            Assert.AreEqual(ServiceResultCode.Success, result.ResultCode);
            Assert.AreEqual(6, result.ResultValue);
        }
        /// <summary>
        /// When overridden in a derived class, executes the task.
        /// </summary>
        /// <returns>
        /// <c>true</c> if the task successfully executed; otherwise, <c>false</c>.
        /// </returns>
        public override bool Execute()
        {
            // Get the version control arguments, which are in the form of a URI
            var uri = new Uri(VersionControlArguments);

            if( Symbols == null )
            {
                Log.LogWarning("No symbol files passed to index");
                return true;
            }

            var vaultExecutable = VcsExecutablePath;

            var args = VersionControlArgumentsConverter.FromUri(uri);

            foreach (var item in Symbols)
            {
                var path = item.GetMetadata("FullPath");

                Log.LogMessage("Indexing source in file: {0}", path);

                var srcTool = new SrcTool(path);

                // Obtain a list of source files to index
                var files = srcTool.GetSourceFiles();
                files.ForEach( file => Log.LogMessage(MessageImportance.Low, "Source file: {0}", file) );

                // We'll write the SrcSrv stream to a temporary file, and that
                // will be passed to write to the debug symbols.
                var sb = new StringBuilder();

                var provider = new VaultVersionControlProvider(vaultExecutable);

                var indexer = new SourceIndexer(provider, args);

                sb.Append(indexer.GetIniBlock());
                sb.Append(indexer.GetVariableBlock());

                sb.AppendLine("SRCSRV: source files ---------------------------------------");

                var indexedFiles = files.Select(indexer.GetVersionIndexForFile).Where(line => !line.IsNullOrEmpty());

                // If we didn't manage to index any files, then move on to the next file
                if( indexedFiles.Count() == 0)
                {
                    Log.LogMessage("No files found to map against version control");
                    continue;
                }

                // Write out any successfully indexed files
                foreach (var line in indexedFiles )
                {
                    sb.AppendLine(line);
                }

                // Done indexing source
                sb.AppendLine("SRCSRV: end ------------------------------------------------");

                var lines = sb.ToString().Trim();

                Log.LogMessage(MessageImportance.Low, lines);

                // Write the stream to a temp file, which we can pass
                // to PdbStr);
                using (var temp = new TempFile())
                {
                    temp.WriteAllText(lines);

                    // Write the stream to the debug symbols
                    using (var pdbStr = new PdbStr())
                    {
                        pdbStr.PdbFileName = path;
                        pdbStr.StreamFileName = temp.FileInfo.FullName;
                        pdbStr.StreamName = "srcsrv";
                        pdbStr.Operation = PdbStrOperation.Write;

                        if(!pdbStr.Start()) throw new FoundationException("Couldn't start PdbStr: {0}", pdbStr.StartInfo.FileName);

                        var result = new ProcessResult(pdbStr);

                        pdbStr.WaitForExit();

                        var output = result.StandardOutput;

                        if (output.ContainsCaseInsensitive("error"))
                        {
                            Log.LogError(output);
                        }
                        else
                        {
                            Log.LogMessage(output);
                        }

                    }
                }

            }

            return true;
        }
        public void Get_for_label()
        {
            var provider = new VaultVersionControlProvider(@"C:\Program Files\SourceGear\Vault Client\vault.exe");

            var args = new VersionControlArguments
            {
                Credentials = new NetworkCredential("Username", "Password"),
                DestinationPath = @"C:\DestinationPath\",
                Operation = VersionControlOperation.Get,
                Project = "ProjectName",
                Provider = "Vault",
                Server = "Server:Port",
                SourcePath = "/SourcePath/FileName.ext",
                Label = "My Label"
            };

            var result = provider.BuildCommandLineArguments(args);

            Assert.AreEqual("getlabel -host \"Server:Port\" -user \"Username\" -password \"Password\" -repository \"ProjectName\" -destpath \"C:\\DestinationPath\" \"$SourcePath/FileName.ext\" \"My Label\"", result);
        }
        public void MapVersionControlSourcePath()
        {
            var provider = new VaultVersionControlProvider(@"C:\Program Files\SourceGear\Vault Client\vault.exe");

            var args = new VersionControlArguments
            {
                Credentials = new NetworkCredential("Username", "Password"),
                DestinationPath = "C:\\WorkingFolder",
                Operation = VersionControlOperation.Get,
                Project = "ProjectName",
                Provider = "Vault",
                Server = "Server:Port",
                SourcePath = "SourcePath\\FileName.ext",
                Label = "My Label"
            };

            Assert.IsNull(provider.MapVersionControlSourcePath("D:\\WorkingFolder", args));
            Assert.AreEqual("/Folder", provider.MapVersionControlSourcePath(@"C:\WorkingFolder\Folder\File.ext", args));
            Assert.AreEqual("/Folder", provider.MapVersionControlSourcePath(@"C:\workingFolder/Folder\File.ext", args));
        }