Skip to content

Commit 454bfa0

Browse files
feat: add config properties to disable hashers, disable code longevity (#185)
* feat: disable code longevity * feat: add number of commits for author calculation * feat: add more env switch for hashers * chore: refactor
1 parent 9584e8e commit 454bfa0

File tree

3 files changed

+39
-13
lines changed

3 files changed

+39
-13
lines changed

build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ buildConfig {
5555
// Models storage path.
5656
buildConfigField 'String', 'LIBRARY_MODELS_URL', 'https://storage.googleapis.com/sourcerer-app/library-models/v1/'
5757

58+
// Hashing.
59+
buildConfigField 'boolean', 'COMMIT_HASHER_ENABLED', project.hasProperty('commit-hasher-enabled') ? project.property('commit-hasher-enabled').toString() : 'true'
60+
buildConfigField 'boolean', 'FACT_HASHER_ENABLED', project.hasProperty('fact-hasher-enabled') ? project.property('fact-hasher-enabled').toString() : 'true'
61+
buildConfigField 'boolean', 'LONGEVITY_ENABLED', project.hasProperty('longevity-enabled') ? project.property('longevity-enabled').toString() : 'false'
62+
5863
buildConfig
5964
}
6065

src/main/kotlin/app/hashers/CommitCrawler.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ object CommitCrawler {
5757
}
5858

5959
fun fetchRehashesAndAuthors(git: Git):
60-
Pair<LinkedList<String>, HashSet<Author>> {
60+
Triple<LinkedList<String>, HashSet<Author>, HashMap<String, Int>> {
6161
val head: RevCommit = RevWalk(git.repository)
6262
.parseCommit(getDefaultBranchHead(git))
6363

@@ -67,6 +67,7 @@ object CommitCrawler {
6767
val commitsRehashes = LinkedList<String>()
6868
val emails = hashSetOf<String>()
6969
val names = hashMapOf<String, String>()
70+
val commitsCount = hashMapOf<String, Int>()
7071

7172
var commit: RevCommit? = revWalk.next()
7273
while (commit != null) {
@@ -81,6 +82,7 @@ object CommitCrawler {
8182
names[email] = name
8283
}
8384
}
85+
commitsCount[email] = commitsCount.getOrDefault(email, 0) + 1
8486

8587
commit.disposeBody()
8688
commit = revWalk.next()
@@ -90,11 +92,12 @@ object CommitCrawler {
9092
val authors = emails.map { email -> Author(names[email]!!, email) }
9193
.toHashSet()
9294

93-
return Pair(commitsRehashes, authors)
95+
return Triple(commitsRehashes, authors, commitsCount)
9496
}
9597

9698
fun getJGitObservable(git: Git,
9799
totalCommitCount: Int = 0,
100+
filteredEmails: HashSet<String>? = null,
98101
tail : RevCommit? = null) : Observable<JgitPair> =
99102
Observable.create { subscriber ->
100103

@@ -138,6 +141,12 @@ object CommitCrawler {
138141
} else 0.0
139142
Logger.printCommit(commit.shortMessage, commit.name, perc)
140143

144+
val email = commit.authorIdent.emailAddress
145+
if (filteredEmails != null && !filteredEmails.contains(email)) {
146+
commit = parentCommit
147+
continue
148+
}
149+
141150
val diffEntries = df.scan(parentCommit, commit)
142151
val diffEdits = diffEntries
143152
.filter { diff ->

src/main/kotlin/app/hashers/RepoHasher.kt

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
package app.hashers
55

6+
import app.BuildConfig
67
import app.Logger
78
import app.api.Api
89
import app.config.Configurator
@@ -56,18 +57,29 @@ class RepoHasher(private val localRepo: LocalRepo, private val api: Api,
5657
Logger.error(e, "Hashing error")
5758
}
5859

60+
// Only code longevity needs to calculate each commit, if it's
61+
// disabled then read only author's emails.
62+
val crawlerEmails = if (!BuildConfig.LONGEVITY_ENABLED) {
63+
filteredEmails
64+
} else null
65+
val jgitObservable = CommitCrawler.getJGitObservable(git,
66+
rehashes.size, crawlerEmails).publish()
67+
val observable = CommitCrawler.getObservable(git,
68+
jgitObservable, serverRepo)
69+
5970
// Hash by all plugins.
60-
val jgitObservable =
61-
CommitCrawler.getJGitObservable(git, rehashes.size).publish()
62-
val observable =
63-
CommitCrawler.getObservable(git, jgitObservable, serverRepo)
64-
65-
CommitHasher(serverRepo, api, rehashes, filteredEmails)
66-
.updateFromObservable(observable, onError)
67-
FactHasher(serverRepo, api, rehashes, filteredEmails)
68-
.updateFromObservable(observable, onError)
69-
CodeLongevity(serverRepo, filteredEmails, git)
70-
.updateFromObservable(jgitObservable, onError, api)
71+
if (BuildConfig.COMMIT_HASHER_ENABLED) {
72+
CommitHasher(serverRepo, api, rehashes, filteredEmails)
73+
.updateFromObservable(observable, onError)
74+
}
75+
if (BuildConfig.FACT_HASHER_ENABLED) {
76+
FactHasher(serverRepo, api, rehashes, filteredEmails)
77+
.updateFromObservable(observable, onError)
78+
}
79+
if (BuildConfig.LONGEVITY_ENABLED) {
80+
CodeLongevity(serverRepo, filteredEmails, git)
81+
.updateFromObservable(jgitObservable, onError, api)
82+
}
7183

7284
// Start and synchronously wait until all subscribers complete.
7385
Logger.print("Stats computation. May take a while...")

0 commit comments

Comments
 (0)