public static List <GitCommits> ParseLogs(string log) { GitCommits commit = null; List <GitCommits> commits = new List <GitCommits>();; using (var reader = new StringReader(log)) { do { var line = reader.ReadLine(); if (line.StartsWith("commit ")) { if (commit != null) { commits.Add(commit); } commit = new GitCommits(); commit.CommitHash = line.Split(' ')[1]; } if (line.StartsWith("Author:")) { commit.Author = line.Split(' ')[1] + " " + line.Split(' ')[2]; } if (line.StartsWith("Date:")) { string gitDate = line.After("Date: "); commit.Date = FormateGitDate(gitDate); } if (line.Length > 0 && line[3] == ' ') { commit.Message = line.After(" "); } if (line.Length > 1 && Char.IsLetter(line[0]) && line[1] == '\t') { var status = line.Split('\t')[0]; var file = line.Split('\t')[1]; commit.Files.Add(new FileStatus() { Status = status, FileName = file }); } } while (reader.Peek() != -1); } return(commits); }
public void GetCommitsForInputDocument() { // Given string inputFolder = Path.GetDirectoryName( Path.GetDirectoryName( Path.GetDirectoryName( Path.GetDirectoryName(TestContext.CurrentContext.TestDirectory) ) ) ); IExecutionContext context = Substitute.For <IExecutionContext>(); context.InputFolder.Returns(inputFolder); context.GetDocument(Arg.Any <IEnumerable <KeyValuePair <string, object> > >()).Returns(getNewDocumentCallInfo => { IDocument newDocument = Substitute.For <IDocument>(); newDocument.GetEnumerator() .Returns(getNewDocumentCallInfo.ArgAt <IEnumerable <KeyValuePair <string, object> > >(0).GetEnumerator()); newDocument.Get <IReadOnlyDictionary <string, string> >(Arg.Any <string>()) .Returns(getCallInfo => (IReadOnlyDictionary <string, string>)getNewDocumentCallInfo.ArgAt <IEnumerable <KeyValuePair <string, object> > >(0).First(x => x.Key == getCallInfo.ArgAt <string>(0)).Value); return(newDocument); }); IDocument document = Substitute.For <IDocument>(); document.Source.Returns(Path.Combine(inputFolder, "Wyam.Core\\IModule.cs")); // Use file that no longer exists so commit count is stable context.GetDocument(Arg.Any <IDocument>(), Arg.Any <IEnumerable <KeyValuePair <string, object> > >()).Returns(x => { IDocument newDocument = Substitute.For <IDocument>(); newDocument.GetEnumerator().Returns(x.ArgAt <IEnumerable <KeyValuePair <string, object> > >(1).GetEnumerator()); return(newDocument); }); GitCommits gitCommits = new GitCommits().ForEachInputDocument(); // When List <IDocument> results = gitCommits.Execute(new[] { document }, context).ToList(); // Make sure to materialize the result list // Then Assert.AreEqual(1, results.Count); List <IDocument> commits = ((IEnumerable <IDocument>)results[0].First(x => x.Key == GitKeys.Commits).Value).ToList(); Assert.AreEqual(6, commits.Count); Assert.AreEqual("6274fb76a0380760ab2dc83f90748b7d953aceb4", commits.Last().First(x => x.Key == GitKeys.Sha).Value); }
public void GetCommitsForInputDocument() { // Given string inputFolder = Path.GetDirectoryName( Path.GetDirectoryName( Path.GetDirectoryName( Path.GetDirectoryName(TestContext.CurrentContext.TestDirectory) ) ) ); IExecutionContext context = Substitute.For<IExecutionContext>(); context.InputFolder.Returns(inputFolder); context.GetNewDocument(Arg.Any<IEnumerable<MetadataItem>>()).Returns(getNewDocumentCallInfo => { IDocument newDocument = Substitute.For<IDocument>(); newDocument.GetEnumerator() .Returns(getNewDocumentCallInfo.ArgAt<IEnumerable<MetadataItem>>(0).Select(x => (KeyValuePair<string, object>)x).GetEnumerator()); newDocument.Get<IReadOnlyDictionary<string, string>>(Arg.Any<string>()) .Returns(getCallInfo => (IReadOnlyDictionary<string, string>)getNewDocumentCallInfo.ArgAt<IEnumerable<MetadataItem>>(0).First(x => x.Key == getCallInfo.ArgAt<string>(0)).Value); return newDocument; }); IDocument document = Substitute.For<IDocument>(); document.Source.Returns(Path.Combine(inputFolder, "Wyam.Core\\IModule.cs")); // Use file that no longer exists so commit count is stable document.Clone(Arg.Any<IEnumerable<MetadataItem>>()).Returns(x => { IDocument newDocument = Substitute.For<IDocument>(); newDocument.GetEnumerator().Returns(x.ArgAt<IEnumerable<MetadataItem>>(0).Select(y => (KeyValuePair<string, object>)y).GetEnumerator()); return newDocument; }); GitCommits gitCommits = new GitCommits().ForEachInputDocument(); // When List<IDocument> results = gitCommits.Execute(new[] { document }, context).ToList(); // Make sure to materialize the result list // Then Assert.AreEqual(1, results.Count); List<IDocument> commits = ((IEnumerable<IDocument>) results[0].First(x => x.Key == GitKeys.Commits).Value).ToList(); Assert.AreEqual(6, commits.Count); Assert.AreEqual("6274fb76a0380760ab2dc83f90748b7d953aceb4", commits.Last().First(x => x.Key == GitKeys.Sha).Value); }
public void Execute() { var task = new GitCommits(); task.BuildEngine = new MockBuild(); task.ToolPath = @"C:\Program Files (x86)\Git\bin"; string prjRootPath = TaskUtility.GetProjectRootDirectory(true); task.LocalPath = Path.Combine(prjRootPath, @"Source"); bool result = task.Execute(); int commits; int.TryParse(task.CommitsCount, out commits); Assert.IsTrue(result, "Execute Failed"); Assert.IsFalse(commits == 0, "Invalid CommitsCount"); }
public void GetAllCommitsFromInputPath() { // Given IExecutionContext context = Substitute.For<IExecutionContext>(); context.InputFolder.Returns(TestContext.CurrentContext.TestDirectory); context.GetNewDocument(Arg.Any<IEnumerable<MetadataItem>>()).Returns(getNewDocumentCallInfo => { IDocument newDocument = Substitute.For<IDocument>(); newDocument.GetEnumerator() .Returns(getNewDocumentCallInfo.ArgAt<IEnumerable<MetadataItem>>(0).Select(x => (KeyValuePair<string, object>)x).GetEnumerator()); return newDocument; }); IDocument document = Substitute.For<IDocument>(); GitCommits gitCommits = new GitCommits(); // When List<IDocument> results = gitCommits.Execute(new[] { document }, context).ToList(); // Make sure to materialize the result list // Then Assert.That(results.Count, Is.GreaterThan(400)); Assert.AreEqual("cbd6fb2b7e7fc6e0bbe19744433a510cef93bd7f", results.Last().First(x => x.Key == GitKeys.Sha).Value); }
public void GetAllCommitsFromInputPath() { // Given IExecutionContext context = Substitute.For <IExecutionContext>(); context.InputFolder.Returns(Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(Environment.CurrentDirectory)))); // Ascend from \bin\Debug context.GetNewDocument(Arg.Any <IEnumerable <MetadataItem> >()).Returns(getNewDocumentCallInfo => { IDocument newDocument = Substitute.For <IDocument>(); newDocument.GetEnumerator() .Returns(getNewDocumentCallInfo.ArgAt <IEnumerable <MetadataItem> >(0).Select(x => (KeyValuePair <string, object>)x).GetEnumerator()); return(newDocument); }); IDocument document = Substitute.For <IDocument>(); GitCommits gitCommits = new GitCommits(); // When List <IDocument> results = gitCommits.Execute(new[] { document }, context).ToList(); // Make sure to materialize the result list // Then Assert.That(results.Count, Is.GreaterThan(400)); Assert.AreEqual("cbd6fb2b7e7fc6e0bbe19744433a510cef93bd7f", results.Last().First(x => x.Key == GitKeys.Sha).Value); }
public void GetAllCommitsFromInputPath() { // Given IExecutionContext context = Substitute.For <IExecutionContext>(); context.FileSystem.RootPath.Returns(new DirectoryPath("/")); context.FileSystem.InputPaths.Returns(x => new [] { new DirectoryPath(TestContext.CurrentContext.TestDirectory) }); context.GetDocument(Arg.Any <IEnumerable <KeyValuePair <string, object> > >()).Returns(getNewDocumentCallInfo => { IDocument newDocument = Substitute.For <IDocument>(); newDocument.GetEnumerator() .Returns(getNewDocumentCallInfo.ArgAt <IEnumerable <KeyValuePair <string, object> > >(0).GetEnumerator()); return(newDocument); }); IDocument document = Substitute.For <IDocument>(); GitCommits gitCommits = new GitCommits(); // When List <IDocument> results = gitCommits.Execute(new[] { document }, context).ToList(); // Make sure to materialize the result list // Then Assert.That(results.Count, Is.GreaterThan(400)); Assert.AreEqual("cbd6fb2b7e7fc6e0bbe19744433a510cef93bd7f", results.Last().First(x => x.Key == GitKeys.Sha).Value); }
public void GetCommitsForInputDocument() { // Given DirectoryPath inputPath = new DirectoryPath(TestContext.CurrentContext.TestDirectory).Parent.Parent.Parent.Parent; IExecutionContext context = Substitute.For<IExecutionContext>(); context.FileSystem.RootPath.Returns(new DirectoryPath("/")); context.FileSystem.InputPaths.Returns(x => new[] { inputPath }); context.GetDocument(Arg.Any<IEnumerable<KeyValuePair<string, object>>>()).Returns(getNewDocumentCallInfo => { IDocument newDocument = Substitute.For<IDocument>(); newDocument.GetEnumerator() .Returns(getNewDocumentCallInfo.ArgAt<IEnumerable<KeyValuePair<string, object>>>(0).GetEnumerator()); newDocument.Get<IReadOnlyDictionary<FilePath, string>>(Arg.Any<string>()) .Returns(getCallInfo => (IReadOnlyDictionary<FilePath, string>)getNewDocumentCallInfo.ArgAt<IEnumerable<KeyValuePair<string, object>>>(0).First(x => x.Key == getCallInfo.ArgAt<string>(0)).Value); return newDocument; }); IDocument document = Substitute.For<IDocument>(); document.Source.Returns(inputPath.CombineFile("Wyam.Core/IModule.cs")); // Use file that no longer exists so commit count is stable context.GetDocument(Arg.Any<IDocument>(), Arg.Any<IEnumerable<KeyValuePair<string, object>>>()).Returns(x => { IDocument newDocument = Substitute.For<IDocument>(); newDocument.GetEnumerator().Returns(x.ArgAt<IEnumerable<KeyValuePair<string, object>>>(1).GetEnumerator()); return newDocument; }); GitCommits gitCommits = new GitCommits().ForEachInputDocument(); // When List<IDocument> results = gitCommits.Execute(new[] { document }, context).ToList(); // Make sure to materialize the result list // Then Assert.AreEqual(1, results.Count); List<IDocument> commits = ((IEnumerable<IDocument>) results[0].First(x => x.Key == GitKeys.Commits).Value).ToList(); Assert.AreEqual(6, commits.Count); Assert.AreEqual("6274fb76a0380760ab2dc83f90748b7d953aceb4", commits.Last().First(x => x.Key == GitKeys.Sha).Value); }
public MatrixController() { this._gitCommits = GitCommits.Instance(); }