@@ -22,44 +22,52 @@ import org.eclipse.jgit.revwalk.RevWalk
2222import org.eclipse.jgit.util.io.DisabledOutputStream
2323
2424object CommitCrawler {
25- fun getObservable (git : Git , repo : Repo ): Observable <Commit > = Observable
26- .create<Commit > { subscriber ->
27- try {
28- val revWalk = RevWalk (git.repository)
29- val commitId = git.repository.resolve(RepoHelper .MASTER_BRANCH )
30- revWalk.markStart(revWalk.parseCommit(commitId))
31- for (revCommit in revWalk) {
32- subscriber.onNext(Commit (revCommit))
25+ fun getObservable (git : Git , repo : Repo ,
26+ numCommits : Int = 0): Observable <Commit > {
27+ var curNumCommits = 0
28+ return Observable
29+ .create<Commit > { subscriber ->
30+ try {
31+ val revWalk = RevWalk (git.repository)
32+ val commitId = git.repository.resolve(RepoHelper .MASTER_BRANCH )
33+ revWalk.markStart(revWalk.parseCommit(commitId))
34+ for (revCommit in revWalk) {
35+ subscriber.onNext(Commit (revCommit))
36+ }
37+ // Commits are combined in pairs, an empty commit concatenated
38+ // to calculate the diff of the initial commit.
39+ subscriber.onNext(Commit ())
40+ } catch (e: Exception ) {
41+ Logger .error(e, " Commit producing error" )
42+ subscriber.onError(e)
3343 }
34- // Commits are combined in pairs, an empty commit concatenated
35- // to calculate the diff of the initial commit .
36- subscriber.onNext( Commit ())
37- } catch (e : Exception ) {
38- Logger .error(e, " Commit producing error " )
39- subscriber.onError(e)
40- }
41- subscriber.onComplete()
42- } // TODO(anatoly): Rewrite diff calculation in non-weird way.
43- .pairWithNext() // Pair commits to get diff.
44- .map { (new, old) ->
45- // Mapping and stats extraction.
46- Logger .debug {
47- " Commit: ${new.raw?.name ? : " " } : ${new.raw?.shortMessage} "
48- }
49- new.diffs = getDiffFiles(git, new, old)
50- Logger .debug { " Diff: ${new.diffs.size} entries " }
51- // Count lines on all non-binary files. This is additional
52- // statistics to CommitStats because not all file extensions
53- // may be supported.
54- new.numLinesAdded = new.diffs.fold(0 ) { total, file ->
55- total + file.getAllAdded ().size
56- }
57- new.numLinesDeleted = new.diffs.fold( 0 ) { total, file ->
58- total + file.getAllDeleted().size
44+ subscriber.onComplete()
45+ } // TODO(anatoly): Rewrite diff calculation in non-weird way .
46+ .pairWithNext() // Pair commits to get diff.
47+ .map { (new, old) ->
48+ curNumCommits ++
49+ // Mapping and stats extraction.
50+ val message = new.raw?.shortMessage ? : " "
51+ val hash = new.raw?.name ? : " "
52+ val perc = if (numCommits != 0 ) {
53+ (curNumCommits.toDouble() / numCommits) * 100
54+ } else 0.0
55+ Logger .printCommit(message, hash, perc)
56+ new.diffs = getDiffFiles(git, new, old)
57+ Logger .debug { " Diff : ${new.diffs.size} entries " }
58+ // Count lines on all non-binary files. This is additional
59+ // statistics to CommitStats because not all file extensions
60+ // may be supported.
61+ new.numLinesAdded = new.diffs.fold( 0 ) { total, file ->
62+ total + file.getAllAdded().size
63+ }
64+ new.numLinesDeleted = new.diffs.fold(0 ) { total, file ->
65+ total + file.getAllDeleted ().size
66+ }
67+ new.repo = repo
68+ new
5969 }
60- new.repo = repo
61- new
62- }
70+ }
6371
6472 private fun getDiffFiles (git : Git ,
6573 commitNew : Commit ,
0 commit comments