mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-03 12:05:59 +01:00
66 lines
1.9 KiB
Scala
66 lines
1.9 KiB
Scala
package plugin
|
|
|
|
import util.Directory._
|
|
import org.eclipse.jgit.api.Git
|
|
import org.slf4j.LoggerFactory
|
|
import org.quartz.{Scheduler, JobExecutionContext, Job}
|
|
import org.quartz.JobBuilder._
|
|
import org.quartz.TriggerBuilder._
|
|
import org.quartz.SimpleScheduleBuilder._
|
|
|
|
class PluginUpdateJob extends Job {
|
|
|
|
private val logger = LoggerFactory.getLogger(classOf[PluginUpdateJob])
|
|
private var failedCount = 0
|
|
|
|
/**
|
|
* Clone or pull all plugin repositories
|
|
*
|
|
* TODO Support plugin repository access through the proxy server
|
|
*/
|
|
override def execute(context: JobExecutionContext): Unit = {
|
|
try {
|
|
if(failedCount > 3){
|
|
logger.error("Skip plugin information updating because failed count is over limit")
|
|
} else {
|
|
logger.info("Start plugin information updating")
|
|
PluginSystem.repositories.foreach { repository =>
|
|
logger.info(s"Updating ${repository.id}: ${repository.url}...")
|
|
val dir = getPluginCacheDir()
|
|
val repo = new java.io.File(dir, repository.id)
|
|
if(repo.exists){
|
|
// pull if the repository is already cloned
|
|
Git.open(repo).pull().call()
|
|
} else {
|
|
// clone if the repository is not exist
|
|
Git.cloneRepository().setURI(repository.url).setDirectory(repo).call()
|
|
}
|
|
}
|
|
logger.info("End plugin information updating")
|
|
}
|
|
} catch {
|
|
case e: Exception => {
|
|
failedCount = failedCount + 1
|
|
logger.error("Failed to update plugin information", e)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
object PluginUpdateJob {
|
|
|
|
def schedule(scheduler: Scheduler): Unit = {
|
|
val job = newJob(classOf[PluginUpdateJob])
|
|
.withIdentity("pluginUpdateJob")
|
|
.build()
|
|
|
|
val trigger = newTrigger()
|
|
.withIdentity("pluginUpdateTrigger")
|
|
.startNow()
|
|
.withSchedule(simpleSchedule().withIntervalInHours(24).repeatForever())
|
|
.build()
|
|
|
|
scheduler.scheduleJob(job, trigger)
|
|
}
|
|
|
|
} |