@@ -22,44 +22,52 @@ import org.eclipse.jgit.revwalk.RevWalk
22
22
import org.eclipse.jgit.util.io.DisabledOutputStream
23
23
24
24
object 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)
33
43
}
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
59
69
}
60
- new.repo = repo
61
- new
62
- }
70
+ }
63
71
64
72
private fun getDiffFiles (git : Git ,
65
73
commitNew : Commit ,
0 commit comments