@@ -9,27 +9,69 @@ import app.model.DiffContent
99import app.model.DiffFile
1010import app.model.DiffRange
1111import app.model.Repo
12- import app.utils.RepoHelper
1312import io.reactivex.Observable
13+ import org.apache.commons.codec.digest.DigestUtils
1414import org.eclipse.jgit.api.Git
1515import org.eclipse.jgit.diff.DiffEntry
1616import org.eclipse.jgit.diff.DiffFormatter
1717import org.eclipse.jgit.diff.RawText
18- import org.eclipse.jgit.errors.MissingObjectException
1918import org.eclipse.jgit.lib.ObjectId
2019import org.eclipse.jgit.revwalk.RevCommit
2120import org.eclipse.jgit.revwalk.RevWalk
2221import org.eclipse.jgit.util.io.DisabledOutputStream
22+ import java.util.LinkedList
2323
2424object CommitCrawler {
25+ private val MASTER_BRANCH = " refs/heads/master"
26+ private val REMOTE_HEAD = " refs/remotes/origin/HEAD"
27+
28+ fun getDefaultBranchHead (git : Git ): ObjectId {
29+ val remoteHead = git.branchList()?.repository?.allRefs?.filter {
30+ it.key.contains(REMOTE_HEAD )
31+ }?.entries?.firstOrNull()?.value?.target?.objectId
32+ if (remoteHead != null ) {
33+ Logger .debug { " Hashing from remote default branch" }
34+ return remoteHead
35+ }
36+ val masterBranch = git.repository.resolve(MASTER_BRANCH )
37+ if (masterBranch != null ) {
38+ Logger .debug { " Hashing from local master branch" }
39+ return masterBranch
40+ }
41+ throw Exception (" No remote default or local master branch found" )
42+ }
43+
44+ fun fetchRehashesAndEmails (git : Git ):
45+ Pair <LinkedList <String >, HashSet <String >> {
46+ val head: RevCommit = RevWalk (git.repository)
47+ .parseCommit(getDefaultBranchHead(git))
48+
49+ val revWalk = RevWalk (git.repository)
50+ revWalk.markStart(head)
51+
52+ val commitsRehashes = LinkedList <String >()
53+ val emails = hashSetOf<String >()
54+
55+ var commit: RevCommit ? = revWalk.next()
56+ while (commit != null ) {
57+ commitsRehashes.add(DigestUtils .sha256Hex(commit.name))
58+ emails.add(commit.authorIdent.emailAddress)
59+ commit.disposeBody()
60+ commit = revWalk.next()
61+ }
62+ revWalk.dispose()
63+
64+ return Pair (commitsRehashes, emails)
65+ }
66+
2567 fun getObservable (git : Git , repo : Repo ,
2668 numCommits : Int = 0): Observable <Commit > {
2769 var curNumCommits = 0
2870 return Observable
2971 .create<Commit > { subscriber ->
3072 try {
3173 val revWalk = RevWalk (git.repository)
32- val commitId = git.repository.resolve( RepoHelper . MASTER_BRANCH )
74+ val commitId = getDefaultBranchHead(git )
3375 revWalk.markStart(revWalk.parseCommit(commitId))
3476 for (revCommit in revWalk) {
3577 subscriber.onNext(Commit (revCommit))
0 commit comments