15420d4d89
Partially rewrote the forum permissions system to make it more stable. Moved config.go into it's own package in /config/ Removed Go Git as a dependency. Tweaked the GopherJS pulling. Fixed inserts where all the columns have default values. Reverted a silly tweak I made thinking that mOrder == order. Removed the /common/ hack from the patcher. Fixed a bug where the forum creator would ignore the visiblity value you provided. The tests now work again. Swapped a misplaced fmt.Println with a fmt.Printf. Fixed a bug in the installer where all the table logs would be on one line in the console. Added more logging to the installer.
130 lines
2.6 KiB
Go
130 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"database/sql"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"runtime/debug"
|
|
|
|
"../common"
|
|
"../config"
|
|
"../query_gen/lib"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
)
|
|
|
|
func main() {
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
|
|
// Capture panics instead of closing the window at a superhuman speed before the user can read the message on Windows
|
|
defer func() {
|
|
r := recover()
|
|
if r != nil {
|
|
fmt.Println(r)
|
|
debug.PrintStack()
|
|
pressAnyKey(scanner)
|
|
return
|
|
}
|
|
}()
|
|
|
|
config.Config()
|
|
if common.DbConfig.Adapter != "mysql" && common.DbConfig.Adapter != "" {
|
|
log.Fatal("Only MySQL is supported for upgrades right now, please wait for a newer build of the patcher")
|
|
}
|
|
|
|
err := prepMySQL()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
err = patcher(scanner)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func pressAnyKey(scanner *bufio.Scanner) {
|
|
fmt.Println("Please press enter to exit...")
|
|
for scanner.Scan() {
|
|
_ = scanner.Text()
|
|
return
|
|
}
|
|
}
|
|
|
|
func prepMySQL() error {
|
|
return qgen.Builder.Init("mysql", map[string]string{
|
|
"host": common.DbConfig.Host,
|
|
"port": common.DbConfig.Port,
|
|
"name": common.DbConfig.Dbname,
|
|
"username": common.DbConfig.Username,
|
|
"password": common.DbConfig.Password,
|
|
"collation": "utf8mb4_general_ci",
|
|
})
|
|
}
|
|
|
|
type SchemaFile struct {
|
|
DBVersion string // Current version of the database schema
|
|
DynamicFileVersion string
|
|
MinGoVersion string // TODO: Minimum version of Go needed to install this version
|
|
MinVersion string // TODO: Minimum version of Gosora to jump to this version, might be tricky as we don't store this in the schema file, maybe store it in the database
|
|
}
|
|
|
|
func patcher(scanner *bufio.Scanner) error {
|
|
data, err := ioutil.ReadFile("./schema/lastSchema.json")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var schemaFile SchemaFile
|
|
err = json.Unmarshal(data, &schemaFile)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_ = schemaFile
|
|
return patch0(scanner)
|
|
}
|
|
|
|
func execStmt(stmt *sql.Stmt, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = stmt.Exec()
|
|
return err
|
|
}
|
|
|
|
/*func eachUserQuick(handle func(int)) error {
|
|
stmt, err := qgen.Builder.Select("users").Orderby("uid desc").Limit(1).Prepare()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var topID int
|
|
err := stmt.QueryRow(topID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := 1; i <= topID; i++ {
|
|
err = handle(i)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}*/
|
|
|
|
func eachUser(handle func(int) error) error {
|
|
acc := qgen.Builder.Accumulator()
|
|
err := acc.Select("users").Each(func(rows *sql.Rows) error {
|
|
var uid int
|
|
err := rows.Scan(&uid)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return handle(uid)
|
|
})
|
|
return err
|
|
}
|