예제 #1
0
        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);
        }
예제 #2
0
            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);
            }
예제 #3
0
        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");
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
0
            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);
            }
예제 #8
0
            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();
 }