88 "os/exec"
99 "path/filepath"
1010 "regexp"
11+ "strconv"
1112 "strings"
1213 "time"
1314
@@ -129,7 +130,7 @@ func LastCommitMessage() (string, error) {
129130}
130131
131132// Log produces a formatted gitlog between 2 git shas
132- func Log (sha1 , sha2 string ) (string , error ) {
133+ func Log (sha1 , sha2 string ) (string , int , error ) {
133134 cmd := New ("-c" , "log.showSignature=false" ,
134135 "log" ,
135136 "--no-color" ,
@@ -139,16 +140,28 @@ func Log(sha1, sha2 string) (string, error) {
139140 cmd .Stdout = nil
140141 outputs , err := cmd .Output ()
141142 if err != nil {
142- return "" , errors .Errorf ("Can't load git log %s..%s" , sha1 , sha2 )
143+ return "" , 0 , errors .Errorf ("Can't load git log %s..%s" , sha1 , sha2 )
143144 }
144145
145146 diffCmd := New ("diff" , "--stat" , sha1 )
146147 diffCmd .Stdout = nil
147148 diffOutput , err := diffCmd .Output ()
148149 if err != nil {
149- return "" , errors .Errorf ("Can't load diffstat" )
150+ return "" , 0 , errors .Errorf ("Can't load diffstat" )
150151 }
151- return string (outputs ) + string (diffOutput ), nil
152+
153+ numCommitsCmd := New ("rev-list" , "--count" , fmt .Sprintf ("%s...%s" , sha1 , sha2 ))
154+ numCommitsCmd .Stdout = nil
155+ numCommitsString , err := numCommitsCmd .Output ()
156+ if err != nil {
157+ return "" , 0 , errors .Errorf ("Can't determine number of commits" )
158+ }
159+ numCommits , err := strconv .Atoi (strings .TrimSpace (string (numCommitsString )))
160+ if err != nil {
161+ return "" , 0 , errors .Errorf ("Can't determine number of commits(%s)" , numCommitsString )
162+ }
163+
164+ return string (outputs ) + string (diffOutput ), numCommits , nil
152165}
153166
154167// CurrentBranch returns the currently checked out branch
0 commit comments