@@ -3,7 +3,7 @@ package fr.brouillard.gitbucket.h2.controller
33import java .io .File
44import java .util .Date
55import fr .brouillard .gitbucket .h2 ._
6- import fr .brouillard .gitbucket .h2 .controller .H2BackupController .{defaultBackupFileName , doBackup }
6+ import fr .brouillard .gitbucket .h2 .controller .H2BackupController .{defaultBackupFileName , doBackup , exportConnectedDatabase , logger }
77import gitbucket .core .controller .ControllerBase
88import gitbucket .core .model .Account
99import gitbucket .core .util .AdminAuthenticator
@@ -13,7 +13,13 @@ import org.scalatra.{ActionResult, Ok, Params}
1313import org .slf4j .LoggerFactory
1414import org .scalatra .forms ._
1515
16+ import java .sql .Connection
17+ import scala .util .Using
18+
1619object H2BackupController {
20+
21+ private val logger = LoggerFactory .getLogger(classOf [H2BackupController ])
22+
1723 def defaultBackupFileName (): String = {
1824 val format = new java.text.SimpleDateFormat (" yyyy-MM-dd_HH-mm" )
1925 " gitbucket-db-" + format.format(new Date ()) + " .zip"
@@ -28,28 +34,32 @@ object H2BackupController {
2834 case _ => org.scalatra.Unauthorized ()
2935 }
3036 }
37+
38+ def exportConnectedDatabase (conn : Connection , exportFile : File ): Unit = {
39+ val destFile = if (exportFile.isAbsolute) exportFile else new File (GitBucketHome + " /backup" , exportFile.toString)
40+
41+ logger.info(" Exporting database to {}" , destFile)
42+
43+ Using .resource(conn.prepareStatement(" BACKUP TO ?" )){ statement =>
44+ statement.setString(1 , destFile.toString)
45+ statement.execute()
46+ }
47+
48+ logger.info(" Exported {} bytes." , exportFile.length())
49+ }
50+
3151}
3252
3353class H2BackupController extends ControllerBase with AdminAuthenticator {
34- private val logger = LoggerFactory .getLogger(classOf [H2BackupController ])
3554
3655 case class BackupForm (destFile : String )
3756
3857 private val backupForm = mapping(
3958 " dest" -> trim(label(" Destination" , text(required)))
4059 )(BackupForm .apply)
4160
42- // private val defaultBackupFile:String = new File(GitBucketHome, "gitbucket-database-backup.zip").toString;
43-
4461 def exportDatabase (exportFile : File ): Unit = {
45- val destFile = if (exportFile.isAbsolute) exportFile else new File (GitBucketHome + " /backup" , exportFile.toString)
46-
47- val session = Database .getSession(request)
48- val conn = session.conn
49-
50- logger.info(" exporting database to {}" , destFile)
51-
52- conn.prepareStatement(" BACKUP TO '" + destFile + " '" ).execute()
62+ exportConnectedDatabase(Database .getSession(request).conn, exportFile)
5363 }
5464
5565 get(" /admin/h2backup" )(adminOnly {
0 commit comments