app/lib/ConfigFinder.scala (24 lines of code) (raw):
package lib
import com.madgag.git._
import lib.Config.RepoConfig
import org.eclipse.jgit.lib.ObjectId
import org.eclipse.jgit.revwalk.RevCommit
import org.eclipse.jgit.treewalk.TreeWalk
import com.madgag.scala.collection.decorators._
object ConfigFinder {
val ProutConfigFileName = ".prout.json"
private val configFilter: TreeWalk => Boolean = w => {
w.isSubtree || w.getNameString == ProutConfigFileName
}
def configIdMapFrom(c: RevCommit)(implicit repoThreadLocal: ThreadLocalObjectDatabaseResources): Map[String, ObjectId] = {
implicit val reader = repoThreadLocal.reader()
walk(c.getTree)(configFilter).map { tw =>
val configPath = tw.slashPrefixedPath
configPath.reverse.dropWhile(_ != '/').reverse -> tw.getObjectId(0)
}.toMap
}
def config(c: RevCommit)(implicit repoThreadLocal: ThreadLocalObjectDatabaseResources): RepoConfig = {
val checkpointsByNameByFolder = configIdMapFrom(c).mapV(Config.readConfigFrom)
RepoConfig(checkpointsByNameByFolder)
}
}