mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-07 22:15:51 +01:00
67 lines
2.0 KiB
Scala
67 lines
2.0 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 = {
|
|
// TODO Enable commented code to enable plug-in system
|
|
// val job = newJob(classOf[PluginUpdateJob])
|
|
// .withIdentity("pluginUpdateJob")
|
|
// .build()
|
|
//
|
|
// val trigger = newTrigger()
|
|
// .withIdentity("pluginUpdateTrigger")
|
|
// .startNow()
|
|
// .withSchedule(simpleSchedule().withIntervalInHours(24).repeatForever())
|
|
// .build()
|
|
//
|
|
// scheduler.scheduleJob(job, trigger)
|
|
}
|
|
|
|
} |