Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 34 additions & 12 deletions src/main/kotlin/app/hashers/CodeLongevity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import org.eclipse.jgit.util.io.DisabledOutputStream
import java.io.InputStream
import java.io.File
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.ObjectOutputStream
import java.io.ObjectInputStream
Expand Down Expand Up @@ -146,7 +147,9 @@ class CodeLongevity(private val serverRepo: Repo,
git: Git) {
val repo: Repository = git.repository
val head: RevCommit =
RevWalk(repo).parseCommit(repo.resolve(RepoHelper.MASTER_BRANCH))
try { RevWalk(repo).parseCommit(repo.resolve(RepoHelper.MASTER_BRANCH)) }
catch(e: Exception) { throw Exception("No branch") }

val df = DiffFormatter(DisabledOutputStream.INSTANCE)
val storageDir = ".sourcerer/data/longevity"
val storagePath = "$storageDir/${serverRepo.rehash}"
Expand Down Expand Up @@ -215,15 +218,27 @@ class CodeLongevity(private val serverRepo: Repo,
* Scans the repo to extract code line ages.
*/
fun scan() : CodeLineAges? {
// Load existing age data if any.
val iStream = try { ObjectInputStream(FileInputStream(storagePath)) }
catch(e : Exception ) { null }
val storedHead = iStream?.readObject() as RevCommit?
if (storedHead == head) {
return null
var storedHead: RevCommit? = null
var ageData: CodeLineAges = CodeLineAges()

// Load existing age data if any. Expected format: commit id and
// CodeLineAges structure following it.
try {
val iStream = ObjectInputStream(FileInputStream(storagePath))
val storedHeadId = iStream.readUTF()
Logger.debug("Stored repo head: $storedHeadId")
storedHead = RevWalk(repo).parseCommit(repo.resolve(storedHeadId))
if (storedHead == head) {
return null
}
ageData = (iStream.readObject() ?: CodeLineAges()) as CodeLineAges
}
catch(e: FileNotFoundException) { }
catch(e: Exception) {
Logger.error(
"Failed to read longevity data. CAUTION: data will be recomputed.",
e)
}

val ageData = (iStream?.readObject() ?: CodeLineAges()) as CodeLineAges

// Update ages.
getLinesObservable(storedHead).blockingSubscribe { line ->
Expand Down Expand Up @@ -252,9 +267,16 @@ class CodeLongevity(private val serverRepo: Repo,
if (Files.notExists(Paths.get(storageDir))) {
Files.createDirectories(Paths.get(storageDir))
}
val oStream = ObjectOutputStream(FileOutputStream(storagePath))
oStream.writeObject(head)
oStream.writeObject(ageData)
try {
val oStream = ObjectOutputStream(FileOutputStream(storagePath))
oStream.writeUTF(head.getName())
oStream.writeObject(ageData)
}
catch(e: Exception) {
Logger.error(
"Failed to save longevity data. CAUTION: data will be recomputed on a next run.",
e)
}
return ageData
}

Expand Down