in app/lib/RepoUtil.scala [34:69]
def getGitRepo(dataDirectory: File, uri: String, credentials: Option[CredentialsProvider] = None): Repository = {
def invoke[C <: GitCommand[_], R](command: TransportCommand[C, R]): R = {
command.setTimeout(15)
credentials.foreach(command.setCredentialsProvider)
command.call()
}
def getUpToDateRepo(): Repository = {
dataDirectory.mkdirs()
val gitdir = new File(dataDirectory,"repo.git")
if (gitdir.exists()) {
assert(gitdir.list().nonEmpty, s"No child files found in ${gitdir.getAbsolutePath}")
logger.info(s"Updating Git repo with fetch... $uri")
val repo = FileRepositoryBuilder.create(gitdir)
val remoteConfig = new RemoteConfig(repo.getConfig, DEFAULT_REMOTE_NAME)
val remoteUris = remoteConfig.getURIs
val remoteUri = remoteUris.asScala.headOption.getOrElse(throw new IllegalStateException(s"No remote configured for $uri")).toString
assert(remoteUri == uri, s"Wrong uri - expected $uri, got $remoteUri")
invoke(repo.git.fetch())
repo
} else {
Files.createDirectories(gitdir.toPath.getParent)
logger.info(s"Cloning new Git repo... $uri")
invoke(
Git.cloneRepository()
.setDepth(200) // the aim here is to reduce the memory load of big repos like guardian/frontend
.setBare(true).setDirectory(gitdir).setURI(uri)).getRepository
}
}
getUpToDateRepo()
}