def getGitRepo()

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()
  }