diff --git a/src/main/resources/database.conf b/src/main/resources/database.conf deleted file mode 100644 index 9ce0c89..0000000 --- a/src/main/resources/database.conf +++ /dev/null @@ -1,5 +0,0 @@ -db { - url = "jdbc:h2:${DatabaseHome};MVCC=true" - user = "sa" - password = "sa" -} diff --git a/src/main/resources/database_h2.conf b/src/main/resources/database_h2.conf new file mode 100644 index 0000000..9ce0c89 --- /dev/null +++ b/src/main/resources/database_h2.conf @@ -0,0 +1,5 @@ +db { + url = "jdbc:h2:${DatabaseHome};MVCC=true" + user = "sa" + password = "sa" +} diff --git a/src/main/scala/gitbucket/core/controller/FileUploadController.scala b/src/main/scala/gitbucket/core/controller/FileUploadController.scala index a11aa36..39bdb99 100644 --- a/src/main/scala/gitbucket/core/controller/FileUploadController.scala +++ b/src/main/scala/gitbucket/core/controller/FileUploadController.scala @@ -6,6 +6,7 @@ import gitbucket.core.util._ import gitbucket.core.util.ControlUtil._ import gitbucket.core.util.Directory._ +import gitbucket.core.util.Implicits._ import org.eclipse.jgit.api.Git import org.eclipse.jgit.dircache.DirCache import org.eclipse.jgit.lib.{FileMode, Constants} @@ -79,11 +80,20 @@ post("/import") { session.get(Keys.Session.LoginAccount).collect { case loginAccount: Account if loginAccount.isAdmin => execute({ (file, fileId) => - // TODO Import data here!! - println("********") - println(fileId) - println(file.getName) - println("********") + using(file.getInputStream){ in => + import JDBCUtil._ + val sql = IOUtils.toString(in, "UTF-8") + val conn = request2Session(request).conn + conn.setAutoCommit(false) + try { + conn.update(sql) + conn.commit() + } catch { + case e: Throwable => + conn.rollback() + throw e + } + } }, _ => true) } redirect("/admin/data") diff --git a/src/main/scala/gitbucket/core/util/DatabaseConfig.scala b/src/main/scala/gitbucket/core/util/DatabaseConfig.scala index 9ab374d..5bbb9f2 100644 --- a/src/main/scala/gitbucket/core/util/DatabaseConfig.scala +++ b/src/main/scala/gitbucket/core/util/DatabaseConfig.scala @@ -1,13 +1,28 @@ package gitbucket.core.util import com.typesafe.config.ConfigFactory -import Directory.DatabaseHome +import java.io.File +import Directory._ import liquibase.database.AbstractJdbcDatabase import liquibase.database.core.{MySQLDatabase, H2Database} +import org.apache.commons.io.FileUtils object DatabaseConfig { - private lazy val config = ConfigFactory.load("database") + private lazy val config = { + val file = new File(GitBucketHome, "database.conf") + if(!file.exists){ + FileUtils.write(file, + """db { + | url = "jdbc:h2:${DatabaseHome};MVCC=true" + | user = "sa" + | password = "sa" + |} + |""".stripMargin, "UTF-8") + } + ConfigFactory.parseFile(file) + } + private lazy val dbUrl = config.getString("db.url") def url(directory: Option[String]): String = diff --git a/src/main/scala/gitbucket/core/util/JDBCUtil.scala b/src/main/scala/gitbucket/core/util/JDBCUtil.scala index 7c4d19c..48a37e8 100644 --- a/src/main/scala/gitbucket/core/util/JDBCUtil.scala +++ b/src/main/scala/gitbucket/core/util/JDBCUtil.scala @@ -68,6 +68,12 @@ val dbMeta = conn.getMetaData val allTablesInDatabase = allTablesOrderByDependencies(dbMeta) + allTablesInDatabase.reverse.foreach { tableName => + if (targetTables.contains(tableName)) { + out.write(s"DELETE FROM ${tableName};\n".getBytes("UTF-8")) + } + } + allTablesInDatabase.foreach { tableName => if (targetTables.contains(tableName)) { val sb = new StringBuilder() diff --git a/src/main/twirl/gitbucket/core/admin/data.scala.html b/src/main/twirl/gitbucket/core/admin/data.scala.html index 6f5fad5..b318d37 100644 --- a/src/main/twirl/gitbucket/core/admin/data.scala.html +++ b/src/main/twirl/gitbucket/core/admin/data.scala.html @@ -24,9 +24,16 @@