Skip to content

Instantly share code, notes, and snippets.

View vgaltes's full-sized avatar

Vicenç García Altés vgaltes

View GitHub Profile
@vgaltes
vgaltes / gitStatistics.fsx
Last active December 19, 2015 17:20
Number of authors
let numberOfAuthors =
totalCommits
|> Array.groupBy(fun c -> c.CommitInfo.Author)
|> Array.length
----------------------------------------------------
val numberOfAuthors : int = 22
@vgaltes
vgaltes / gitStatistics.fsx
Created December 19, 2015 17:11
Number of entities changed
let numberOfEntitiesChanged =
totalCommits
|> Array.collect(fun c -> c.Files)
|> Array.length
-----------------------------------------------
val numberOfEntitiesChanged : int = 37765
@vgaltes
vgaltes / gitStatistics.fsx
Created December 19, 2015 17:08
Number of entities
let numberOfEntities =
totalCommits
|> Array.collect(fun c -> c.Files)
|> Array.groupBy(fun f -> f.FileName)
|> Array.length
--------------------------------------------
val numberOfEntities : int = 8119
@vgaltes
vgaltes / gitStatistics.fsx
Created December 19, 2015 17:03
Number of commits
let numberOfCommits = totalCommits |> Array.length
-------------------------------------------
val numberOfCommits : int = 5061
@vgaltes
vgaltes / gitStatistics.fsx
Created December 19, 2015 17:00
Types from previous article
type CommitInfo = {Hash : string; Author : string; TimeStamp : DateTime; Message : string}
type CommittedFile = {LinesAdded: int option; LinesDeleted: int option; FileName: string}
type Commit = {CommitInfo: CommitInfo; Files: CommittedFile[]}
val totalCommits : Commit []
@vgaltes
vgaltes / parser.fsx
Created December 13, 2015 11:49
Final solution
#r "../packages/FSharp.Data.2.2.5/lib/net40/FSharp.Data.dll"
open System
open System.IO
open FSharp.Data
[<Literal>]
let lineBreak = "\r\n"
type CommitInfo = {Hash : string; Author : string; TimeStamp : DateTime; Message : string}
type CommittedFile = {LinesAdded: int option; LinesDeleted: int option; FileName: string}
@vgaltes
vgaltes / parser.fs
Created December 13, 2015 11:46
Using the function
let totalCommits =
commits
|> Array.map extractCommitInfo
@vgaltes
vgaltes / parser.fs
Created December 13, 2015 11:44
Whole function code
let extractCommitInfo (commit:string) =
let isCommitInfoLine (line: string) =
line.StartsWith("[")
let extractCommitedFilesInfo c =
let commitFileLine = CommitLineCsv.Parse(c).Rows |> Seq.head
{LinesAdded = commitFileLine.LinesAdded; LinesDeleted = commitFileLine.LinesDeleted; FileName = commitFileLine.FileName}
let commitLines = commit.Split([|lineBreak|], StringSplitOptions.RemoveEmptyEntries)
let commitInfoLine = commitLines |> Array.takeWhile(isCommitInfoLine) |> Array.last
@vgaltes
vgaltes / parser.fs
Created December 13, 2015 11:43
Final object
{CommitInfo = commitInfo; Files = fileRows}
@vgaltes
vgaltes / parser.fs
Created December 13, 2015 11:40
Extracting the commit line info
type CommitLineCsv = CsvProvider<"LinesAdded\tLinesDeleted\tFile", HasHeaders = false, Schema = "LinesAdded(int option),LinesDeleted(int option),FileName">
let extractCommitedFilesInfo c =
let commitFileLine = CommitLineCsv.Parse(c).Rows |> Seq.head
{LinesAdded = commitFileLine.LinesAdded; LinesDeleted = commitFileLine.LinesDeleted; FileName = commitFileLine.FileName}
let fileRows = fileLines |> Array.map extractCommitedFilesInfo